.NET-SelectedRow不返回任何值

时间:2018-12-21 14:17:00

标签: asp.net .net gridview

.net我是新手!

我有两个连接到大型数据库的网格视图。第一个返回ID所搜索问题的列表,而另一个返回主题所搜索的问题。

我正在尝试从gridview获取ID,并从选择按钮返回问题,但是当我使用selectedRow时,它什么也不返回。

我尝试了多种方法,这就是我现在所拥有的。有什么建议么?

    Protected Sub IssuesGV_SelectedIndexChanging(ByVal sender As Object, ByVal e As GridViewSelectEventArgs)
        Dim pName As String
        pName = IssuesGV.SelectedRow.Cells(0).Text
        BindGridComments(pName)
    End Sub

    Protected Sub IssuesGV_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
        If e.Row.RowType = DataControlRowType.DataRow Then
            e.Row.Attributes("onmouseover") = "this.style.backgroundColor='aquamarine';"
            e.Row.Attributes("onmouseout") = "this.style.backgroundColor='white';"
            e.Row.ToolTip = "Click last column for selecting this row."
            ' e.Row.Cells(0).Attributes.Add("onclick", )
        End If
    End Sub
Protected Sub IssuesGV_RowCommand(sender As Object, e As GridViewCommandEventArgs)


        ' ' Dim row As GridViewRow = IssuesGV.Rows(rowIndex)

        '     v = row.Cells(1).Text
        'v = IssuesGV.SelectedRow.Cells(0).Text
        ' TextBox1.Text = v
        'TextBox1.Text = v

        If (e.CommandName = "Select1") Then
            Dim index As Int16
            index = Convert.ToInt32(e.CommandArgument)
            Dim row As GridViewRow
            row = IssuesGV.Rows(index)
            Dim item As ListItem
            item.Text = Server.HtmlDecode(row.Cells(0).Text)
        End If




    End Sub

以下是我的gridview代码(我正在使用选择按钮的代码):

 <asp:GridView ID="IssuesGV" runat="server" AutoPostBack="true" OnRowCommand ="IssuesGV_RowCommand" OnRowDataBound="IssuesGV_RowDataBound" OnSelectedIndexChanged = "IssuesGV_OnSelectedIndexChanged" SelectedIndexChaning ="IssuesGV_SelectedIndexChanging" AutoGenerateColumns="False" DataKeyNames="number" DataSourceID="IssueDS" EnableModelValidation="True">
            <Columns>
                <asp:BoundField DataField="number" HeaderText="number" ReadOnly="True" SortExpression="number" />
                <asp:BoundField DataField="subject" HeaderText="subject" SortExpression="subject" />
                <asp:BoundField DataField="description" HeaderText="description" SortExpression="description" />
                <asp:BoundField DataField="created_at" HeaderText="created_at" SortExpression="created_at" />
                <asp:BoundField DataField="opener_name" HeaderText="opener_name" SortExpression="opener_name" />
                <asp:BoundField DataField="project_name" HeaderText="project_name" SortExpression="project_name" />
                <asp:ButtonField Text="Select" CommandName="Select1" ItemStyle-Width="30" ButtonType="Button" HeaderText="Select" ShowHeader="True" SortExpression="number"  >
                <ItemStyle Width="30px" />
                </asp:ButtonField>
            </Columns>
        </asp:GridView>

我收到的错误是这个:

  

System.ArgumentOutOfRangeException HResult = 0x80131502
  邮件=索引超出范围。必须为非负且小于   集合的大小。参数名称:index Source = StackTrace:

非常感谢!

1 个答案:

答案 0 :(得分:1)

前端:

您的GridView应该看起来像这样:

<asp:GridView ID="IssuesGV" runat="server" AutoGenerateColumns="false" 
    OnSelectedIndexChanged="IssuesGV_OnSelectedIndexChanged">
    <Columns>
        <asp:BoundField DataField="number" HeaderText="number" />

            ...Some Other Fields

        <asp:ButtonField Text="Select" CommandName="Select" ItemStyle-Width="150" />
    </Columns>
</asp:GridView>

后端:

然后添加GridView的代码OnSelectedIndexChanged

Protected Sub IssuesGV_OnSelectedIndexChanged(sender As Object, e As EventArgs)
    'Accessing Selected BoundField Column
    Dim number As String = IssuesGV.SelectedRow.Cells(0).Text

    label.Text = "<b>Number Value:</b> " & number & " <b>"
End Sub

参考:查看完整示例here


编辑

由于某种原因,如果OnSelectedIndexChanged方法未触发,则只需在GridView标头标记中添加以下属性:

AutoGenerateSelectButton="True"

这将在GridView行中创建一个Select链接,这将触发OnSelectedIndexChanged方法。

PS:如果最重要的解决方法不起作用,请参阅此post

相关问题