ASP.NET GridView_第五篇_用途多多的 OnRowDataBound 事件
2010-07-10 14:04
363 查看
OnRowDataBound事件
<%@ Page Language="C#" %> <%@ Import Namespace="System.Data"%> <%@ Import Namespace="System.Web.UI"%> <!DOCTYPE html PUBLIC "-//W3C//DTDXHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <scriptrunat="server"> protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { this.Bind(); } } private void Bind() { DataTable dt = this.CreateDataSource(); GridView1.DataSource = dt; GridView1.DataKeyNames = new string[] { "c1" }; GridView1.DataBind(); } private DataTable CreateDataSource() { DataTable dt = new DataTable(); dt.Columns.Add("c1", typeof(int)); dt.Columns.Add("c2", typeof(string)); dt.Columns.Add("c3", typeof(string)); for (int i = 0; i < 100; i++) { DataRow dr = dt.NewRow(); dr[0] = i; dr[1] = i; dr[2] = i; dt.Rows.Add(dr); } return dt; } protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgse) { GridView1.PageIndex = e.NewPageIndex; this.Bind(); } protected void GridView1_RowDataBound(object sender, GridViewRowEventArgse) { if (e.Row.RowIndex != -1) { if (e.Row.RowIndex % 2 == 0) { e.Row.BackColor =System.Drawing.Color.Red; e.Row.Cells[0].BackColor =System.Drawing.Color.Chocolate; } else { e.Row.BackColor =System.Drawing.Color.Blue; e.Row.Cells[0].BackColor =System.Drawing.Color.Coral; } } } </script> </head> <body> <formid="form1" runat="server"> <asp:GridViewID="GridView1" runat="server" OnPageIndexChanging="GridView1_PageIndexChanging" AutoGenerateColumns="False" AllowPaging="True" OnRowDataBound="GridView1_RowDataBound"> <Columns> <asp:BoundField DataField="c1" HeaderText="列1" SortExpression="c1"/> <asp:BoundField DataField="c2" HeaderText="列2" SortExpression="c2"/> <asp:BoundField DataField="c3" HeaderText="列3" SortExpression="c3"/> </Columns> </asp:GridView> </form> </body> </html>
说明
(1) OnRowDataBound 事件是数据绑定后,显示之前触发,此事件通常用于改变数据库中显示在GridView中的内容。在本例中,改变奇数行和偶数行的背景色,顺便改变奇数行和偶数行第一列的背景色;(2) 根据这个事件的描述,我们可以想到,这个事件有很多用处。
比如,突出显示某列(某行)。假设有个员工工资的数据,想突出显示员工工资大于1000的员工;
比如,截取长字符串。假设数据中某行某列的数据很长,造成显示问题,那么可以截取该数据一部分来显示,如字符长度大于某个值之后的所有字符用省略号代替;
比如,改变选中行的风格。也就是说,当选中某行数据时(鼠标停留时),会高亮显示该数据行。代码如下:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { e.Row.Attributes.Add("onmouseover", "c=this.style.backgroundColor;this.style.backgroundColor='#FF0033'"); e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=c"); } }
注意:在 OnRowDataBound 事件中,添加客户端事件 onmouseover 和 onmouseout ,改变行背景色。
比如,超长记录不换行。假设数据的字段很多,并且某个字段的数据很长,超过屏幕宽度,但是还想全部显示,又不想截取。
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { e.Row.Cells[0].Wrap = false; e.Row.Cells[0].Style.Add("word-break", "keep-all"); } }
注意:e.Row.Cells[0]中的索引表示那个数据很长的字段。通过上面两段代码可以看到,在服务器端,可以向控件添加客户端功能,比如CSS,事件等,慢慢挖掘吧。
另外,其实,像这样,在后台改变网格的CSS,意义不是很大,因为这是UI人员的工作,而不是开发人员的,UI们能把效果做得更好。就像我刚毕业时做的一个项目,每张表的数据字段都很多,几乎超过100个,个别字段还有大段的文字描述。当时我想,让网格在页面的一个DIV区域内显示。如果超过屏幕区域,就自动出滚动条。如果个别字段数据很长,那也不截取,不换行显示。让网格始终在一个区域内显示,无论字段多少,数据多长。头也催,要做成这种效果。搞了半天也没弄出来。我当时就不爽了,开发量那么大,就那么几个鸟人,你还让我给你做界面……后来公司新来个做UI,我说了下需求,人家很快搞定,全是CSS。
相关文章推荐
- .net GridView.RowDataBound 事件
- asp.net中GridView内部点击事件判断是第几行并获取row数据
- GridView的 OnRowDataBound 事件用法
- asp.net学习之GridView事件、GridViewRow对象
- asp.net学习之GridView事件、GridViewRow对象
- asp.net学习之GridView事件、GridViewRow对象
- ASP.NET DEMO 5:如何在GridView的RowCommand事件中获取当前的GridViewRow
- asp.net学习之GridView事件、GridViewRow对象
- 菜鸟学Asp.Net——GridView控件之RowDataBind事件中如何获取已绑定的数据
- ASP.NET里面的GridView的Row操作
- [转][ASP.NET]GridView点击行触发SelectedIndexChanged事件
- GridView.RowDataBound 事件
- gridview控件中OnRowDataBound属性作用
- Asp.net 2.0 自定义控件开发[创建自定义HeaderRow的GridView控件][示例代码下载]
- Asp.net 2.0 自定义控件开发[创建自定义HeaderRow的GridView控件][示例代码下载]
- Asp.net之使用GridView控件的RowCommand事件实现修改和删除
- ASP.NET DEMO 15: 同时支持行单击和双击事件的 GridView/DataGrid
- Asp.net 2.0 自定义控件开发[创建自定义HeaderRow的GridView控件][示例代码下载]
- asp.net GridView手写事件,包括取主键、取值、更新、选择、删除
- Asp.net 2.0 自定义控件开发[创建自定义HeaderRow的GridView控件][示例代码下载]