DataGrid Web Control 之单击行内任意处选中该行

评价:
0
(0用户)

单击行内任意处选中该行

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———————)

注册并通过认证的用户才可以进行评价!

发表评论

Back to Top