我正在使用绑定到GridViewList<Customer>。当通过某些按钮触发RowCommand时,我希望能够从Customer检索当前行的e.CommandArgument对象,如下所示:

protected void GridView_RowCommand(object sender, GridViewCommandEventArgs e)
{
    Customer customer = (Customer)e.CommandArgument;
    DoSomething(customer);
}


如何在事件触发前将Customer对象分配给CommandArgument

最佳答案

我不确定您实际上是否可以在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 click事件时,可以从CommandArgument中反序列化对象

FooBar fooBar = Newtonsoft.Json.JsonConvert.DeserializeObject<FooBar>(e.CommandArgument.ToString());


现在这行得通,但是我不确定这是否是最佳解决方案。

08-16 06:16