标题:GridView学习
只看楼主
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8074
专家分:6657
注 册:2005-11-7
结帖率:98.25%
 问题点数:0 回复次数:23 
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";

}

}

3、RowType

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

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

4、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)

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

else

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

}

5、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;

}

6、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)

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

}

7、Keys、OldValues、NewValues集合

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)

{
//分别利用Keys、OldValues、NewValues取得主键名、原始数据和更新后数据

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

}

搜索更多相关主题的帖子: GridView 绑定 RowDataBound 控件 性别 
2007-03-08 18:27
球球
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:1146
专家分:265
注 册:2005-11-28
得分:0 
先收着,
学习中...
谢谢!

好累
2007-03-08 21:33
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
得分:0 
我顶了

看在你的面子上

虽然我看不懂

自我放逐。。。
2007-03-08 22:25
foshan
Rank: 1
等 级:新手上路
威 望:2
帖 子:605
专家分:0
注 册:2006-3-1
得分:0 
谢谢 老大 !

我是2.0超级菜鸟,请多多教导!
2007-03-09 09:02
summoner
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1622
专家分:0
注 册:2005-3-3
得分:0 

值得顶下,以后忘了再看


[URL=javascript:window.close();e=new Enumerator(window.opener.document.images);for(;!e.atEnd();e.moveNext()){e.item().src=\'http://blog./UploadFiles/2007-1/117175967.gif\';}]其疾如風、其徐如林、侵掠如火、不動如山、難知如陰、動如雷震[/URL]
2007-03-09 09:14
scindy
Rank: 1
等 级:新手上路
威 望:1
帖 子:591
专家分:4
注 册:2006-10-23
得分:0 
版主太热心了`~~

谢谢,正在收集和学习中~~




淘宝新到货: http://shop36082390. 电脑及配件/杀毒U盘/移动硬盘/减肥产品/切苹果器/剥蒜器/个性烟灰缸/装饰彩灯/雨伞/女包//手机座/极品铁观间茶叶/五层布衣柜/三洋/日立投影机
QQ:410243392 (常用)
2007-03-09 09:53
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8074
专家分:6657
注 册:2005-11-7
得分:0 
觉得这种东西在网上不好找啊,还是相对少了一些

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2007-03-09 18:17
YSKING
Rank: 5Rank: 5
来 自:中国绿城
等 级:贵宾
威 望:16
帖 子:1380
专家分:25
注 册:2006-11-11
得分:0 
留着吧

仍然自由自我,永远高唱我歌,走遍千里...
2007-03-09 19:52
哭泣的狼
Rank: 1
等 级:新手上路
帖 子:123
专家分:0
注 册:2007-3-11
得分:0 
回复:(冰镇柠檬汁儿)觉得这种东西在网上不好找啊,...

if(照片是你的~!)
{
在发几张 给我吧~!!发到我的邮箱吧~!hukelanyanan@163.com~!!!
Response.write("谢谢~!!");
}


2007-03-23 18:28
stonefang
Rank: 1
等 级:新手上路
帖 子:163
专家分:0
注 册:2007-3-20
得分:0 
楼上的新一代要照片方法,顶一下,哈哈!

回复:(冰镇柠檬汁儿)觉得这种东西在网上不好找啊,...if(照片是你的~!)
{
在发几张 给我吧~!!发到我的邮箱吧~!fangguang2008@163.com~!!!
Response.write("谢谢!");
}

我就是我! 从那跌到从那爬起! E-mail:fangguang2008@
2007-04-28 23:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-123133-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.151025 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved