zoukankan      html  css  js  c++  java
  • GridView学习

    RowDataBound事件

    在创建gridView控件时,必须先为GridView的每一行创建一个GridViewRow对象,创建每一行时,将引发一个RowCreated事件;当行创建完毕,每一行GridViewRow就要绑定数据源中的数据,当绑定完成后,将引发RowDataBound事件。如果说我们可以利用RowCreated事件来控制每一行绑定的控件,那么我们同样可以利用RowDataBound事件来控制每一行绑定的数据,也就是让数据如何呈现给大家。

    还举同样的例子,在数据表中,存在性别列,上面我们用DropListDown控件的DataBounding来表示出了中文的性别,但是毕竟不太美观,我们现在可以利用Label控件和RowDataBound事件来实现完美的中文性别显示。RowDataBound

    首先,还是把性别列,设置为模板列,并添加一个Label控件,将Label控件绑定到数据源的性别段,然后我们在GridView控件属性的事件列表中双击RowDataBound,生成如下事件:

    Example

        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)

    {

    //判断当前行是否是数据行

            if (e.Row.RowType == DataControlRowType.DataRow)

            {  //FindControl方法找到模板中的Label控件

    Label lb1= (Label)e.Row.FindControl("Label1");

    //因为RowDataBound是发生在数据绑定之后,所以我们可以

    //判断Label绑定的数据,如果是True,就更改其text属性为男

                    if (lb1.Text== "True")

                          lb1.Text = "";

                    else

                          lb1.Text = "female";

            }

        }

     

    3RowType

    RowType可以确定GridView中行的类型,RowType是玫举变量DataControlRowType中的一个值。RowType可以取值包括 DataRowFooterHeaderEmptyDataRowPagerSeparator。很多时候,我们需要判断当前是否是数据行,通过如下代码来进行判断 :

       if (e.Row.RowType == DataControlRowType.DataRow)

     

    4RowDeletingRowDeleted事件

    RowDeleting发生在删除数据之前,RowDeleted发生在删除数据之后。

    使用RowDeleting事件,可以在真正删除前再次确认是否删除,可以通过设置GridViewDeleteEventArgs.Cancel=True来取消删除;也可以用于判断当前数据库记录数,如果只剩一条记录且数据库不能为空则提示并取消删除操作。

    使用RowDeleted事件,可以在删除后,通过GridViewDeletedEventArgsException属性判断删除过程中是否产生异常,如无异常,则可以显示类似于” 1 Records deleted 之类的提示信息。

    Example

        protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)

    {

    //取得当前行号,并取得当前行的GridViewRow对象

            int index=e.RowIndex ;

            GridViewRow gvr=GridView1.Rows[index];

    //取得当前行第二个单元格中的文字

            str1 = gvr.Cells[1].Text;

    //进行提示

            Message.Text  ="您将删除一个用户,其姓名为"+str1 ;

        }

        protected void GridView1_RowDeleted(object sender, GridViewDeletedEventArgs e)

    {

    //如果没有产生异常,则提示成功删除,否则提示删除失败

            if (e.Exception == null)

                Message.Text += "<br>您成功删除了"+str1 ;

            else

                Message.Text += "删除失败,请联系管理员";

    }

    5RowEditing事件

    GridView中的行进入编辑模式之前,引发RowEditing事件,如果您需要在编辑记录前进行某些预处理,可以在这里操作。如果想取消对当前行的编辑,可以把GridViewEditEventArgs 对象的 Cancel 属性设置为 true即可。

    Example

        protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)

    {

    //NewEidIndex取得当前编辑的行号,然后获取gridviewrow对象

            GridViewRow gvr = GridView1.Rows[e.NewEditIndex];

     

    //判断,如果当前编辑行姓名栏为admin用户,则取消对当前行的编辑

            if (gvr.Cells[1].Text =="admin")

                e.Cancel = true;

    }

     

    6RowUpdatingRowUpdated事件

    RowUpdating事件发生在更新数据源之前,RowUpdated发生在更新数据源之后。

    我们可以在记录更新前利用RowUpdating做一些预处理工作,比如修改密码时,因为密码在数据库中不是明文存储,进行了hash,所以在更新密码前,应该生成其hash值,再进行更新操作。RowUpdated则可以检验更新是否成功。

    Example

        protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)

        {

            GridViewRow gvr = GridView1.Rows[GridView1 .EditIndex  ];

    //寻找输入密码的控件

            TextBox tb1 = (TextBox)gvr.FindControl("tb_password");

    //将此控件中的文本hash后,把password存入NewValues这个字典中

            e.NewValues ["password"] =tb1.Text .GetHashCode().ToString () ;

     

        }

        protected void GridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e)

    {

    //如无异常,则更新成功

            if (e.Exception == null)

                Message.Text += "更新成功!";

        }

     

    7KeysOldValuesNewValues集合

    Keys字典中一般存放的是数据源中的主键字段的keyvalue的对应值,如果主键由多个字段组成,那么Keys为每个键字段添加其字段名称和值。OldValues中存放的是要更新的行的字段名和原始值,每个字段为其中的一项。NewValues中存放的是要更新的行的字段名和修改后的值,每个字段为其中的一项。注意,主键字段只存放于keys集合中。

    这三个集合中的每一项都是DictionaryEntry类型的对象,我们可以用DictionaryEntry.Key来确定一个项的字段名称,DictionaryEntry.Value来确定某项的值。

    在上面的例子中,为了把密码明文加密后再存入数据库,我们利用了NewValues字段,重新设置keypassword的项的值。为了保证安全性,我们在更新数据前对NewValues中的所有值进行html编码:

     Example1:

     protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)

    {

    //遍历NewValues,取得其中每一对DictionaryEntry对象

           foreach (DictionaryEntry de in e.NewValues)

     

    //de.key就是字段名,如果此处单独更新某字段的话,也可以直接填写字段名,//比如 e.NewValues[password]

     

           e.NewValues[de.Key] = Server.HtmlEncode(de.Value.ToString());

        }

     

    Example2:

        protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)

    {

    //分别利用KeysOldValuesNewValues取得主键名、原始数据和更新后数据

            Message .Text  = e.Keys["username"] + "email地址从" + e.OldValues["email"] + "变更为" + e.NewValues["email"];

    }

  • 相关阅读:
    设计模式系列
    Python3 系列之 可变参数和关键字参数
    设计模式系列
    【HANA系列】SAP HANA ODBC error due to mismatch of version
    【FICO系列】SAP FICO FS00修改科目为未清项目管理
    【FIORI系列】SAP OpenUI5 (SAPUI5) js框架简单介绍
    【HANA系列】SAP HANA SQL获取当前日期加若干天后的日期
    【HANA系列】SAP HANA SQL获取本周的周一
    【HANA系列】SAP HANA SQL获取当前日期
    【HANA系列】SAP HANA SQL获取当前日期最后一天
  • 原文地址:https://www.cnblogs.com/windphoenix/p/1294869.html
Copyright © 2011-2022 走看看