当前位置: 首页 > news >正文

中小学图书馆网站建设上海软件定制开发公司

中小学图书馆网站建设,上海软件定制开发公司,网站推广的电子邮件推广,网站开发的基本原则一、GridView和DataGrid的异同 GridView 是 DataGrid的后继控件#xff0c;在.net framework 2 中#xff0c;虽然还存在DataGrid#xff0c;但是GridView已经走上了历史的前台#xff0c;取代DataGrid的趋势已是势不可挡。GridView和DataGrid功能相似#xff0c;都是在we…一、GridView和DataGrid的异同 GridView 是 DataGrid的后继控件在.net framework 2 中虽然还存在DataGrid但是GridView已经走上了历史的前台取代DataGrid的趋势已是势不可挡。GridView和DataGrid功能相似都是在web页面中显示数据源中的数据将数据源中的一行数据也就是一条记录显示为在web页面上输出表格中的一行。 GridView相对于DataGrid来说具有如下优势功能上更加丰富因为提供了智能标记面板也就是show smart tag更加易用方便,常用的排序、分页、更新、删除等操作可以零代码实现具有PagerTemplate属性可以自定义用户导航页面也就是说分页的控制更加随心所欲。GridView和DataGrid在事件模型上也多有不同之处DataGrid控件引发的都是单个事件而GridView控件会引发两个事件一个在操作前发生一个在操作后发生操作前的事件多位***ing事件操作后的事件多位***ed事件比如Sorting 事件和sorted 事件RowDeleting和RowDeleted事件。   二、GridView操作初步   1、显示数据源中的数据 从ToolBox中选取GridView控件拖到页面上然后点击右键选择Show Smart Tag,在Choose Data Source中选择 New Data Source, 出现Data Source Configuration Wizard,选择连接字符串可以选择已经存放在web.config中的ConnectionString ,然后可以选择是使用存储过程还是从表或视图中选择数据。 在这一步左侧的Where语句可以指定查询条件点击Where出现Add Where Clause ,选择要设定条件的列操作符是等于还是like还是其它然后选择Source也就是说要限定的条件从哪里取值可以是Control、Session、Form、Cookie、QueryStirng等如果选择Control那么需要在右侧选中是那个控件然后还可以设定默认值设定完后系统自动生成Sql 表达式和值的表达式此时点击Add按钮完成条件的添加Where Cluase下出现刚刚添加的条件。如果没有点击Add很容易设定了条件但是因为没有添加到Where子句中所以不起作用。 在这一步左侧的Order By可以让我们设定排序列就是我们取出的记录要按照什么派逊可以设定三个列是升序还是降序。 在这一部左侧的Advanced可以设定Advanced Sql Generation Options,这里可以生成这个查询的Insert、update、Delete语句当然前提是您选择的字段中必须包含了主键。当您想在GridView中不编写任何代码实现对表格的编辑、删除等操作时就必须在配置数据源时在这里生成Insert、Update、Delete这些语句。 GridView中编辑删除等操作的零代码就是根据配置数据源时自动生成的这些语句来完成数据源的更新删除等操作的。 在最后一步您可以测试一下您刚刚生成的查询是否正确最后点击完成数据已经出现在页面上了按CtrlF5运行。 恭喜您您已经会使用Asp.net来显示数据库中的数据了。   2、让GridView可以分页   GridView把数据显示出来了但是那么多条记录罗列到一页上是不合适的我们应该对数据进行分页。还记得在asp时代分页是多么的麻烦需要编写很多的代码而且各种分页组件也应运而生。而在GridView中您会发现分页是如此的简单只需要您轻点鼠标在Show Smart Tag中选中Enable Paging表格的分页操作变完成了是不是So Easy呢。 并不是什么数据源都可以让GridView实现自动分页的比如如果DataSourceMode是DataReader就无法实现自动分页。而且只有ObjectDataSource是界面级别的支持分页类似我们常用的SqlDataSource都是先提取所有的记录然后只显示本页需要显示的记录然后抛弃其余的记录都有点浪费资源的啦 当GridView的AllowPaging属性设置为True的时候我们实现了分页我们还可以对分页进行一些个性化的设置。常用的属性包括PageIndex――设置数据显示的当前页面默认是0也就是数据的首页。PageSize ――也就是一页显示多少条记录默认为10条。在PagerSettings中还可以对分页的导航按钮进行详细设置在Mode属性中可以设置Numeric――默认的分页用数字表示123……。NextPrevious、NextPreviousFirstLast、NumericFirstLast均可顾名思义显示上一页、下一页、首页、末页等。当Mode设定不是Numeric时那么可以通过设定FirstPageText、LastPageText等属性来实现分页导航时到首页、末页、下页、上页时显示的文字提示。 如果想实现分页界面的完全自动控制还可以点击GridView右键选择编辑模版PagerTemplate来实现在模版中加入若干个Button控件然后将Button控件的CommandName属性设置为Page,将CommandArgument属性分别设置为First、Last、Prev、Next或者一个数字即可实现分页操作。   3、GridView中的编辑、删除、排序 数据从数据源中提取出现显示在网页上后我们如果需要对其中的数据进行编辑、更新、删除等操作还是不需要编写任何代码利用GridView内置的功能即可实现。 在智能标记中点击编辑列在Avaliable Fields中选择ComandField然后双击Edit,update,cancel和Delete我们就为GridView添加了编辑和删除功能。如果在配置数据源的时候我们已经生成了Insert、update、delete这些语句那么我们现在就可以执行程序。点击页面上的Edit出现Update和Cancel按钮同时当前行除了主键以外的列数值都放在了一个文本框中可以进行编辑然后点击Update即可保存。点击Delete删除当前行记录。您是不是已经被GridView强大的功能折服了呢 在Show Smart Tag中选择Enable Sorting这时所有列的Header都变成了一个超链接其实这些都是一个LinkButton控件运行代码在网页生成的数据表中点击第一行中的列名即可按照当前列进行排序再次点击则反向排序。 如果您只需要对其中的几列进行排序可以在智能标记中选择编辑列选中要排序的列然后在右侧的属性中找到SortExpression属性然后从下拉框中选择根据哪个字段排序一般当然是当前字段咯完成排序的设置。如果您不需要这一列参与排序那么只需要把此列的SortExpression属性后面的值删除也就是说设置成空字符串即可。试一试是不是排序已经尽在掌握之中了呢   三、GridView中的自定义列 GridView可以根据数据源自动生成列但是如果我们需要自定义列的显示方式让GridView的列完完全全的由我们自己来控制我们就需要用到一种特殊的列――TemplateField。因为GridView生成的列都是一个字段一列如果我们需要把两个字段合并为一列显示呢我们可以使用模板列。我们可以指定包含标记和控件的模版自定义列的布局和行为我们可以新建一个模版列也可以直接把已经生成的列转换为模版列来进行个性化的设置。 在GridView上单击右键选择编辑模版在弹出菜单中选择要编辑的列出现列模版的编辑画面。其中HeaderTemplate――自定义列的标头部分显示的内容FooterTemplate――脚注部分显示哪谌荩?/SPANItemTemplate――是打开网页后此列数据显示的内容EditItemTemplate――此列处于编辑状态时如何显示AlternatingItemTemplate――交替项显示的内容也就是说为了显示效果可以隔行分别以不同的风格显示。 Example 1 我们现在假设有一个表其中有一个字段是username我们现在产生一个自定义列自定义列中包含此人的照片同时我们假定照片的路径为image/username.jpg。我们首先右键点击GridView在智能标记中选择编辑列添加一个模版列然后编辑模版中的ItemTemplate加入一个Image控件然后右键点击Image控件选择Edit DataBindings在ImageUrl中设置Field Binding首先我我要Bound to 数据源中的某列因为所有图片的路径和格式是相同的唯有名字不同而已所以我们这里选中username字段在format中我们要自己定义其格式输入image/{0}.jpg, {0}代表的就是上面绑定的字段下面有一个Two Way DataBinding 的复选框就是是否双向绑定的意思如果单向绑定一般采用Eval也就是说数值只从数据源传到页面上如果双向绑定也就是采用Bind的话对数据的修改可以回传到数据源之中。 在web页面执行时不同的行因为username不同图片的名字也会做出相应的替换。点击确定然后执行当前网页我们就可以看到在我们的自定义列中显示出了用户的照片。 Example 2 在数据库中存储性别的时候一般采用bit数据类型存储为True或者False在GridView自动生成列的时候一般使用CheckedBoxField 列来显示bit类型的数据显示在网页上就是一个单选框如果选中也就是Checked了就是男的否则就是女的。这样看起来很不直观下面我们通过自定义列将性别显示为男、女。 首先在GridView的Show Smart Tag中选择编辑列然后双击TemplateFields ,添加了一个模版列确定后点击右键选择编辑模版选中刚添加的列。在ItemTemplate中添加一个DropListDown控件然后编辑它的数据绑定Edit DataBinding把SelectedValue属性绑定到性别列。 在DropListDown控件中选择 Edit Item就是编辑其下拉列表的项我们添加两个Item一个的Text属性是男Value设置为True一个的Text属性设置为女Value属性设置为False。到这里你明白了么因为DropDownList控件的显示文本和其值是可以不一样的我们用数据绑定取到了性别这一列的值True或者False然后反映到DropDownList控件上如果值为True因为Text属性为男的Item的Value为True所以我们现在运行网页在新添加的列中显示的不再是单选框或者True、false这些没有含义的东西而是以下拉列表的方式显示出了当前用户是 男还是女。   四、自定义列中的数据更新 假设数据库中有一个权限字段值为0代表未审核用户为1代表一般用户为9则代表管理员用户。根据前面所说的自定义列的办法通过对DropListDown的绑定在网页中显示权限为 管理员而不是显示数字9。问题产生了如果我们调整用户权限的话比如把一般用户更改为管理员在编辑模版中的用户权限的下拉列表如何把它的值返回给数据源来完成更新操作。 我们在EditItemTemplate中设置的DropListDown控件必须选中了Two Way DataBinding也就是数据双向帮定这样才能返回数据。前面我们谈到在GridView中事件不是单个的是两个一个是发生前一个是发生后因为我们需要在数据更新前把下拉列表的权限值传送出去所以我们需要对GridView1_RowUpdating 进行编码,编码如下 protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) { //当前编辑的是哪行         int index GridView1.EditIndex;   //取得当前编辑行的GridViewRow对象         GridViewRow gvr GridView1.Rows[index];   //在当前行中寻找DropListDown控件         DropDownList dp (DropDownList)gvr.FindControl(editdrop);   //将DropListDown的值赋给NewValues集合中的权限字段。         e.NewValues[rights] dp.SelectedValue; }   2、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.CancelTrue来取消删除也可以用于判断当前数据库记录数如果只剩一条记录且数据库不能为空则提示并取消删除操作。 使用RowDeleted事件可以在删除后通过GridViewDeletedEventArgs的Exception属性判断删除过程中是否产生异常如无异常则可以显示类似于” 1 Records deleted” 之类的提示信息。 Example     protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) { //取得当前行号并取得当前行的GridViewRow对象         int indexe.RowIndex ;         GridViewRow gvrGridView1.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]; } 转载于:https://www.cnblogs.com/greateast/archive/2007/04/03/697861.html
http://wiki.neutronadmin.com/news/153828/

相关文章:

  • 天津交通网站建设网络服务公司有哪些
  • 响应式网站管理公司介绍ppt制作模板
  • 深圳html5网站制作Wordpress 免登录付费查看
  • 做购物网站 营业范围是什么wordpress外贸企业模板下载
  • 石家庄 网站编辑建站开始的前6个月多少外链最合适
  • 长春阿凡达网站建设网站建设如何自学
  • 网站推广方法的费用wordpress天气js代码
  • 番禺网站制作多少钱wordpress 汉化版主题
  • 济南建网站要深圳四站合一网站建设电话
  • html商业网站模板深圳市做网站前十强
  • 网站建设怎么办深圳代理记账公司前十名
  • 做网站卖链接wordpress图片专辑
  • 多与pR值高的网站做链接公司局域网
  • 贵州华瑞网站建设有限公司网站建设创新互联
  • 互联网项目名称大全seo实战技巧
  • 温州手机网站制作江门网站建设易搜互联
  • 济南建网站的网站开发网站好还是app
  • 手机和网站页面模板高州手机网站建设公司
  • 自己做网站 微信wordpress do action
  • 百度网站建设流程展厅设计费
  • 企业网站认证交互式英语网站的构建
  • 涡阳网站建设哪家好接帮人家做网站的网站
  • 长丰网站建设山东住房和城乡建设厅官网
  • 茶叶销售网站源代码提供营销型网站
  • 网站建设公司转型黑马培训收费
  • 社交网站开发项目计划报告表述网站建设流程
  • 做网站的一般多少钱海门做网站
  • 厦门手机网站制作六安seo公司选择8火星
  • 做网站的工作有发展空间没有做网站能用微软
  • 做网站淄博公司网站过期未续费会怎样