ASP.NETDataGrid高级使用技巧
datagrid控件

datagrid控件DataGrid控件DataGrid控件是一种常用的用户界面控件,用于以表格形式显示和编辑数据。
它是很多图形用户界面(GUI)框架和开发工具的一部分,包括但不限于Java Swing、.NET Windows Forms和Web浏览器中的HTML表格。
DataGrid控件的主要目的是允许用户以易于理解和操作的方式查看和编辑数据。
它通常以网格的形式展现数据,每行代表一条记录,每列代表一个属性或字段。
用户可以通过DataGrid控件的各种交互方式来查看、过滤、排序和编辑数据。
DataGrid控件常见的功能包括以下几个方面:1. 数据绑定:DataGrid控件通常可以与数据源进行绑定,从而自动显示和更新数据。
这样,当数据源改变时,控件会自动更新显示的数据。
通过数据绑定,可以大大简化开发过程,减少手动操作的工作量。
2. 排序和过滤:DataGrid控件通常提供排序和过滤功能,允许用户根据特定的属性或条件对数据进行排序和过滤。
这样,用户可以更快地找到所需的数据,并且可以根据自己的需求进行数据的展示和分析。
3. 编辑和验证:DataGrid控件通常允许用户直接在表格中进行数据的编辑。
用户可以通过单击单元格来编辑数据,然后保存或取消更改。
同时,控件通常支持数据的验证功能,以确保用户输入的数据符合特定的规则和要求。
4. 样式和格式:DataGrid控件通常允许用户自定义表格的样式和格式,包括字体、颜色、边框等。
这样,用户可以根据自己的需求和偏好进行界面的定制,使其更加符合应用程序的整体风格和用户需求。
5. 事件处理:DataGrid控件通常提供一系列事件,以便开发人员能够对用户的操作进行响应。
例如,当用户单击单元格、选择行或保存数据时,控件会触发相应的事件,开发人员可以在事件处理程序中编写代码来执行特定的操作。
总之,DataGrid控件是一种非常有用的用户界面控件,用于以表格形式显示和编辑数据。
详解datagrid使用方法(重要)

详解datagrid使⽤⽅法(重要)1、将静态HTML渲染为datagrid样式<!-- ⽅式⼀:将静态HTML渲染为datagrid样式 --><table class="easyui-datagrid"><thead><tr><th data-options="field:'id'">编号</th><th data-options="field:'name'">姓名</th><th data-options="field:'age'">年龄</th></tr></thead><tbody><tr><td>001</td><td>⼩明</td><td>90</td></tr><tr><td>002</td><td>⽼王</td><td>3</td></tr></tbody></table>2、发送ajax请求获取json数据创建datagrid 提供json⽂件<!-- ⽅式⼆:发送ajax请求获取json数据创建datagrid --><table data-options="url:'${pageContext.request.contextPath }/json/datagrid_data.json'"class="easyui-datagrid"><thead><tr><th data-options="field:'id'">编号</th><th data-options="field:'name'">姓名</th><th data-options="field:'age'">年龄</th></tr></thead></table>2、使⽤easyUI提供的API创建datagrid(掌握)<!-- ⽅式三:使⽤easyUI提供的API创建datagrid --><script type="text/javascript">$(function(){//页⾯加载完成后,创建数据表格datagrid$("#mytable").datagrid({//定义标题⾏所有的列columns:[[{title:'编号',field:'id',checkbox:true},{title:'姓名',field:'name'},{title:'年龄',field:'age'},{title:'地址',field:'address'}]],//指定数据表格发送ajax请求的地址url:'${pageContext.request.contextPath }/json/datagrid_data.json',rownumbers:true,singleSelect:true,//定义⼯具栏toolbar:[{text:'添加',iconCls:'icon-add',//为按钮绑定单击事件handler:function(){alert('add...');}},{text:'删除',iconCls:'icon-remove'},{text:'修改',iconCls:'icon-edit'},{text:'查询',iconCls:'icon-search'}],//显⽰分页条pagination:true});});</script>如果数据表格中使⽤了分页条,要求服务端响应的json变为:请求响应:3、案例:取派员分页查询(1)页⾯调整修改页⾯中datagrid的URL地址(2)服务端实现分装分页相关属性/*** 通⽤分页查询⽅法*/public void pageQuery(PageBean pageBean) {int currentPage = pageBean.getCurrentPage();int pageSize = pageBean.getPageSize();DetachedCriteria detachedCriteria = pageBean.getDetachedCriteria();//查询total---总数据量detachedCriteria.setProjection(Projections.rowCount());//指定hibernate框架发出sql的形式----》select count(*) from bc_staff; List<Long> countList = (List<Long>) this.getHibernateTemplate().findByCriteria(detachedCriteria);Long count = countList.get(0);pageBean.setTotal(count.intValue());//查询rows---当前页需要展⽰的数据集合(3)detachedCriteria.setProjection(null);//指定hibernate框架发出sql的形式----》select * from bc_staff int firstResult = (currentPage - 1) * pageSize;int maxResults = pageSize;List rows = this.getHibernateTemplate().findByCriteria(detachedCriteria, firstResult, maxResults);pageBean.setRows(rows);}//属性驱动,接收页⾯提交的分页参数private int page;private int rows;/*** 分页查询⽅法* @throws IOException*/public String pageQuery() throws IOException{PageBean pageBean = new PageBean();pageBean.setCurrentPage(page);pageBean.setPageSize(rows);//创建离线提交查询对象DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Staff.class);pageBean.setDetachedCriteria(detachedCriteria);staffService.pageQuery(pageBean);//使⽤json-lib将PageBean对象转为json,通过输出流写回页⾯中//JSONObject---将单⼀对象转为json//JSONArray----将数组或者集合对象转为jsonJsonConfig jsonConfig = new JsonConfig();//指定哪些属性不需要转jsonjsonConfig.setExcludes(new String[]{"currentPage","detachedCriteria","pageSize"});String json = JSONObject.fromObject(pageBean,jsonConfig).toString();ServletActionContext.getResponse().setContentType("text/json;charset=utf-8");ServletActionContext.getResponse().getWriter().print(json);return NONE;}取派员的批量删除在取派员表中存在⼀个删除标识位deltag,1表⽰已删除,0表⽰未删除(1)页⾯调整//修改删除按钮绑定的事件:function doDelete(){//获取数据表格中所有选中的⾏,返回数组对象var rows = $("#grid").datagrid("getSelections");if(rows.length == 0){//没有选中记录,弹出提⽰$.messager.alert("提⽰信息","请选择需要删除的取派员!","warning");}else{//选中了取派员,弹出确认框$.messager.confirm("删除确认","你确定要删除选中的取派员吗?",function(r){if(r){var array = new Array();//确定,发送请求//获取所有选中的取派员的idfor(var i=0;i<rows.length;i++){var staff = rows[i];//json对象var id = staff.id;array.push(id);}var ids = array.join(",");//1,2,3,4,5location.href = "staffAction_deleteBatch.action?ids="+ids;}});}}(2)服务端实现第⼀步:在StaffAction中创建deleteBatch批量删除⽅法//属性驱动,接收页⾯提交的ids参数private String ids;/*** 取派员批量删除*/public String deleteBatch(){staffService.deleteBatch(ids);return LIST;}第⼆步:在Service中提供批量删除⽅法/*** 取派员批量删除* 逻辑删除,将deltag改为1*/public void deleteBatch(String ids) {//1,2,3,4if(StringUtils.isNotBlank(ids)){String[] staffIds = ids.split(",");for (String id : staffIds) {staffDao.executeUpdate("staff.delete", id);}}}第三步:在Staff.hbm.xml中提供HQL语句,⽤于逻辑删除取派员<!-- 取派员逻辑删除 --><query name="staff.delete">UPDATE Staff SET deltag = '1' WHERE id = ?</query>取派员修改功能(1)页⾯调整第⼀步:为数据表格绑定双击事件第⼆步:复制页⾯中添加取派员窗⼝,获得修改取派员窗⼝第三步:定义function//数据表格绑定的双击⾏事件对应的函数function doDblClickRow(rowIndex, rowData){//打开修改取派员窗⼝$('#editStaffWindow').window("open");//使⽤form表单对象的load⽅法回显数据$("#editStaffForm").form("load",rowData);}(2)服务端实现在StaffAction中创建edit⽅法,修改取派员信息/*** 修改取派员信息*/public String edit(){//显查询数据库,根据id查询原始数据Staff staff = staffService.findById(model.getId());//使⽤页⾯提交的数据进⾏覆盖staff.setName(model.getName());staff.setTelephone(model.getTelephone());staff.setHaspda(model.getHaspda());staff.setStandard(model.getStandard());staff.setStation(model.getStation());staffService.update(staff);return LIST;}到此这篇关于详解datagrid使⽤⽅法(重要)的⽂章就介绍到这了,更多相关datagrid使⽤⽅法内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
asp.netGridView合并单元格的两种解决方案

GridView合并单元格的两种解决⽅案第⼀种⽅案|---|---|---|---|---|| A | B | C |100|150||---|---|---|---|---|| A | B | D |200|250||---|---|---|---|---|| A | E | C |100|150||---|---|---|---|---|| A | E | D |120|250||---|---|---|---|---|通过代码处理希望得到的表|---|---|---|---|---|| | B | C |100|150|| | |---|---|---|| | | D |200|250|| |---|---|---|---|| A | | C |100|150|| | |---|---|---|| | E | D |120|250||---|---|---|---|---|public class GridDecorator{public static void MergeRows(GridView gridView){for (int rowIndex = gridView.Rows.Count - 2; rowIndex >= 0; rowIndex--){GridViewRow row = gridView.Rows[rowIndex];GridViewRow previousRow = gridView.Rows[rowIndex + 1];for (int i = 0; i < row.Cells.Count; i++){if (row.Cells[i].Text == previousRow.Cells[i].Text){row.Cells[i].RowSpan = previousRow.Cells[i].RowSpan < 2 ? 2 :previousRow.Cells[i].RowSpan + 1;previousRow.Cells[i].Visible = false;}}}}}在 PreRender 预呈现的事件中做操作protected void gridView_PreRender(object sender, EventArgs e){GridDecorator.MergeRows(gridView);}第⼆种⽅案#region 合并单元格合并某⼀⾏的所有列 /// <summary> /// 合并GridView中某⾏相同信息的⾏(单元格) /// </summary> /// <param name="GridView1">GridView对象</param> /// <param name="cellNum">需要合并的⾏</param> public static void GroupRow(GridView GridView1, int rows) { TableCell oldTc = GridView1.Rows[rows].Cells[0]; for (int i = 1; i < GridView1.Rows[rows].Cells.Count; i++) { TableCell tc = GridView1.Rows[rows].Cells[i]; //Cells[0]就是你要合并的列 if (oldTc.Text == tc.Text) { tc.Visible = false; if (oldTc.ColumnSpan == 0) { oldTc.ColumnSpan = 1; } oldTc.ColumnSpan++; oldTc.VerticalAlign = VerticalAlign.Middle; } else { oldTc = tc; } } } #endregion #region 合并单元格合并⼀⾏中的⼏列 /// <summary> /// 合并单元格合并⼀⾏中的⼏列 /// </summary> /// <param name="GridView1">GridView ID</param> /// <param name="rows">⾏</param> /// <param name="sCol">开始列</param> /// <param name="eCol">结束列</param> public static void GroupRow(GridView GridView1, int rows,int sCol,int eCol) { TableCell oldTc = GridView1.Rows[rows].Cells[sCol]; for (int i = 1; i < eCol - sCol; i++) { TableCell tc = GridView1.Rows[rows].Cells[i + sCol]; //Cells[0]就是你要合并的列 tc.Visible = false; if (oldTc.ColumnSpan == 0) { oldTc.ColumnSpan = 1; } oldTc.ColumnSpan++; oldTc.VerticalAlign = VerticalAlign.Middle; } } #endregion #region 合并单元格合并某⼀列所有⾏ /// <summary> /// 合并GridView中某列相同信息的⾏(单元格) /// </summary> /// <param name="GridView1"></param> /// <param name="cellNum"></param> public static void GroupCol(GridView GridView1, int cols) { if (GridView1.Rows.Count < 1 || cols > GridView1.Rows[0].Cells.Count - 1) { return; } TableCell oldTc = GridView1.Rows[0].Cells[cols]; for (int i = 1; i < GridView1.Rows.Count; i++) { TableCell tc = GridView1.Rows[i].Cells[cols]; if (oldTc.Text == tc.Text) { tc.Visible = false; if (oldTc.RowSpan == 0) { oldTc.RowSpan = 1; } oldTc.RowSpan++; oldTc.VerticalAlign = VerticalAlign.Middle; } else { oldTc = tc; } } } #endregion #region 合并单元格合并某⼀列中的某些⾏ /// <summary> /// 合并单元格合并某⼀列中的某些⾏ /// </summary> /// <param name="GridView1">GridView ID</param> /// <param name="cellNum">列</param> /// <param name="sRow">开始⾏</param> /// <param name="eRow">结束列</param> public static void GroupCol(GridView GridView1, int cols,int sRow,int eRow) { if (GridView1.Rows.Count < 1 || cols > GridView1.Columns.Count - 1) { return; } TableCell oldTc = GridView1.Rows[sRow].Cells[cols]; for (int i = 1; i < eRow - sRow; i++) { TableCell tc = GridView1.Rows[sRow + i].Cells[cols]; tc.Visible = false; if (oldTc.RowSpan == 0) { oldTc.RowSpan = 1; } oldTc.RowSpan++; oldTc.VerticalAlign = VerticalAlign.Middle; } } #endregion。
在ASP-NET中读写Excel文件有四种解决方案

在ASP-NET中读写Excel文件有四种解决方案在中读写Excel文件有四种解决方案在应用程序常常会遇到需要从Excel 文件中读取数据或将数据写入Excel的需求。
一般来讲,在中读写Excel文件有四种解决方案。
1.1.1 使用OLE DB使用OLE DB可以以查询数据库的方式来读取Excel文件,因为在某种程度上Excel表格可以看成是一张一张的数据表。
其二者的主要区别在于所使用的数据引擎不一样。
使用OLE DB访问Excel的要点是计算机上必须具有Microsoft Access Data Component 2.6(MADC2.6)以上版本,同时在连接字符串上必须声明“Extended Properties=Excel 8.0”,这里的指定Excel 版本号如果高于8.0可能会出错,所以一般来讲必须使用Excel 8.0。
然后其它的写法就和一般的访问数据库一样了,打开连接,填充数据集,再关闭连接即可。
例如下面的实现代码://创建一个数据链接string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =c:\\sample.xls;Extended Properties=Excel 8.0" ; OleDbConnection myConn = new OleDbConnection ( strCon ) ;string strCom = " SELECT * FROM [Sheet1$] " ;myConn.Open ( ) ;//打开数据链接,得到一个数据集OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ;//创建一个DataSet对象myDataSet = new DataSet ( ) ;//得到自己的DataSet对象myCommand.Fill ( myDataSet , "[Sheet1$]" ) ; //关闭此数据链接myConn.Close ( ) ;代码7-1使用这种解决方案的优点是不需要其他的服务器组件,部署非常方便,但是其缺点也是明显的,用它来读取Excel 2003格式以上的文件会存在数据丢失的情况,而且也无法生成Excel文件。
DataGrid的用法

前几天打算尝试下DataGrid的用法,起初以为应该很简单,可后来被各种使用方法和功能实现所折磨。
网络上的解决方法太多,但也太杂。
没法子,我只好硬着头皮阅览各种文献资料,然后不断的去尝试,总算小有成果。
因此,把我学到的和大家分享一下,相信这篇文章会让你再很短的时间内学会DataGrid的大部分主要功能,而且很多难点都可以在里面找到解决方案。
由于涉及的应用比较多,所以篇幅会很长。
但可以确保各个版块相互独立,总共4个部分1.数据绑定2.DataGrid的增改删功能3.DataGrid的分页实现4.DataGrid的样式设计先上一张截图,让你大概知道自己需要的功能是否在这张图里有所实现。
PS:使用技术:WPF + Entity Framework1.数据绑定(涉及DataGrid绑定和Combox绑定)在DataGrid中同时包含“自动生成列”与“用户自定义列” 由属性AutoGenerateColumns控制。
默认情况下,DataGrid将根据数据源自动生成列。
下图列出了生成的列类型。
如果AutoGenerateColumns="True" ,我们只需要如下几行代码<DataGrid Name="dataGrid1" AutoGenerateColumns="True" />后台dataGrid1.ItemsSource = infoList; //infoList为内容集合(这是我从数据库中获取的记录集合类型为List<T>)PS:因为这里给dataGrid1绑定了数据源,所以下面绑定的字段都是infoList中的字段名称,同样也对应着我数据表中的字段名。
里面包含FID,公司名称,职员姓名,性别,年龄,职务。
解释下,怕大家无法理解Binding 后面的值是如何来的了显然这种数据绑定非常的容易,如果对表格要求不高,这中无疑是最简单方便的。
wpf中datagrid用法

wpf中datagrid用法摘要:I.简介- 介绍WPF 中的DataGrid 控件- 阐述DataGrid 在WPF 中的重要性II.DataGrid 的基本用法- 创建DataGrid 控件- 设置DataGrid 的数据源- 数据绑定III.DataGrid 的高级用法- 列的自动调整- 排序和筛选- 分页和数据缓存- 用户自定义样式IV.DataGrid 的常见问题及解决方法- 数据更新时的刷新问题- 性能优化- 特定场景下的DataGrid 使用技巧V.总结- 回顾DataGrid 的主要功能和用途- 强调DataGrid 在WPF 应用中的重要地位正文:WPF(Windows Presentation Foundation)是一种基于.NET Framework 的桌面应用程序开发框架,它提供了许多现代化的UI 组件,以帮助开发人员构建具有高度交互性和视觉效果的应用程序。
在WPF 中,DataGrid 控件是一个非常常用的数据展示和编辑组件,它可以用来显示和操作大量数据,为用户提供方便的数据浏览和编辑功能。
DataGrid 控件的使用方法相对简单,首先需要在XAML 文件中创建DataGrid 控件,并设置它的布局和样式。
然后,在后台代码中设置DataGrid 的数据源,通常是通过数据绑定来实现的。
数据绑定是WPF 中一种强大的数据同步机制,它可以让UI 组件与数据模型自动保持同步,实现数据驱动的UI。
一旦设置了DataGrid 的数据源,就可以开始使用DataGrid 的各种功能。
例如,可以使用DataGrid 的列自动调整功能来自适应不同宽度的列;可以对数据进行排序和筛选,以帮助用户更快速地找到所需的数据;可以启用分页功能,以提高数据浏览的性能;还可以自定义DataGrid 的样式,以满足特定场景下的需求。
当然,在实际使用过程中,DataGrid 也可能遇到一些问题。
例如,当数据源发生变化时,如何刷新DataGrid 以显示最新的数据?如何优化DataGrid 的性能,以避免出现卡顿现象?在某些特定场景下,如何巧妙地使用DataGrid?针对这些问题,本文将提供相应的解决方案和技巧。
Asp.net中GridView使用详解(引)

中GridView使⽤详解(引)GridView⽆代码分页排序GridView选中,编辑,取消,删除GridView正反双向排序GridView和下拉菜单DropDownList结合GridView和CheckBox结合⿏标移到GridView某⼀⾏时改变该⾏的背景⾊⽅法⼀⿏标移到GridView某⼀⾏时改变该⾏的背景⾊⽅法⼆GridView实现删除时弹出确认对话框GridView实现⾃动编号GridView实现⾃定义时间货币等字符串格式GridView实现⽤“...”代替超长字符串GridView⼀般换⾏与强制换⾏GridView显⽰隐藏某⼀列GridView弹出新页⾯/弹出新窗⼝GridView固定表头(不⽤javascript只⽤CSS,2⾏代码,很好⽤)GridView合并表头多重表头⽆错完美版(以合并3列3⾏举例)GridView突出显⽰某⼀单元格(例如⾦额低于多少,分数不及格等)GridView加⼊⾃动求和求平均值⼩计GridView数据导⼊Excel/Excel数据读⼊GridView1.GridView⽆代码分页排序:效果图:1.AllowSorting设为True,aspx代码中是AllowSorting="True";2.默认1页10条,如果要修改每页条数,修改PageSize即可,在aspx代码中是PageSize="12"。
3.默认的是单向排序的,右击GridView弹出“属性”,选择AllowSorting为True即可。
2.GridView选中,编辑,取消,删除:效果图:后台代码:你可以使⽤sqlhelper,本⽂没⽤。
代码如下:using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Data.SqlClient;public partial class _Default : System.Web.UI.Page{//删除protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e){string sqlstr = "delete from 表 where id='" + GridView1.DataKeys[e.RowIndex].Value.ToString() + "'";sqlcon = new SqlConnection(strCon);sqlcom = new SqlCommand(sqlstr,sqlcon);sqlcon.Open();sqlcom.ExecuteNonQuery();sqlcon.Close();bind();}//更新protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e){sqlcon = new SqlConnection(strCon);string sqlstr = "update 表 set 字段1='"+ ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim() + "',字段2='"+ ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().Trim() + "',字段3='"+ ((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString().Trim() + "' where id='"+ GridView1.DataKeys[e.RowIndex].Value.ToString() + "'";sqlcom=new SqlCommand(sqlstr,sqlcon);sqlcon.Open();sqlcom.ExecuteNonQuery();sqlcon.Close();GridView1.EditIndex = -1;bind();}//取消protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e){GridView1.EditIndex = -1;bind();}//绑定public void bind(){string sqlstr = "select * from 表";sqlcon = new SqlConnection(strCon);SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);DataSet myds = new DataSet();sqlcon.Open();myda.Fill(myds, "表");GridView1.DataSource = myds;GridView1.DataKeyNames = new string[] { "id" };//主键GridView1.DataBind();sqlcon.Close();}}前台主要代码:... ...<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4"ForeColor="#333333" GridLines="None" OnRowDeleting="GridView1_RowDeleting" OnRowEditing="GridView1_RowEditing"OnRowUpdating="GridView1_RowUpdating" OnRowCancelingEdit="GridView1_RowCancelingEdit"> <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" /><Columns><asp:BoundField DataField="⾝份证号码" HeaderText="⽤户ID" ReadOnly="True" /><asp:BoundField DataField="姓名" HeaderText="⽤户姓名" /><asp:BoundField DataField="员⼯性别" HeaderText="性别" /><asp:BoundField DataField="家庭住址" HeaderText="家庭住址" /><asp:CommandField HeaderText="选择" ShowSelectButton="True" /><asp:CommandField HeaderText="编辑" ShowEditButton="True" /><asp:CommandField HeaderText="删除" ShowDeleteButton="True" /></Columns><RowStyle ForeColor="#000066" /><SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" /><PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" /><HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" /></asp:GridView>3.GridView正反双向排序:效果图:点姓名各2次的排序,点其他也⼀样可以。
Asp.net设置GridView自适应列宽不变形

设置GridView⾃适应列宽不变形动态绑定的GridView由于列数不固定,⽽列⼜太多,这样设置GridView固定宽度就不能满⾜需求了。
为此整理了两种⽅法来达到GridView ⾃适应列宽不变形的效果。
//在GridView的⾏数据绑定完的事件中设置protected void gvObjectList_RowDataBound(object sender, GridViewRowEventArgs e){if (e.Row.RowType == DataControlRowType.DataRow || e.Row.RowType == DataControlRowType.Header){//保持列不变形for (int i = 0; i < e.Row.Cells.Count; i++){//⽅法⼀:e.Row.Cells[i].Text = " " + e.Row.Cells[i].Text + " ";e.Row.Cells[i].Wrap = false;//⽅法⼆://e.Row.Cells[i].Text = "<nobr> " + e.Row.Cells[i].Text + " </nobr>";}}}代码说明:⽅法⼀,设置cell的⾃动换⾏属性为false。
⽅法⼆,⽤html标记的⽅式实现不换⾏;就是⼀个空格,可以让⽹格线和⾥⾯的内容留有⼀定的距离保持美观。
有兴趣的朋友,动⼿下吧,看看效果如何哦。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
NAME XXX XXX XXX
DataGrid Item 介绍
CLASSID XXX XXX XXX
ADDRESS XXX XXX Xx
EMAIL XXX XXX XXX
模版列
literalControl
注意事项:
对于非模版列:datagriditem.Cells[第几个单元格].Controls[第几个控件] 下标从0开始 可以转换成相应的控件,如: boundColumn: Label EditColumn: TextBox LinkColumn:DataGridLinkButton … 当模版列时,Control的index必须都加一,因为Control[0]:LiteralControl=“ ”
DataList优缺点
拥有强大的模版特性,灵活性高 支持数据的编辑状态 性能优于DataGrid
开发周期略比Datagrid高 没有Datagrid编辑器 不容易实现分页和件完全以HTML方式呈现,更加个性化 不支持编辑、分页、排序功能 开发周期最长 不提供默认的风格,须手工编写 性能最好,但特性最少
基础内容
了解.net framework 了解 了解C#、
Level 200
引言:传统ASP与在数据 呈现方面的比较
ASP
建立数据库连接 用SQL查询装载ADO数据 集 显示所需要的任何HTML 代码
遍历数据集中的记录 输出记录字段值及相
关的HTML 移向下一条记录
HeaderTemplate ItemTemplate EditItemTemplate
FooterTemplate
用于对页眉的自定义操作
项模版,用于显示自定义数据
编辑模版,即:当控件处于编 辑状态时,该单元处于哪种状 态。 用于对页脚的自定义操作
注意事项:非模版列均可以转换为模版列来增加 更灵活的功能
XXX
XXX
XXX
XXX
XXX
XXX
12345…
演示(构建行流程)
DataGrid绑定事件的触发流程
注意事项
DataBinding:只要执行了DataBind 方法,就会马上激发这个事件。 ItemCreated主要是创建行(行容 器),ItemDataBound将数据存放 于该“行容器”中(数据绑定)。依 次循环 如要在创建时手工添加自定义控件 (不使用模版列),则需要在 ItemCreated事件中绑定
三种数据绑定控件的使用领域及选 择
DataGrid优缺点
灵活性强,内置事件丰富 提供分页、编辑、排序等特性 功能强大的DataGrid编辑器以及模版列 快速开发、容易部署 对于表格的操作非常方便 内置多种布局风格
优点
缺点:性能不高(因为每次操作必须postback回 服务器)
个性化输出数据有限(只能输出html表格)
建议:
当知道控件ID值,建议采用datagriditem.findcontrol[“控件名称”] 来获得
DataGrid Item 构建行的流程
(itemcreated)
12345…
STUDID NAME
CLASSID ADDRESS EMAIL
XXX
XXX
XXX
XXX
XXX
XXX
XXX
XXX
XXX
演示
实现信息显示,同时可以更新、删除
使用DataGrid注意事项
需要更大的灵活性时,建议不要使用自动生成的列。 如果设置了自动生成列,并且在 Datagrid 中指定了列, 那么最终将得到对列的重复设置。系统将首先显示特别声 明的列,随后是所有自动生成的列。 切忌不可仅使用控件 ID 来引用 Datagrid 项目中的控件
DataGrid Column的介绍
DataGrid Column的介绍
BoundColumn:文本字段标准显示,当处于编辑状态,将 显示为TextBox
HyperLinkColumn:显示文本数据,同时是一个URL超链 接
ButtonColumn:按钮列,包括:
选择按钮 删除按钮 更新按钮 编辑按钮
无后台事件,可改变选中行的颜色 DeleteCommand事件 UpdateCommand事件 EditCommand事件
普通按钮 ItemCommand事件
风格:LinkButton、PushButton;
DataGrid Column的介绍
TemplateColumn:模版列,完全控制哪些控件 显示给用户;分为多种模版,如图
循环 显示所需要的HTML代码
缺点 不符合MVC架构 可重用性差 分页采用SQL 的top方式, 同时还须计算页码 可读性差
转载数据到Dataset datagrid.DataSource = dataset datagrid.DataBind()
符合MVC
绑定数据方便
支持各种数据操作, 可方便地实现分页、 编辑、排序等操作
性能比较
注意事项:
Datagrid生成过大的 ViewState(Base64), 导致性能最差 处在WebForm节点下的 控件性能要优于无 WebForm下的控件
压力测试
DataGrid 整体介绍
要点:
Datagrid类似于数据库的表格 记录集由行集(items)和列集(columns) 组成 行集由多个datagridColumn组成 列集由多个datagriditem组成
三者使用范围
Datagrid: 主要用在含有数据的表格中,一 般数据源是一个dataset。对于有排序、分 页、多列显示、对性能要求不是很高一般 选用Datagrid。 DataList: 主要用于单列的数据列表、高性 能的自定义的数据表、每行多条记录,如: 电子相册(含分页) Repeater:主要应用一些灵活性、性能更高 的一些数据展现
例如: 定义了一个textbox1的textbox控件,事实上,为 了确保id在html里不重复,每行的textbox前都加上了不 同的前缀,如:DataGrid1:_ctl2:MyTextBox
_ctl2: 代表textbox1的当前行。
须用FindControl 来指明
STUDID XXX XXX XXX
DataGrid 高级使用技巧
主讲:汪晟杰 微软MSDN讲师
日程
三种数据绑定控件的使用领域 DataGrid Column的介绍 DataGrid绑定事件的触发流程 Datalist、Datagrid的自定义分页技巧 Datagrid的点击列头之后的升降序技巧 Datagrid 批量操作 自定义列与自定义DataGrid的封装