点击/选择 ASP.NET GridView 或 HTML 5 表格中的行
通过添加“onclick”事件和使用 JavaScript 和 CSS3 进行格式化,使整个表格行可点击/可选择。
引言
所建议的技术适用于 ASP.NET GridView 对象,以及本质上任何 HTML 表格的 tr 元素。首先,它通过添加 onclick 事件(参见 C# 中的列表 1)使整个 GridView 行对象(渲染为“tr”元素)“可点击”。相关的事件处理程序过程执行点击/选择的行的自定义格式化,使其与同一表格中的其他行在视觉上有所不同(有关实现此功能的 JavaScript 代码片段,请参见列表 2)。
演示
点击下面的图片以打开嵌入式 YouTube 视频播放器的功能演示,演示所建议的技术

图 1. 演示快照显示,通过修改第一个单元格中的文本属性,已选择表格行对应于项目 6。
列表 1:添加 onclick 事件(C# 代码隐藏文件)
protected void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e){
    if (e.Row.RowType == DataControlRowType.DataRow){
        // javascript function to call on row-click event
        e.Row.Attributes.Add("onClick", "javascript:void SelectRow(this);");
    }
}
列表 2:将 JavaScript 函数添加到页面头部部分
<script type="text/javascript">
// format current row
function SelectRow(row) {
 var _selectColor = "#303030";
 var _normalColor = "#909090";
 var _selectFontSize = "3em";
 var _normalFontSize = "2em";
 // get all data rows - siblings to current
 var _rows = row.parentNode.childNodes;
 // deselect all data rows
 try {
     for (i = 0; i < _rows.length; i++) {
         var _firstCell = _rows[i].getElementsByTagName("td")[0];
         _firstCell.style.color = _normalColor;
         _firstCell.style.fontSize = _normalFontSize;
         _firstCell.style.fontWeight = "normal";
     }
 }
 catch (e) { }
 // select current row (formatting applied to first cell)
 var _selectedRowFirstCell = row.getElementsByTagName("td")[0];
 _selectedRowFirstCell.style.color = _selectColor;
 _selectedRowFirstCell.style.fontSize = _selectFontSize;
 _selectedRowFirstCell.style.fontWeight = "bold";
}
</script>
开发说明
注意 1:事件绑定也可以在客户端完成,例如使用 jQuery .click() 事件。出于主要是教学目的,这里使用 C# 和 DataRowBound 事件来实现,以与核心 .NET 技术集保持一致。
注意 2:为了在“页面加载”事件上选择/播放网格中的第一项,请使用下面显示的 jQuery 代码片段(它插入了一个小的延迟时间)
$(document).ready(function () { 
  // start the first item after small delay 
  setTimeout('PlayRowItem()', _initDelay); 
});
注意 3:正如评论中指出的那样,可以通过使用一对 addClass() 和 removeClass() jQuery 方法来应用于选定的行视觉效果。通过 CSS3 和 jQuery 对行进行样式化,而不是像列表 2 所示那样通过 jQuery 直接修改元素属性,应该被认为是未来 Web 开发中更可取的方法,但请注意,在 jQuery 1.4.2 版本之前,这些方法存在一些缺陷(从该版本开始,并且持续到以后,这两种方法似乎在所有主要 Web 浏览器中都能很好地工作)。
额外资源
CodeProject 上的嵌入式 YouTube SDK:



