0

我在网上搜索并找到了示例,但我仍然正确。我在数据网格上有多个数据键,并且出现索引超出范围错误。有人能帮帮我吗。提前致谢。

有我的aspx

<asp:datagrid id="dgrTrans" runat="server" autogeneratecolumns="False" gridlines="Both" borderstyle="NotSet" cssclass="dgrd w97p" cellpadding="2" 
                                  horizontalalign="center" datakeyNames="ID, Description" > 

有我的代码来检索 ItemDataBound 上的值

Select Case e.Item.ItemType
            Case ListItemType.Item, ListItemType.AlternatingItem, ListItemType.EditItem

                Dim currentItem As DataGridItem = CType(e.Item, DataGridItem)
                Dim dKey As DataKey = Me.dgrTranscripts.DataKeys(currentItem.ItemIndex)
                Dim cn As String = dKey("Description").ToString()
  end select

我也尝试了以下代码,但我得到“从字符串转换”到类型“整数”无效。” 错误

Dim cn As String = dgrTranscripts.DataKeys(e.Item.DataItem("Description)).ToString
4

1 回答 1

0

您的情况下的索引只能是 0 或 1,因为只有两个键。您正在尝试使用等于 currentitem.ItemIndex 的索引检索 DataKey,它可以与您拥有的项目一样大,因此您会遇到超出范围的错误。您需要使用 0 或 1 作为 DataKey 索引。我不能给你一个明确的答案,因为你没有具体说明你想要做什么......

编辑:

而不是ItemDataBound,使用DataBoundevent 并遍历每一行来获取它的值。这是一个例子GridView

Protected Sub GridView1_RowDataBound(sender As Object, e As EventArgs) Handles GridView1.DataBound
    For Each row As GridViewRow In GridView1.Rows
        Dim cn = GridView1.DataKeys(row.RowIndex).Value
    Next
End Sub

在 上ItemDataBound,DataGrid 还不知道有键。他们将被分配到DataBound

于 2013-06-15T00:13:48.803 回答