DataGrid Web Control 连载之九

单击行内任意处选中该行<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

  这个系列是在开发过程中对遇到的技术问题的一个总结,当时对这个控件的了解不是很多,但是根据需要实现的功能,不得不查阅N多资料,在MSDN文档中只有英文的说明,我整理并翻译了出来,在此和大家一起分享。转载请加此连接[url]http://august.blog.51cto.com[/url],谢谢!
      DataGrid 中提供的选择行的默认的方式是添加一个 Select 按钮(实际上,是一个 LinkButton 按钮),将其 CommandName 属性设为“ Select ”,当单击按钮时, DataGrid 得到“ Select ”命令,并自动地在选中模式下显示该行。
  并非所有的用户都会喜欢默认的“Select”按钮,问题是如何实现在某行的任意处单击而能选中该行。The solution is to perform a kind of sleight-of-hand in the grid.你可以象通常那样添加一个Select LinkButton,用户仍然可以使用它,也可以将它隐藏,然后在Page中加入客户端脚本将Select按钮的功能有效地复制到整个行。
下面的例子说明了如何来实现。在GataGridItemDataBound句柄中,首先要保证选中的行不能是header ,footer 或者Pager。然后得到Select按钮的一个引用。在这个例子中,假设是第一个单元格中的第一个控件。然后调用一个少有人知的方法——GetPostBackClientHyperLink,这个方法返回一个设计好的控件的PostBack调用的名称。换句话说,如果传递一个引用到一个LinkButton控件,这个方法将返回用于执行PostBack的客户端功能调用的名称。
最后,将客户端方法指定给Item 本身,当DataGrid 生成时,它类似于一个HTMLTable。将方法指定给Item,等价于向表中的每一个行添加客户端代码。DataGridItem对象并不直接支持客户端代码到自身的方法,但是,我们可以通过它的Attributes集合来实现,这个集合传递通过浏览器指定给它的任何属性项。
注意:这个技术的一个缺点在于,它在某种程度上增加了生成到浏览器的流,并且为每行的视图状态增加了信息量。
private void DataGrid1_ItemDataBound(object sender,

System.Web.UI.WebControls.DataGridItemEventArgs e)

{

   ListItemType itemType = e.Item.ItemType;

   if ((itemType == ListItemType.Pager) ||

       (itemType == ListItemType.Header) ||

       (itemType == ListItemType.Footer))

   {

      return;

   }

   LinkButton button = (LinkButton)e.Item.Cells[0].Controls[0];

   e.Item.Attributes[" =

      Page.GetPostBackClientHyperlink(button, "");

}
 
(--------------------Finished---------------------)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值