尝试从一行中获取元素时出现gridview问题

时间:2011-01-12 20:29:45

标签: c# asp.net gridview

我有一个gridview,它成功绑定到数据库并获取所有数据。现在我在其中一个coloumns中添加了一个链接按钮:

GridViewRow grow = gvInbox.SelectedRow;            
DataRow dr = ((DataTable)this.gvInbox.DataSource).Rows[grow.DataItemIndex];
int MessageId = (int)dr["MessageId"];
Response.Write(MessageId);

基本上我正在尝试获取数据行并获得MessageID。但是,上面的第二行给我outofbound例外。

2 个答案:

答案 0 :(得分:0)

我认为你的类型转换稍微有点......你需要得到代表数据源的整个对象......

yours... ((DataTable)this.gvInbox.DataSource).

should be (DataTable)(this.gvInbox.DataSource).

所以你要对“this.gvInbox.DataSource”进行类型转换,这是数据表,然后从中获取.Rows []引用。

否则,它会像这样解释你的类型转换。

((DataTable)(this).gvInbox.DataSource).

答案 1 :(得分:0)

更好的方法是在GridView标记中将您的ID作为DataKey:

DataKeyNames="MessageId"

然后在你的代码中你可以引用它:

if(gvInbox.SelectedIndex > -1)
    MessageId = (int) gvInbox.DataKeys[gvInbox.SelectedIndex].Value;

请记住,DataTable不会在回发中出现。因此,要将数据“输出”不是DataKey的GridView单元格,您会看到如下代码:

gvInbox.Rows[gvInbox.SelectedIndex].Cells[4].Text