gridview使用总结

来源:互联网 发布:淘宝刷客究竟犯不犯法 编辑:程序博客网 时间:2024/06/05 20:48

GridView控件用来在表中显示数据源的值。每列表示一个字段,而每行表示一条记录。


GridView控件支持下面的功能: 

1.绑定至数据源控件,如SqlDataSource。

2. 内置排序功能。

3.内置更新与删除功能。

4.内置分页功能。

5.内置行选择功能。

6.以编程方式访问GridView对象模型以动态设置属性、处理事件等。 

7.多个键字段。  

8.用于超链接列的多个数据字段。 

9.可以通过主题和样式进行自定义外观。

  GridView控件中的每一列由一个DataControlField对象表示。 

  默认情况下,AutoGenerateColumns属性被设置为true,表示为数据源中的每个字段自动创建绑定字段,自动生成的绑定列字段不会添加到Columns集合中。  

  通过将AutoGenerateColumns属性设置为false,然后创建自定义的Columns集合,您可以手动定义列字段,而不是让GridView控件自动生成列字段。除了绑定列字段外,您还可以显示按钮列字段、复选框列字段、命令字段、超链接列字段、图像字段或基于您自己的自定义模板的列字段。


下表列出了可以使用的七种不同列字段类型。

                                             Field字段类型   -                           说明BoundField(数据绑定字段)将Data Source数据源中某个字段的数据以文本方式显示。这是GridView控件的默认列类型。ButtonField(按钮字段)在数据绑定控件中显示命令按钮。根据控件的不同,它可让您可以创建一列自定义按钮控件(例如【添加】或【移除】按钮)的数据行或数据列,按下时会引发RowCommand事件。CommandField(命令字段)显示用来执行含有预定义命令的Button按钮,包括了Select、Edit、Update、Delete命令按钮(DetailsView的CommandField才支持Insert命令)CheckBoxField(CheckBox字段)为GridView控件中的每一项显示一个CheckBox类型的复选框,通常用于布尔值True/False布尔值字段的显示。HyperLinkField(超链接字段)将Data Source数据源字段数据显示成HyperLink超级链接,并可指定另外的NavigateUrl超链接ImageField(图像字段)在数据绑定控件中显示图像字段TemplateField(模板字段)根据指定的模板为GridView控件中的每一项显示用户定义的模板内容。此列字段类型允许您创建自定义的列字段。

自定义用户界面

您可以通过设置GridView控件的不同部分的样式属性自定义该控件的外观。下表列出了不同的样式属性。

 样式属性                                -
说明
AlternatingRowStyle
GridView控件中的交替数据行的样式设置。当设置了此属性时,数据行交替使用RowStyle设置和AlternatingRowStyle设置进行显示。
EditRowStyle
GridView控件中正在编辑的行的样式设置。
EmptyDataRowStyle  
当数据源不包含任何记录时,GridView控件中显示的空数据行的样式设置。
FooterStyle
GridView控件的脚注行的样式设置。
HeaderStyle
GridView控件的标题行的样式设置。
PagerStyle          
GridView控件的页导航行的样式设置。
RowStyle        
GridView控件中的数据行的样式设置。当还设置了AlternatingRowStyle属性时,数据行交替使用RowStyle设置和AlternatingRowStyle设置进行显示。
SelectedRowStyle
GridView控件中的选中行的样式设置。

也可以显示或隐藏控件的不同部分。下表列出控制显示或隐藏哪些部分的属性。

属性说明ShowFooter
显示或隐藏GridView控件的页脚节。
ShowHeader
显示或隐藏GridView控件的页眉节。

事件

GridView控件提供多个您可以对其进行编程的事件。这使您可以在每次发生事件时都运行一个自定义例程。下表列出了GridView控件支持的事件。

            事件                                             - 说明PageIndexChanged
在单击某一页导航按钮时,但在GridView控件处理分页操作之后发生。此事件通常用于以下情形:在用户定位到该控件中的另一页之后,您需要执行某项任务。
<pagersettings mode="Numeric"   position="Bottom"   pagebuttoncount="10"/>
 从 10个按钮里面随便选择一个的情况
PageIndexChanging
在单击某一页导航按钮时,但在GridView控件处理分页操作之前发生。此事件通常用于取消分页操作。
RowCancelingEdit 
在单击某一行的“取消”按钮时,但在GridView控件退出编辑模式之前发生。此事件通常用于停止取消操作。
RowCommand 
当单击GridView控件中的按钮时发生。此事件通常用于在控件中单击按钮时执行某项任务。
RowCreated 
当在GridView控件中创建新行时发生。此事件通常用于在创建行时修改行的内容。
RowDataBound 
在GridView控件中将数据行绑定到数据时发生。此事件通常用于在行绑定到数据时修改行的内容。
RowDeleted 
在单击某一行的“删除”按钮时,但在GridView控件从数据源中删除相应记录之后发生。此事件通常用于检查删除操作的结果。   
RowDeleting
在单击某一行的“删除”按钮时,但在GridView控件从数据源中删除相应记录之前发生。此事件通常用于取消删除操作。
RowEditing 
发生在单击某一行的“编辑”按钮以后,GridView控件进入编辑模式之前。此事件通常用于取消编辑操作。
RowUpdated 
发生在单击某一行的“更新”按钮,并且GridView控件对该行进行更新之后。此事件通常用于检查更新操作的结果。
RowUpdating 
发生在单击某一行的“更新”按钮以后,GridView控件对该行进行更新之前。此事件通常用于取消更新操作。
SelectedIndexChanged
发生在单击某一行的“选择”按钮,GridView控件对相应的选择操作进行处理之后。此事件通常用于在该控件中选定某行之后执行某项任务。
SelectedIndexChanging
发生在单击某一行的“选择”按钮以后,GridView控件对相应的选择操作进 行处理之前。此事件通常用于取消选择操作。
Sorted 
在单击用于列排序的超链接时,但在GridView控件对相应的排序操作进行处理之后发生。此事件通常用于在用户单击用于列排序的超链接之后执行某个任务。
Sorting
在单击用于列排序的超链接时,但在GridView控件对相应的排序操作进行处理之前发生。此事件通常用于取消排序操作或执行自定义的排序例程。

代码说明部分:

一.GridView数据显示

原理:在页面加载时,将gridview绑定数据源,以进行显示

实现:

1.  使GridView绑定数据源,可以使DataTable,DataReader等。

    ///<summary>    /// gridviews实现数据源绑定    ///</summary>    public void Bind()    {        con = new SqlConnection(strcon);        con.Open();        SqlDataAdapter da = new SqlDataAdapter(strsql, con);        DataSet ds = new DataSet();        da.Fill(ds);        GridView1.DataSource =ds;        GridView1.DataKeyNames = new string[] {"id" };//为了便于识别每行数据,加入键值进行分别,这里的键值时表中的主键id;        GridView1.DataBind();        con.Close();    }
2. 在页面加载时绑定数据源:
    protected void Page_Load(object sender, EventArgs e)    {        if (!IsPostBack)        {            Bind();        }    }

3.   此时运行后显示的gridview标题是表的字段名。

这是gridview中AutoGenerateColumns="true"的作用,我们要自定义标题当然要AutoGenerateColumns="False"
然后就可以自己添加标题了:
编辑列选择bindfild添加headtext中填写标题datafield中填写表中的字段名如id,name等。

二. Gridview删除修改操作

原理:gridview属性中自带了GridView1_RowDeleting,GridView1_RowUpdating,GridView1_RowCancelingEdit等许多事件。当我们在页面中添加了这些事件按钮后就可以执行它。

实现:1.首先我们还是要添加删除,修改按钮,

编辑列-->选择ConmmandFieldà选择删除à添加

2.选择gridView属性—事件—>然后选择GridView1_RowDeleting双击会自动生成函数

3.然后再里面添加代码。注意获得所选行的键值一句

String id=Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value);

E其中e.RowIndex表示你选择那一行的行数

    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)    {        con = new SqlConnection(strcon);        con.Open();        int id = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value);//获取所选择行的键值        string strsql="delete from UserInfo where id='"+id+"'";        SqlCommand cmd = new SqlCommand(strsql, con);        cmd.ExecuteNonQuery();        Bind();    }
4.   最后同理。添加修改按钮,但是修改按钮中则包含的较多。其中有编辑,更新,取消三个响应事件。

1.首先还是先添加CommandField—选择编辑,更新,取消—添加

2.在gridview事件中选择GridView1_RowEditing,GridView1_RowUpdating,GridView1_RowCancelingEdit分别双击,将自动产生消息响应函数。

3.添加代码如下:

    ///<summary>    ///实现编辑        ///</summary>    ///<param name="sender"></param>    ///<param name="e"></param>    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)    {        GridView1.EditIndex = e.NewEditIndex;        Bind();    }    ///<summary>    ///更新数据    ///</summary>    ///<param name="sender"></param>    ///<param name="e"></param>    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)    {        con = new SqlConnection(strcon);        con.Open();        string uname = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString();        string upassword = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString();        string strsql = "update UserInfo set uname='"+uname+"', upassword='"+upassword+"'where id='"+Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value)+"'";        SqlCommand cmd = new SqlCommand(strsql, con);        cmd.ExecuteNonQuery();        GridView1.EditIndex = -1;        Bind();    }    ///<summary>    ///取消编辑    ///</summary>    ///<param name="sender"></param>    ///<param name="e"></param>    protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)    {        GridView1.EditIndex = -1;        Bind();    }
三. GridView鼠标移动改变颜色以及删除时弹出提示框

    原理:在GridView事件GridView1_RowDataBound中添加javascrit事件。

    实现:gridview属性事件中,双击GridView1_RowDataBound,自动生成函数后,添加以下代码:

    ///<summary>    ///当鼠标移动时改变颜色,删除时弹出确认对话框    ///</summary>    ///<param name="sender"></param>    ///<param name="e"></param>    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)    {        if (e.Row.RowType == DataControlRowType.DataRow)//判断是数据绑定行        {            if (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate)            {                ((LinkButton)(e.Row.Cells[4].Controls[0])).Attributes.Add("onclick", "javascript:return confirm('你确认要删除:\"" + e.Row.Cells[1].Text + "\"吗?')");            }        }    //鼠标移动后添加背景颜色        int i;        for (i = -1; i < GridView1.Rows.Count; i++)        {            if (e.Row.RowType == DataControlRowType.DataRow)            {                e.Row.Attributes.Add("onmouseover","c=this.style.backgroundColor;this.style.backgroundColor='#00A9FF'");                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=c");            }        }}
四. 添加模板控件

原理:当我们想在gridview中每一行添加一个CheckBox或则按钮时,这个时候我们就需要在添加列里编辑一个模板,然后再在模板里添加控件,而响应事件就是你控件的事件。

实现:第一步,我们当然是添加一个新列,比如我们添加一个checkBox来实现多项的选择,然后删除。编辑列,选择TemplateField—添加—HeadText命名为多选。

第二步,我们选择编辑模板,在显示里面选择column【】多选

然后再ItemTemplate框中拖入CheckBox控件CheckBox1,这里我们不需要再这里对该控件进行事件处理。

这时运行程序每行就会出现一个CheckBox.

第三步,再在gridView下面添加一个CheckBox控件checkBox2,旁边写上全选。目的是实现点击checkbox2时实现多选。然后双击CheckBox2,自动生成响应函数.

    ///<summary>    /// checkbox2即全选checked时将girdview控件中所有选择框点击    ///</summary>    ///<param name="sender"></param>    ///<param name="e"></param>    protected void CheckBox2_CheckedChanged(object sender, EventArgs e)    {        for (int i = 0; i <= GridView1.Rows.Count - 1; i++)        {            CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");//搜寻每行ID为CheckBox1的CheckBox控件            if (CheckBox2.Checked == true)//如果CheckBox2点击了                        {                cbox.Checked = true;            }            else            {                cbox.Checked = false;            }        }}
最后,我们再在GridView控件下面添加一个删除按钮,将选择到得行进行删除。

    ///<summary>    ///删除按钮响应事件    ///</summary>    ///<param name="sender"></param>    ///<param name="e"></param>    protected void btn_delete_Click(object sender, EventArgs e)    {        con = new SqlConnection(strcon);        con.Open();        for(int i=0;i<=GridView1.Rows.Count-1;i++)        {            CheckBox cbox=(CheckBox )GridView1.Rows[i].FindControl("CheckBox1");            if(cbox.Checked==true)            {                string sqlstr = "delete from UserInfo where id='" + GridView1.DataKeys[i].Value + "'";                SqlCommand cmd=new SqlCommand(sqlstr,con);                cmd.ExecuteNonQuery();            }        }        con.Close();        Bind();    }
 五,添加超链接,传递另一张页面id然后修改或添加数据

原理:添加超链接控件

实现:1.添加新列,选择HyperLinkField,点击添加。HeaderText随意命名;

<asp:HyperLinkField HeaderText="姓名" DataNavigateUrlFields="uname" DataTextField="uname"DataNavigateUrlFormatString="Default.aspx?passname ={0}" />

2.对其数据绑定, DataTextField=”name”;跳转页面并传递姓名DataNavigateUrlFormatString="Default.aspx?GoodsID={0}

3. Default.aspx页面接受值。String name=Request.QueryString[passname]

六.GridViev数据导出到Excel/Excel数据导入到GridView中
实现:添加到处按钮,命名为btn_Excel,双击

    protected void btn_Excel_Click(object sender, EventArgs e)    {        Export("application/ms-excel", "学生成绩报表.xls");    }    private void Export(string FileType, string FileName)    {        Response.Charset = "GB2312";        Response.ContentEncoding = System.Text.Encoding.UTF7;        Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());        Response.ContentType = FileType;        this.EnableViewState = false;        StringWriter tw = new StringWriter();        HtmlTextWriter hw = new HtmlTextWriter(tw);        GridView1.RenderControl(hw);        Response.Write(tw.ToString());        Response.End();    }  public override void VerifyRenderingInServerForm(Control control)    {    }
在GirdView页面中头部<%@ Page Language="C#" AutoEventWireup="true" CodeFile="GridViewStudy.aspx.cs"Inherits="GridViewStudy" EnableEventValidation = "false" %>添加EnableEventValidation = "false"

wait...



0 0