GridView控件使用经验.doc_第1页
GridView控件使用经验.doc_第2页
GridView控件使用经验.doc_第3页
GridView控件使用经验.doc_第4页
GridView控件使用经验.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

GridView控件使用经验2007年12月05日 星期三 下午 12:47GridView控件是A 1.1版本流行控件DataGrid的继承者,功能比DataGrid增强不少,但是也有很大的不同啊。将最近使用这个控件的经验同各位同学分享如下: 1掩藏字段的处理:DataGrid可以将字段直接设置为Visible=false,可以通过Cellx.Text取到值。 GridView这个功能失效了,可以使用运行时来设定该列为掩藏。处理RowDataBound事件。protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) e.Row.Cells5.Visible = false; 2 获取所选列的数据:DataGrid可以直接通过所选行来获取,GridView同样的代码无法运行。GridView 可以通过GridViewRow来获取。BtnAudit是模版列中的按钮。GridViewRow grdRow = (GridViewRow)btnAudit.Parent.Parent;string strId = grdRow.Cells0.Text;string memberId = grdRow.Cells5.Text;3 最终删除一条数据之前进行确认,这个可以使用摸版列,在摸版列中放置按钮控件,其中有一个客户端事件onclientclick,这里可以写确认处理javascript脚本.例如: 前言:在我们做开发 的过程中,经常会遇到GridView中的某些字段太长了,如果全部显示出来就会使排版混乱,影响美观,尤其是在我们做新闻系统时肯定会遇到,比如显示新闻列表的gridview,页面的版面已设计美观,但是有的新闻标题过长,我们希望只显示一定长度,后面加省略号,然后当鼠标移上去时再显示标题的全部内容,这样就即做到了不影响版面的布局,又做到了标题内容的全部显示.下图是我做的规则显示的效果图,有些规则太长,我要做到的是,当标题超出一定长度时我加省略号,当标题在一定长度范围内时,全标题显示:/images/p_blog_csdn_net/j_jake/22.jpg 效果如上,那么这种效果我们如何实现呢?,在GridView绑定的时候要做什么工作?接下来我们来看实现思路:其实说起来很简单,我们在这里将采用模板列,在模版列里拖入一个label控件来进行数据绑定,它的text属性绑定的时候用一个条件表达式来判断是全部绑定标题文字还是只绑定部分标题文字+省略号;它的tooltip属性就直接绑定标题字段,这样我们的鼠标移上去就可以显示标题的全部内容了,绑定代码如下:asp:Label ID=Label1 runat=server Font-Bold=True ForeColor=Green Text=asp:HyperLink ID=HyperLink1 runat=server NavigateUrl= ToolTip=Text=16?Eval(RuleTitle).ToString().Substring(0,16)+.:Eval(RuleTitle) % Font-Bold=True从上面的代码可以看出,我绑定Label控件的Text属性的时候用了条件表达式,当数据库中的标题长度大于16时,则截取前16个字符加上省略号进行显示,当小于16时,就全部绑定.ToolTip属性直接帮定标题字段,鼠标移上去就可显示全部标题了。(题外话,如果你作的是新闻发布系统,你也可以在Text属性的后面再加上一个发布日期的绑定字段,这样标题,日期全出来聊,呵呵,可以灵活应用,举一反三) gridview添加删除确认对话框方法一:VB代码Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then e.Row.Cells(12).Attributes.Add(onclick, return confirm(你确认要删除吗?) End If End Subc#代码protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)if (e.Row.RowType = DataControlRowType.DataRow) e.Row.Cells5.Attributes.Add(onclick, return confirm(你确认要编辑吗?); 方法二在VS2005提供的GridView中我们可以直接添加一个CommandField删除列:,然后在GridView的OnRowDeleting事件中完成删除。但一般情况下我们在做这种删除操作时都需要先让用户确认一下,然后后再删除记录,以避免误操作引起的误删除。那我们可以通过下面方法给GridView删除前加上一个确认对话框。首先,在GridView的属性对框话框中点击“Columns”进入它的字段设计器;或者在设计窗口直接点击GridView控件右上角的那个小箭头,点击编辑列,进入字段设计器。接着在字段设计器中的左下方选定的字段框中,选择以前已加上的那个CommandField“删除”列,这时在右边它的属性列表下会看到一个将此它段转换为 TemplateFied的项,点击将它转换为TemplateFied列。然后退出字段设计器,切换到源码视图你会发现该列已由原来的:变为了: 最后在中加入:OnClientClick=return confirm(您确认删除该记录吗?);这样点击删除时就会先在客户端弹出“您确认删除该记录吗?”对话框,点击确定,则进行删除;点击取消,则不删除.而原来在onRowDeleting事件中写的代码完全不用改变。鼠标在GridView上移动时变换颜色2007-03-25 14:26protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) if (e.Row.RowType = DataControlRowType.DataRow ) e.Row.Attributes.Add(onmouseover, currentcolor=this.style.backgroundColor;this.style.backgroundColor=#C0C0FF;this.style.cursor=hand;); /当鼠标移走时还原该行的背景色 e.Row.Attributes.Add(onmouseout, this.style.backgroundColor=currentcolor); RowCreated:开被创建时发生e.Row.RowType = DataControlRowType.DataRow 判断是否是数据行DataControlRowType的枚举有:DataRow数据行EmptyDataRowFooterHeaderPagerSeparator如果对单元格进行变换。if (e.Row.Cells8.Text = USA) /e.Row.BackColor = System.Drawing.Color.Red; /修改整行的颜色 e.Row.Cells8.BackColor = System.Drawing.Color.Red; /修改单元格的颜色(第9列) 不足。前端页面代码过多。站带宽。 在GridView的第一列使用CheckBox控制每一行数据,是经常使用的,这里面我要记录的是全选、全消、选中行的底色更改,还有就是在提交数据的时候,取选中的行的编号等功能aspx页面定义: asp:TextBox ID=TextBox1 runat=server Text= Visible=false 这样在GridView的第一列,是CheckBox控件,在HeaderTemplate里的是用来控制全选全消的,在TemplateField里的,用来控制当前行是不是选中行js脚本是这个:function changecolor(obj,color) e = event.srcElement if(e.checked=true) e = e.parentElement e.style.background = #C0C0FF else e = e.parentElement e.style.background = color function CheckSelect(del) var rt=true; var num=0; var boxorder=0; var objCheckBox; for(var i=0;i1) /如果是第一个CheckBox,是用来全选全消的,这个不算,不用自加 num+; /alert(num); if(!del) if(num1) alert(此操作不允许选择多个事件); rt=false; if(num=0) alert(此操作要求先选择一个事件); rt=false /alert(rt); return rt;function SelectAll(sa) /全选/全消 var objCheckBox; for(var i=0;iaspnetForm.length;i+) if(aspnetForm.elementsi.type=checkbox) objCheckBox=aspnetForm.elementsi; objCheckBox.checked=sa; 第一个函数changecolor用来控制被选择的行的颜色突出,第二个函数CheckSelect用来判断现在有几个行被选中,第三个函数SelectAll用来控制全选全消在cs页面里,为每一行的CheckBox绑定客户端事件:protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) if (e.Row.RowType = DataControlRowType.Header | e.Row.RowType = DataControlRowType.DataRow) CheckBox mycb = new CheckBox(); mycb = (CheckBox)e.Row.FindControl(CheckBox1); if (mycb != null) if (e.Row.RowType = DataControlRowType.DataRow) if (e.Row.RowIndex % 2 = 0) mycb.Attributes.Add(onclick, changecolor(,#FFFFFF); else mycb.Attributes.Add(onclick, changecolor(,#EEEEEE); else if (e.Row.RowType = DataControlRowType.Header) mycb.Attributes.Add(onclick, SelectAll(this.checked); 这里,对不同的DataControlRowType,我绑定了不同的客户端事件,因为定义在HeaderTemplate和ItemTemplate里的CheckBox是要执行不同的客户端事件的上面的东西都很简单,分清楚客户端和服务器端就可以了,我一开始的时候在服务器端和客户端跳来跳去,自己都乱了,好烦啊我在这里还要记录这样的情况:在页面里,有一个自定义用户控件,有一个GridView控件,在自定义用户控件里,有Button用来控制GridView里的记录我要记录的是,怎么在这个Button里,判断有哪些记录被选中、上面的aspx代码里,我加了TextBox,记录编号、在自定义用户控件里,用下面的事件,就返回选中行的编号了public string GetEid() /取选中的事件编号 string streid = ; GridView mygv = new GridView(); mygv = (GridView)Parent.FindControl(GridView1); if (mygv != null) int i, row; i = 0; row = mygv.Rows.Count; CheckBox mycb = new CheckBox(); for (i = 0; i 0) streid = streid.Remove(streid.Length - 1); return streid; 就是Parent和FindControl的使用,用Parent可以引用包含自定义用户控件的页面,对这个页面里的GridView的每一行扫描,就可以取到每一行的CheckBox了对自定义控件里,如果有的Button需要先选择一个 or 多个记录才允许操作的,可以在自定义控件里给Button加上客户端事件protected void Page_Load(object sender, EventArgs e) Button1.Attributesonclick = return CheckSelect(false); Button4.Attributesonclick = return CheckSelect(false); Button2.Attributesonclick = return CheckSelect(true); 这里我给Button1和Button4加了不允许多个选择的事件,给Button2加了允许多个选择的事件GridView使用方法1. 分页功能 将GridView和数据源控件绑定后,选中“允许分页”或在属性页中将AllowPaging属性设置为True即可启用分页功能。设置PageSize(默认为10)的值可以更改每页显示的记录数。设置PagerStyle可以更改分页区的外观,如字体,颜色,对齐方式。设置PagerSetting可以更改分页显示的方式,如是显示模式(数字还是上一页下一页)。 分页功能是GridView自动支持的,通常并不需要编辑代码实现。2. 使用HyperLinkField(超链接列) a. 设置DataNavigateUrlFields属性,如果要绑定到多个字段,则使用逗号分隔。 b.设置DataNavigateUrlFormatString属性。例如Http:/sample.aspx? id=0 &name=1,其中0的将使用第一个字段的值来替代,1使用第二个值来替代。3. 更新功能 a. 在数据源中设置Update命令(如果使用SqlDataSource,向导可以自动生成相关的命令). b. 在Gridview中设置DataKeyNames属性,在其中指定记录所使用的关键列的名称,如果有多列,请用逗号分隔。 c. 在GridView中选中启用编辑选项,这样GridView将自动添加一列编辑,更新,取消列,可以设置此列的属性以更改它的外观。 d. 给不希望参与编辑的列的ReadOnly属性设置为True,即可避免它们被编辑。 e. 也可以通过添加CommandField列,并设置ShowEditButon=True来显示编辑按钮,同样还可以显示更新,取消,删除,选择等按钮。 f. 处理更新数据时发生的错误。通过处理GridView的RowUpdated事件,并检查e.Exception是否为空值来确定更新过程中是否发生了错误。如果已经处理了异常,应将e.ExceptionHandled设置为True。4. 启用删除功能。 启用删除功能的方法类似于启用更新。GridView中的自定义列GridView 可以根据数据源自动生成列,但是如果我们需要自定义列的显示方式,让GridView的列完完全全的由我们自己来控制,我们就需要用到一种特殊的列 TemplateField。因为GridView生成的列都是一个字段一列,如果我们需要把两个字段合并为一列显示呢?我们可以使用模板列。我们可以指定包含标记和控件的模版,自定义列的布局和行为,我们可以新建一个模版列,也可以直接把已经生成的列转换为模版列来进行个性化的设置。在GridView 上单击右键,选择编辑模版,在弹出菜单中选择要编辑的列,出现列模版的编辑画面。其中HeaderTemplate自定义列的标头部分显示的内容, FooterTemplate脚注部分显示哪谌荩?/SPANItemTemplate是打开网页后此列数据显示的内容, EditItemTemplate此列处于编辑状态时如何显示,AlternatingItemTemplate交替项显示的内容,也就是说为了显示效果,可以隔行分别以不同的风格显示。Example1:我们现在假设有一个表,其中有一个字段是username,我们现在产生一个自定义列,自定义列中包含此人的照片,同时我们假定照片的路径为 image/username.jpg。我们首先右键点击GridView,在智能标记中,选择编辑列,添加一个模版列,然后编辑模版中的 ItemTemplate,加入一个Image控件,然后右键点击Image控件,选择EditDataBindings,在ImageUrl中设置 FieldBinding,首先我我要Boundto数据源中的某列,因为所有图片的路径和格式是相同的,唯有名字不同而已,所以我们这里选中 username字段,在format中,我们要自己定义其格式,输入image/0.jpg,0代表的就是上面绑定的字段,下面有一个 TwoWayDataBinding的复选框,就是是否双向绑定的意思,如果单向绑定,一般采用Eval,也就是说数值只从数据源传到页面上,如果双向绑定,也就是采用Bind的话,对数据的修改可以回传到数据源之中。在web页面执行时,不同的行因为username不同,图片的名字也会做出相应的替换。点击确定,然后执行当前网页,我们就可以看到在我们的自定义列中显示出了用户的照片。Example2:在数据库中,存储性别的时候,一般采用bit数据类型,存储为True或者False,在GridView自动生成列的时候,一般使用 CheckedBoxField列来显示bit类型的数据,显示在网页上就是一个单选框,如果选中,也就是Checked了,就是男的,否则就是女的。这样看起来,很不直观,下面我们通过自定义列将性别显示为男、女。首先在GridView的ShowSmartTag中,选择编辑列,然后双击TemplateFields,添加了一个模版列,确定后,点击右键选择编辑模版,选中刚添加的列。在ItemTemplate中添加一个 DropListDown控件,然后编辑它的数据绑定,EditDataBinding,把SelectedValue属性绑定到性别列。在DropListDown 控件中选择EditItem,就是编辑其下拉列表的项,我们添加两个Item,一个的Text属性是男,Value设置为True,一个的Text属性设置为女,Value属性设置为False。到这里,你明白了么?因为DropDownList控件的显示文本和其值是可以不一样的,我们用数据绑定取到了性别这一列的值,True或者False,然后反映到DropDownList控件上,如果值为True,因为Text属性为男的Item的 Value为True,所以我们现在运行网页,在新添加的列中,显示的不再是单选框或者True、false这些没有含义的东西,而是以下拉列表的方式显示出了当前用户是男还是女。 正则表达式 目前,正则表达式已经在很多软件中得到广泛的应用,包括*nix(Linux, Unix等),HP等操作系统,PHP,C#,Java等开发环境,以及很多的应用软件中,都可以看到正则表达式的影子。 正则表达式的使用,可以通过简单的办法来实现强大的功能。为了简单有效而又不失强大,造成了正则表达式代码的难度较大,学习起来也不是很容易,所以需要付出一些努力才行,入门之后参照一定的参考,使用起来还是比较简单有效的。 例子: .+.+.+$ 2. 正则表达式的历史 正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。 1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为“正则集的代数”的表达式,因此采用“正则表达式”这个术语。 随后,发现可以将这一工作应用于使用 Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson 是 Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的 qed 编辑器。 如他们所说,剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分 3. 正则表达式定义正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。 列目录时, dir *.txt或ls *.txt中的*.txt就不是一个正则表达式,因为这里*与正则式的*的含义是不同的。正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。 3.1 普通字符由所有那些未显式指定为元字符的打印和非打印字符组成。这包括所有的大写和小写字母字符,所有数字,所有标点符号以及一些符号。 3.2 非打印字符 字符 含义 cx 匹配由x指明的控制字符。例如, cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 c 字符。 f 匹配一个换页符。等价于 x0c 和 cL。 n 匹配一个换行符。等价于 x0a 和 cJ。 r 匹配一个回车符。等价于 x0d 和 cM。 s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 fnrtv。 S 匹配任何非空白字符。等价于 fnrtv。 t 匹配一个制表符。等价于 x09 和 cI。 v 匹配一个垂直制表符。等价于 x0b 和 cK。 3.3 特殊字符 所谓特殊字符,就是一些有特殊含义的字符,如上面说的*.txt中的*,简单的说就是表示任何字符串的意思。如果要查找文件名中有的文件,则需要对进行转义,即在其前加一个。ls *.txt。正则表达式有以下特殊字符。 特别字符 说明 $ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 n 或 r。要匹配 $ 字符本身,请使用 $。 ( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。 * 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 *。 + 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。 . 匹配除换行符 n之外的任何单字符。要匹配 .,请使用 。 标记一个中括号表达式的开始。要匹配 ,请使用 。 ? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 ?。 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, n 匹配字符 n。n 匹配换行符。序列 匹配 ,而 ( 则匹配 (。 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 字符本身,请使用 。 标记限定符表达式的开始。要匹配 ,请使用 。 | 指明两项之间的一个选择。要匹配

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论