彩票走势图

gridView控件常用事件

翻译|其它|编辑:郝浩|2007-08-15 09:19:54.000|阅读 1330 次

概述:

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

RowDataBound 事件

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

还举同样的例子,在数据表中,存在性别列,上面我们用 DropListDown 控件的 DataBounding来表示出了中文的性别,但是毕竟不太美观,我们现在可以利用 Label 控件和 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";

        }

    }

RowType

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

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

RowDeleting RowDeleted 事件

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

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

使用 RowDeleted 事件,可以在删除后,通过 GridViewDeletedEventArgs Exception 属性判断删除过程中是否产生异常,如无异常,则可以显示类似于” 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)

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

        else

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

}

RowEditing 事件

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;

}

RowUpdating RowUpdated 事件

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)

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

    }

KeysOldValuesNewValues 集合

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

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

在上面的例子中,为了把密码明文加密后再存入数据库,我们利用了 NewValues 字段,重新设置 key password 的项的值。为了保证安全性,我们在更新数据前对 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"];

}


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:csdn

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP