果4点儿

我边学边干,在IT世界闯荡.
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

后台获取 GridView 行数据的常见两种方式

Posted on 2009-07-03 11:51  果4点儿  阅读(3773)  评论(0编辑  收藏  举报

我们在用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应该没有问题了。