您的位置:首页 > 编程语言 > ASP

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: