从GridView RowCommand中的CommandArgument获取实体对象

时间:2013-05-03 09:01:51

标签: c# asp.net .net gridview

我正在使用绑定到GridView的{​​{1}}。当某个按钮触发List<Customer>时,我希望能够从RowCommand中检索当前行的Customer对象,如下所示:

e.CommandArgument

如何在事件触发前将protected void GridView_RowCommand(object sender, GridViewCommandEventArgs e) { Customer customer = (Customer)e.CommandArgument; DoSomething(customer); } 对象分配给Customer

1 个答案:

答案 0 :(得分:2)

我不确定您是否可以在CommandArgument中存储复杂对象,因为它似乎只接受字符串或数值。

我从未真正付诸实践的东西是将对象转换为Json字符串并将其用作命令参数。

例如,使用Newtonsoft.Json和名为FooBar

的虚拟对象
<asp:Button ID="btnOne" runat="server" 
CommandName="Click" 
CommandArgument='<%#Newtonsoft.Json.JsonConvert.SerializeObject((FooBar)Container.DataItem) %>' 
Text="Click" />

然后,当您处理GridView RowCommand单击事件时,可以从CommandArgument

反序列化该对象
FooBar fooBar = Newtonsoft.Json.JsonConvert.DeserializeObject<FooBar>(e.CommandArgument.ToString());

现在这有效,但不管它是否是最佳解决方案,我不确定。