WebForm中GridView获取点击那一行的指定列的值

在古老的WebForm中,用GridView控件实现了一个数据列表,列表最后一列是用asp:ButtonField实现的修改按钮,点击修改时,要打开该条新闻的修改界面,这里有一个关键点,就是必须获取到点击新闻的ID,ASPX前端代码如下:

<asp:GridView ID="GridView" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" OnRowCommand="GridView_RowCommand">
    <Columns>
        <asp:BoundField HeaderText="新闻ID" DataField="ID" Visible="false" />
        <asp:BoundField HeaderText="新闻标题" DataField="Title" />
        <asp:BoundField HeaderText="发布时间" DataField="PubTime" />
        <asp:ButtonField HeaderText="操作" Text="修改" CommandName="look" />
    </Columns>
</asp:GridView>

.

上面GridView中用了OnRowCommand="GridView_RowCommand",在aspx.cs的GridView_RowCommand方法体里获取点击新闻ID的2个方法:
方法一:
1,先获取点击新闻在列表中的索引值

int index = Convert.ToInt32(e.CommandArgument);

2,然后获取

string newsID = GridView.Rows[index].Cells[0].Text;

注意:本案例中,<asp:BoundField HeaderText="ID" DataField="ID" Visible="false" /> 使用了Visible="false",所以方法一获取不到ID,把Visible="false"去掉就能获取了。

方法二:
既然方法一里因为控件设置了Visible="false"获取不到,那么再找个新方法来获取
1,在GridView里增加DataKeyNames属性,DataKeyNames的值可以是多个,用逗号分隔,比如DataKeyNames="ID,Title"
2,先获取点击新闻在列表中的索引值

int index = Convert.ToInt32(e.CommandArgument);

3,然后获取

string newsID = GridView.DataKeys[index]["ID"].ToString();

本文核心就是GridView.Rows[index].Cells[0].TextGridView.DataKeys[index]["ID"].ToString(),注意两者使用的区别!