我们在用asp.net GridView控件时经常需要在后台读取一行的数据,常见的方式有以下几种:
1.在后台RowCommand 事件中先取得行号,再根据行号去访问各列的值,具体方法可參考:http://www.cnblogs.com/kuitar/archive/2009/04/11/1433777.html
2.通过CommandArgument参数进行传递,具体方法如下:
在页面代码中,CommandArgument='<%#Eval("ID")+","+Eval("Name")+","+Eval("Age")%>'
后台取值方法如下: object[] arguments = e.CommandArgument.ToString().Split(',');
操作很简单,现在说一下我理解的原理。
CommandArgument是一个object类型的属性,要传多个参数只能靠字符串拼接然后在后台拆分。
还好,asp.net Eval方法很容易完成这样的功能,在CommandArgument='<%#Eval("ID")+","+Eval("Name")+","+Eval("Age")%>'中
执行过程如下,先分别对Eval进行绑定,然后把<%# %>里的东西ToString一下,再封装成object进行传递。
不信你可以试试用这种方式CommandArgument='<%#Eval("ID"),Eval("Name"),Eval("Age")%>'
执行时就会报错“ToString”方法没有采用“4”个参数的重载,为什么了?
按上面的原理,假如id=1,name=kuitar,age=24. 则后一种方式<%# %>里的内容为"1","kuitar","25"
现在ToString("1","kuitar","25",''可能还有个另外的参数,呵呵'),显然会出错。
而用第一种方式则不一样,绑定后<%# %>里的内容为"1,kuitar,25",因为+号起了作用。这时候ToString应该没有问题了。