无法在ItemDataBound上获取datakey值

时间:2013-06-14 23:36:28

标签: asp.net vb.net

我在网上搜索并找到了示例,但我仍然做对了。我在datagrid上有一个多数据键,我得到索引超出范围错误。有人会帮助我吗?提前谢谢。

有我的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

1 个答案:

答案 0 :(得分:0)

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

编辑:

使用ItemDataBound事件而不是DataBound,并遍历每一行以获取其值。 以下是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

上分配