菜鸟时期的.net笔记[about GridView]

 初学者要显示数据的时候,我想GridView控件会是最常用的一个,这篇博文就讲一下GridView的一些用法  正文1.设定GridView的按钮事件
  GridView中的按钮被单击后会触发RowCommand事件,我们可以通过为不同的按钮设置不同的CommandName来区分触发事件的按钮。
  eg:
  在事件中的代码:
  if(e.CommandName=="Del"){
  int iIndex=Convert.ToInt16(e.CommandArgument);
  Response.Write(iIndex+1);}
  这里首先根据命令名来区分触发事件的按钮,然后从e.CommandArgument就能获取触发事件的行索引号
  2.如何获得所选行的主键
  GridView提供了DataKey集合,用来存放每一行数据的主键,首先设置GridView的DataKeyNames属性为数据表的主键,若有多个主键则用逗号分隔,然后在代码中使用这个属性来获取主键:GridView1.DataKey[iIndex];
  有了主键值,要进行删除操作就简单得多了。
  注意:操作结束后,要立即重新指定数据源,并使用绑定方法重新绑定。
  对于删除操作,一般要增加一个用户确认对话框,这个可以用脚本语言写,另外,如果我们将此列转换为模版列之后,我们必须手动绑定索引号以便在后 台获取所选的索引号,用CommandArgument='<%# Container.DataItemIndex %>' 绑定索引号。嗯,应该是这样。
  3.如何在RowCommand中获得GridView行的非主键数据
  (1)方法一:手动指定控件的CommandArgument
  这个方法的原理是把数据直接绑定到按钮的CommandArgument中,缺点是只能绑定一个数据。eg:CommandArgument='<%# Eval("UserName") %>'
  (2)方法二:直接从GridView中获取值
  这个方法的优点是能获取多个值,缺点是值必须是显示在GridView上的。我们唯一要知道的参数就是行的索引号。
  eg:
  int iIndex= Convert.ToInt16(e.CommandArgument);GridViewRow gvr = GridView1.Rows[iIndex];string sUserName = GridView1.Cells[0].Text;//这个是模版列里的Hyperlink,所以用FindControl方法根据控件ID找出它( Control类型)然后转换成Hyperlink类型,再取其值。Hyperlink是Cell的子控件,Cell是DataGridView的子控 件。string sUserEmail = (GridView1.Cells[1].FindControl("HyperLink1") as HyperLink).Text;
  (3)方法三:使用隐藏域来保存值
  优点是数据可以是数据源中的任意数据,不一定是需要绑定在GridView上的数据,缺点是不宜存放过大的数据,否则会造成页面体积急剧增加。
  eg:
  
  RowCommand事件代码:
  int iIndex= Convert.ToInt16(e.CommandArgument);GridViewRow gvr = GridView1.Rows[iIndex];string sUserName = (gvr.FindControl("hid_UserName") as HtmlInputHidden).Value;
  (4)方法四:重新从数据源中获取值
  这个方法优点是不受绑定的限制,但是缺点也很明显,那就是你要再访问一次数据库。我个人不推荐。