2013-05-13 85 views
1

我想从GridView中获取值并将其保存为Session变量。从GridView获取值

我知道列名,并且在GridView中只有一个值。选择它并保存为Session变量的最佳方法是什么?

列名称是CustomerID,其值始终为int。

+0

什么类型的列是?一个'BoundField'? – Magnus 2013-05-13 16:22:22

+0

看看这个[答](http://stackoverflow.com/a/625303/122005) – chridam 2013-05-13 16:23:45

+0

网格可以有很多行 - 你知道行号吗? – 2013-05-13 16:24:08

回答

2

如果在一列和一行GridView,你可以在下面尝试。

Session["MySessionValue"]= GridView1.Rows[0].Cells[0].Text; 

但是如果GridView中没有记录,通过索引访问时可能会抛出异常。所以最好还是检查GridView1.Rows.Count第一,并获得价值

+0

在页面加载时写入该代码是否正确? – joshuahornby10 2013-05-13 17:38:51

+0

你在哪里绑定数据?以及你想要这个值的地方? – Damith 2013-05-13 17:40:32

+0

我之所以问这个问题,是因为它似乎没有保存任何东西。我是否应该等待页面加载以调用代码?我只想将它保存到会话中,然后在用户点击的下一页上使用它。 – joshuahornby10 2013-05-13 17:42:07

1

您可以设置GridView的一个DataKey客户ID,并选择由:

int ID = Convert.ToInt32(GridView1.DataKeys[indx].Value);

indx是行指数的GridView ..

+0

我有一个错误,说索引超出范围。 GridView中只有一行,并尝试了0和1,仍然得到相同的错误。 – joshuahornby10 2013-05-13 16:31:40

+0

据我所知,列名有没有办法选择这个?感谢您一直以来的帮助。 – joshuahornby10 2013-05-13 16:36:25

+0

什么是您的功能选择一行? – mehdi 2013-05-13 17:07:56

1

这不是做这一个适当的方式,你更好的硬编码Damith的答案的cellindex但反正稍长版本

if (GridView1.Rows.Count > 0) 
{ 
    int indexofcolumn = 0; 
    foreach (DataControlField column in GridView1.Columns) 
    { 
     if (column.HeaderText == "CustomerID") break; 
     indexofcolumn++; 
    } 
    Session["CustomerID"] = GridView1.Rows[0].Cells[indexofcolumn].Text; 
}