第九章 GridView, Repeater与DataList数据服务控件 1:GridView控件基本属性 2:让GridView有分页功能 3:GridView数据控件的七种字段类型 4:让GridView具有光棒效果 5:为GridView添加自动编号 6:把DataGrid的数据,导出到excel中 7:隐藏GridView的某一列 8:如何自定义分页栏 功能:数据显示控件 1)如何让GridView显示数据库的表 GridView1.DataSource=数据源 GridView1.DataBind(); 2)EmptyDataText,EmptyDataRowStyle:没有任何数据时显示的文本,样式 3)GridLine:设置显示的网络线 4)ShowHead,ShowFooter:显示页头与页脚 5)AllowSorting:显示允许排序 6)AutoGenerateDeleteButton:是否自动产生删除按钮 7)AutoGenerateEditButton:是否自动产生编辑按钮 8)AutoGenerateSelButton:是否自动产生选择按钮 9)DataKeyNames:设置GridView主键的值 10)DataKeys:在设置了DataKeyNames之后,得到当前行主键的值 DataKeys[下标].value.tostring 11)Rows:得到gridview中行集合 A)GridView1.Rows[2].Cells[3].Text:得到第3行第4个单元格的值 B)Rows.Count:得到行的个数 12)AlternatingRowStyle:交替行的样式 13)FooterStyle:页脚样式 14)HeadStyle:头新式 15)AllowPaging:是否充许分页 16)PageSize:每一页的数据大小 17)PageIndex:当前行的下标 18)PageStyle:分页栏样式 19)RowStyle:数据行的样式 20):Width,Height:gridView的高和宽。一般要去掉,这样有利于排版 让GridView有分页功能 (分页数据源不能是sqldataread) A)设置AllowPaging为true B)设置PageSize大小 C)设置PageSetting的分页项 PageSettings:用来设置分页的项 1)Mode:设置分页导航条中分页的样式: 11)NextPrevious:上一页按钮和下一页按钮。 22)NextPreviousFirstLast:上一页按钮、下一页按钮、第一页按钮和最后一页按钮。 33)Numeric:可直接访问页面的带编号的链接按钮。 44)NumericFirstLast:带编号的链接按钮、第一个链接按钮和最后一个链接按钮 2)FirstPageText:第一页按钮的文字。 3)PreviousPageText:上一页按钮的文字。 4)NextPageText:下一页按钮的文字。 5)LastPageText:最后一页按钮的文字 6)PageButtonCount:当用户在mode里面选择Numeric时,所一页所显示的按钮个数 7)Position:用来设置分页文字的显示位置 8)PageImageUrl:用来设置一个图片来代替分页链接按钮 D)在PageIndexChanging里面写上代码 this.GridView1.PageIndex = e.NewPageIndex; this.GridView1.DataSource =数据源 this.GridView1.DataBind();//执行数据绑字代码 E)让用户实现转到功能: 直接指定this.GridView1.PageIndex=转到的值 然后进行数据的绑定 F)打开EnableSortingAndPagingCallBacks属性: 该属性可以实现AjAx。异步更新 GridView数据控件的七种字段类型 1)数据绑定字段:BoundField。[手动绑定] 1:AutoGenerateColumns:自动产生列,会自动根据数据源去创建列,但是有时候 用户可能只需要其中的几列,这时应该取消该属性,并手动添加列 2:DataField:用于绑定的列名 3:HeadText:用于显示的新的列名 4:NullDisplayText:空字段所显示的文本 5:DataFormatString:字符串格式化功能 此时一定要把HtmlEncode设为false生效 {0:C}:显示货币类型 {0:F}:显示固定小数点。{0:F2}显示两位小数 {0:D}:显示为长日期格式 作用: A)修改字段标题 B)格式化字符串 2)ButtonField:按钮字段 在GridView控件中显示自定义的按钮 1:Text:显示在按钮上方的标题 2)Type:按钮的样式。 3)ImageUrl:按钮类型设置成图像时,所指定图像 4)CommandName:用来设置按钮的命令名,以后好区别 是点击了那个按钮 4)单击按钮时,会触发RowCommand事件 e.CommandArgument得到当前行的下标 e.CommandName:得到单击按钮的命令名 举例: 1)有订单表,要求在gridview中添加一个按钮名为 修改,执行打印两个按钮 2)有一个商品表,放置一个按钮为放入购物蓝,和退回的按钮 购物车暂时用ListBox来代替 如何向GridView中添加客户端的JS 在一个RowDataBound事件里面写上代码:[是GridView绑定数据时,触发] if (e.Row.RowType == DataControlRowType.DataRow) { (e.Row.Cells[4].Controls[0] as LinkButton).Attributes.Add("onclick", "return confirm('确实要删除吗?');"); 其中e.Row代表每一个绑定的行 } 3)CommandFile命令按钮字段 是显示预先定义好的按钮来进行select,edit,update,delete 命令按钮本身就可以执行一些命令,而ButtonField的代码完全由 用户自己写,所以CommandFile可以省很多代码 1)有删除,选择,编辑三个已经做好的按钮 2)如何删除数据 在RowDeleting事件里面写代码 其中e.RowIndex得到删除的当前行的下标 如果要添加删除提示,请为GridView添加客户端脚本 删除完毕之后,请重新绑定GridView到数据源 if (this.GridView1.PageIndex != 0 && this.GridView1.Rows.Count == 1) { this.GridView1.PageIndex -= 1; } 与分页配合一起删除 3)如何编辑数据:[一般不用] A:在RowEditing事件里面写上:[当用户单击了编辑按钮时] this.GridView1.EditIndex = e.NewEditIndex; GridDataBind(); //使GridView再次绑定 B:在RowCancelingEdit事件写上:[当用户单击了取消按钮时] this.GridView1.EditIndex = -1; GridDataBind(); C:在RowUpdating里面得到用户修改的新值 this.GridView1.Rows[e.RowIndex].Cells[下标].Controls[0] as TextBox 进行数据库操作 重新绑定 4)如何选择数据: A:在SelectedIndexChanging里面写代码 this.GridView1.Rows[e.NewSelectedIndex].Cells[1].Text 得到用户所选中的行的字段的值 举例: 1:一个订单表。要求选择一个订单表的一条记录, 同时显示中订单明细表的内容 4)CheckBoxField复选框字段 当把数据类型设为Bit类型时,会自动成为复选框 5)HyperLinkField超级链接 (用得比较多) 1:HeadText:列头文本 2:DataNavigateUrlFields:用来生成Url查询字符串的字段名 3)DataNavigateUrlFormatString:指定Url查询字符串 4)DataTextFiled:用来显示超链接的字段,用来匹配DataTextFormatString 4)DataTextFormatString:显示超链接的文本。比如: 查看{0}的详细资料 举例: 1:一个订单表。要求选择一个订单表的一条记录, 同时显示中订单明细表的内容 6)ImageField:图像字段 1:HeadText:列头文本 2:DataImageUrlField:用于显示图片的字段 7)TemplateFile:模板字段 (很灵活) 当GridView所预定的几种字段都无法满足你的需求时,就可以使用 模板字段。模板字段充许你加入各种你所需要的控件 举例: 1:在每一行的前面加上checkBox,以实现购物 foreach (GridViewRow gvr in this.GridView1.Rows) { if ((gvr.Cells[0].FindControl("chk") as CheckBox).Checked) { s += gvr.Cells[1].Text; } } 2:把某一个字段,作为文本框类型并显示 1)加一个模板列,在模板列中加入文本框 2)在RowDataBound事件里面向该文本框赋值 让GridView具有光棒效果 if (e.Row.RowType == DataControlRowType.DataRow) { e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='red'"); e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor='yellow'"); } 为GridView添加自动编号 1)添加一个绑定列 2)在RowDataBound事件里面写上 e.Row.Cells[0].Text = Convert.ToString(this.GridView1.PageIndex *this.GridView1.PageSize + e.Row.RowIndex+1); 隐藏GridView的某一列 在RowDataBound事件里面写上 this.GridView1.Columns[0].Visible = false; 如何自定义分页栏 1)单右-->编辑模板-->PageTemplate 2)拖拉一些LinkButton在里面。 首页 上页 下页 末页 第几页/共几页 并区分它们的CommandName值 3)在RowCommand事件中处理这些按钮按下的事件 e.CommandName == "a" 来判断按下了那个按钮 4)在RowDataBound事件里面来访问分页栏中的标签 if (e.Row.RowType == DataControlRowType.Pager) { (e.Row.Cells[0].FindControl("lbld") as Label).Text = this.GridView1.PageIndex.ToString(); } 把DataGrid的数据,导出到excel中 1:在页面的类中添加 public override void VerifyRenderingInServerForm(Control control) { } 2:写上如下代码: Response.ContentType = "application/vnd.ms-excel"; System.IO.StringWriter tw = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw); this.GridView2.RenderControl(hw);//设置你要导出内容的控件,我这里是Repeater Response.Write(tw.ToString()); Response.End(); 以前使用GridView都是以表格的形式来显示的,有时候我们需要更自由的 方式来展现数据。 使用Repeater[一般很少用] Repeater为我们准备了很多的模板,但是这些模板只能够以进入源码视,手动来写 1:Template:项目模板, 2:SeparatorTemplate:分隔线模板 3:AlternatingItemTemplate:交替项模板 4:HeaderTemplate:头模板 5:FooterTemplate:模板 通过<%# DataBinder.Eval(Container.DataItem,"字段名")来得到 绑定到Repeater的数据源字段的值 举例: 1:做一个在线购物选择商品模板 2:做一个在线考试的界面 如何给Repeater分页 PagedDataSource pds = new PagedDataSource(); pds.DataSource = DataOper.RunHasResult("select 工号,姓名,部门编号,图片 from 职工").DefaultView; pds.AllowPaging = true; pds.PageSize = 3; pds.CurrentPageIndex = CurrentPage; this.Repeater1.DataSource = pds; this.Repeater1.DataBind(); DataList控件 DataList与Repeat控件的区别 DataList也有Repeat的那几个模板,此外还多了一个SelectedItemTemplate模板 DataList可以一行显示多笔数据,通过设置RepeatColumns=值 DataList直接在设计状态时,就可以进行模板的编辑,不像Repeat要写代码 实现选择DataList控件中的条目后显示该条目的详细信息 1)增加ItemTemplate项目模板,并添加一个LinkButton,以些能进入SelectedItemTemplate模板 2)设计SelectedItemTemplate模板 3)在DataList的ItemCommand事件中,写上下列代码 this.DataList1.SelectedIndex = e.Item.ItemIndex; 重新绑定DataList 举例: 举例:做一个在线购物选择商品模板,只显示图片和商品名,点击 查看详细资料后,会得到该商品的详细资料

评论