【问题标题】:.NET - SelectedRow not returning any value.NET - SelectedRow 不返回任何值
【发布时间】:2019-05-22 00:19:35
【问题描述】:

我是 .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:

非常感谢!

【问题讨论】:

    标签: asp.net .net gridview


    【解决方案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

    【讨论】:

    • 我尝试了您的解决方案,但我将其作为错误返回(来自 Row Command 方法)并且 OnSelectedIndexChanged 方法未触发。 System.NullReferenceException HResult=0x80004003 Message=对象引用未设置为对象的实例。 Source= StackTrace:
    • 你在 GridView 标头标签中添加了 OnSelectedIndexChanged 吗?
    • 是的,在问题的代码中也可见
    • 从前端和后端删除 Row 命令方法并仅添加 OnSelectedIndexChanged 方法。
    • 该方法根本没有触发,我打开了调试器但它没有触发。 (我从前端和后端都删除了行命令方法)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多