如果可以确保数据源中项目的顺序没有更改,则可以使用CommandEventArgs的CommandArgument属性。
然而,一种更健壮的方法是使用GridView的DataKeys/SelectedDataKey财产。唯一需要注意的是,您的命令必须是“Select”类型(因此,默认情况下RowCommand将无法访问DataKey)。
假设构成列表的实体具有一定的唯一性,则可以在GridView的DataKeys属性中设置一个或多个键属性名称。当设置了GridView中的选定项时,您可以检索键值并在绑定列表中找到该项。此方法可以解决GridView中的序号位置与数据源中元素的序号位置不匹配的问题。
例子:
<asp:GridView ID="GridView1" runat="server" AutoGenerateSelectButton="True"
DataKeyNames="Name" onrowcommand="GridView1_RowCommand1"
onselectedindexchanged="GridView1_SelectedIndexChanged">
</asp:GridView>
然后页面的代码隐藏(或内联)将类似于:
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
// Value is the Name property of the selected row s bound object.
string foo = GridView1.SelectedDataKey.Value as string;
}
另一种选择是在GridView的Rows集合中进行搜索,通过获取控制值一次获取一列的值,但除非迫不得已,否则不建议这样做。
希望这能有所帮助。