GridView/DataGrid 整行添加服务器事件
来源:互联网 发布:淘宝官方活动群 编辑:程序博客网 时间:2024/09/21 06:18
需求说明
GridView/DataGrid 本身均支持行选择事件(通过设置Button/LinkButton.CommandName="Selected",并在 SelectedIndexChanged 事件中处理)。
然而,有时候我们希望用户点击 GridView/DataGrid 一行中任意位置都可以实现触发一个事件,并在服务端对此行进行相应处理,现在我们就实现此功能。
实现方式
这里我们采取的方法有点 "hack" :
通过客户端 javascript 引发行中隐藏的按钮(Button/LinkButton 均可以)的 click 事件。
主要代码
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowCommand="GridView1_RowCommand" OnRowDataBound="GridView1_RowDataBound">
<Columns>
<asp:TemplateField HeaderText="ProductName" >
<ItemTemplate>
<%# Eval("ProductName") %>
<asp:Button ID="btnHiddenPostButton" CommandName="HiddenPostButtonCommand" runat="server" Text="HiddenPostButton" style="display:none" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" />
</Columns>
</asp:GridView>
<Columns>
<asp:TemplateField HeaderText="ProductName" >
<ItemTemplate>
<%# Eval("ProductName") %>
<asp:Button ID="btnHiddenPostButton" CommandName="HiddenPostButtonCommand" runat="server" Text="HiddenPostButton" style="display:none" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" />
</Columns>
</asp:GridView>
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
Button btnHiddenPostButton = e.Row.FindControl("btnHiddenPostButton") as Button;
if (btnHiddenPostButton != null) {
e.Row.Attributes["onclick"] = String.Format("javascript:document.getElementById('{0}').click()", btnHiddenPostButton.ClientID);
// 额外样式定义
e.Row.Attributes["onmouseover"] = "javascript:this.style.background='red'";
e.Row.Attributes["onmouseout"] = "javascript:this.style.background=''";
e.Row.Attributes["style"] = "cursor:pointer";
e.Row.Attributes["title"] = "单击选择当前行";
}
// 若希望将隐藏按钮单独放于一列,则设置此列隐藏,占位符 <cellIndex> 表示此列索引
//e.Row.Cells[<cellIndex>].Attributes["style"] = "display:none";
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
int rowIndex = -1;
GridViewRow row = null;
switch (e.CommandName) {
case "HiddenPostButtonCommand": // 模板列
Control cmdControl = e.CommandSource as Control; // 表示触发事件的 IButtonControl,保持统一性并便于后续操作,我们这里直接转化为控件基类 Control
row = cmdControl.NamingContainer as GridViewRow; // 当前行
// 如何访问单元格值
// string txt = row.Cells[0].Text;
// 如何获取模板列中的 Label
// string lbl = row.FindControl("MyLabelID") as Label;
// 执行更多的自定义操作
//
//
Response.Write(String.Format("GridView Version 当前第 {0} 行:", row.RowIndex + 1));
break;
// case "Command2":
// more cases
//
}
}
{
Button btnHiddenPostButton = e.Row.FindControl("btnHiddenPostButton") as Button;
if (btnHiddenPostButton != null) {
e.Row.Attributes["onclick"] = String.Format("javascript:document.getElementById('{0}').click()", btnHiddenPostButton.ClientID);
// 额外样式定义
e.Row.Attributes["onmouseover"] = "javascript:this.style.background='red'";
e.Row.Attributes["onmouseout"] = "javascript:this.style.background=''";
e.Row.Attributes["style"] = "cursor:pointer";
e.Row.Attributes["title"] = "单击选择当前行";
}
// 若希望将隐藏按钮单独放于一列,则设置此列隐藏,占位符 <cellIndex> 表示此列索引
//e.Row.Cells[<cellIndex>].Attributes["style"] = "display:none";
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
int rowIndex = -1;
GridViewRow row = null;
switch (e.CommandName) {
case "HiddenPostButtonCommand": // 模板列
Control cmdControl = e.CommandSource as Control; // 表示触发事件的 IButtonControl,保持统一性并便于后续操作,我们这里直接转化为控件基类 Control
row = cmdControl.NamingContainer as GridViewRow; // 当前行
// 如何访问单元格值
// string txt = row.Cells[0].Text;
// 如何获取模板列中的 Label
// string lbl = row.FindControl("MyLabelID") as Label;
// 执行更多的自定义操作
//
//
Response.Write(String.Format("GridView Version 当前第 {0} 行:", row.RowIndex + 1));
break;
// case "Command2":
// more cases
//
}
}
测试效果
- GridView/DataGrid 整行添加服务器事件
- ASP.NET DEMO 8: 为 GridView/DataGrid 整行添加服务器事件
- GridView整行添加服务器事件
- 给DataGrid单元行添加双击事件
- 给DataGrid单元行添加双击事件
- 给DataGrid单元行添加双击事件
- DataGrid添加事件句柄
- datagrid添加事件
- GridView 与 DataGrid 服务器控件
- GridView/DataGrid行单击和双击事件实现代码
- 给GridView添加行单击事件
- 自定义gridview添加行双击事件
- easyui datagrid 添加 鼠标事件
- easyui datagrid 编辑器添加事件
- GridView、DataGrid使用DataBound事件前提
- 在WPF的DataGrid中对行添加单击事件
- 为GridView添加鼠标事件
- 为GridView添加鼠标事件
- jms基础
- Hibernate的缓存机制介绍
- Javascript中最常用的55个经典技巧
- 如何通过 javascript 访问 GridView/DataGrid 选中 CheckBox 行各列的值
- JUnit学习笔记
- GridView/DataGrid 整行添加服务器事件
- asp.net 实现下载服务器上的文件
- freeBSD提示符显示当前的路径
- 安装Ms SQL Server 2005 开发版时出现性能计数器要求安装错误的解决办法
- alarm & setitimer
- 为数据库添加登陆名
- 联动下来框(DropDownList)
- 揭开正则表达式的神秘面纱
- MS-SQL数据库开发常用汇总