【转载】解决gridview空行时不显示的问题
问题:
GridView控件应用很是广泛,通常将它与DataSourceControl搭配使用,当然也可以手工指定DataSource属性来完成数据绑定。如果数据源返回一个空行的数据集(例如查询不到指定记录等)时,将会出现两种情况:
1.当GridView未指定<EmptyDataTemplate>或EmptyDataText属性时,控件将不会被最终生成,网页上的表现为空白,这样不仅感觉不爽,而且很容易造成布局的变形。
2.如果指定了<EmptyDataTemplate>或EmptyDataText属性,网页上将最终产生一个table元素,它具有一行一格,可以显示出设置的提示信息,但是这种情况下该table将不会显示出表头来。
通常希望的是,即使数据源返回一个空行的数据集,但是原有的Table元素也应该被显示出来,它应该带一个表头行,以及一个空白行。
解决办法:
通过手工向数据源添加一个新行即可解决。在此过程应该处理好以下几个方面的事情。
1.在 New 一行时,如果包含主键列,则该列的值会被自动赋值(如 int 列会被赋值 0 )。对此应该手工将新行的每一列都赋值为 DBNull.Value ;
2.由于可能存在有非空约束,会造成插入失败,因此必须手工将每一列的 AllowDBNull 属性重新设定
以下示例 GridView 绑定至 ObjectDataSource 时的处理代码:
public void LoadData()
{
RheologicalPropertyForCementingSimulationDAL dalRheologicalPropertyForCementingSimulation = new RheologicalPropertyForCementingSimulationDAL();
dtRheologicalPropertyForCementingSimulation = dalRheologicalPropertyForCementingSimulation.GetData();
gcRheologicalPropertyForCementingSimulation.DataSource = dtRheologicalPropertyForCementingSimulation; if (dtRheologicalPropertyForCementingSimulation.Rows.Count == )
{
//生成DataRow对象
DataRow row = dtRheologicalPropertyForCementingSimulation.NewRow(); foreach(DataColumn col in dtRheologicalPropertyForCementingSimulation.Columns)
{
//重新设置AllowDBNull属性
col.AllowDBNull = true;
//显示赋值成null
row[col] = DBNull.Value; }
//将DataRow对象添加到table中
dtRheologicalPropertyForCementingSimulation.Rows.Add(row);
}
}
效果示意如下:

就此来说效果并不是十分理想,如果能够实现以下的效果那就更好了:

为达成目的,还需要在 GridView 中加一点小改进,处理一下那个空行:
protected void GridView1_DataBound(object sender, EventArgs e) {
//如果是空行,判断条件为:行数=1且主键列=DBNull.Value,如果需要区分是初始化/提交状态,可以加入 Page.IsPostBack 判断
if (GridView1.DataKeys.Count == && GridView1.DataKeys[].Values[] == DBNull.Value) {
//清除掉该空行的全部单元格
GridView1.Rows[].Cells.Clear();
//新建单元格对象
TableCell cell = new TableCell();
//合并单元格
cell.ColumnSpan = GridView1.Columns.Count;
//GridView1.EmptyDataText已经设置为 "没有查找到符合条件的记录"
//设置单元格内容为GridView1.EmptyDataText,把提示文本给分离出来
cell.Text = GridView1.EmptyDataText;
//向空行中加入单元格
GridView1.Rows[].Cells.Add(cell);
//让该行应用EmptyDataRowStyle样式,这样可以更加灵活,比如可以很容易的应用主题
GridView1.Rows[].ApplyStyle(GridView1.EmptyDataRowStyle);
}
}
如此一来,配合 GridView 的 EmptyDataText , EmptyDataRowStyle 即可以实现令人满意的效果。
【转载】解决gridview空行时不显示的问题的更多相关文章
- 如何解决 Matlab 画图时中文显示乱码的问题?
使用的是win10系统,从前几个月某一天,我的matlab的figure里的中文都变成了口口.很是郁闷,还以为是动到了什么配置引起的. 前几天更新了matlab 2018b,发现还有这个问题.就觉得不 ...
- 解决gridview row 左边序列号 显示不完全的技巧
放在主程序 入口处, public Form1() { InitializeComponent(); gridView1.IndicatorWidth = ; //<宽度值>官方推荐常用是 ...
- Saiku图表导出时中文显示问题的解决方法
Saiku图表导出时png,jpg,pdf三种格式的中文显示都有问题,目前找到一种不太完善的解决方法(中文可以显示但不清晰),需要修改Saiku项目下的ExporterResource.java文件, ...
- 解决微信小程序的wx-charts插件tab切换时的显示会出现位置移动问题-tab切换时,图表显示错乱-实现滑动tab
解决Echarts在微信小程序tab切换时的显示会出现位置移动问题 tab切换时,图表显示错乱 <canvas class="kcanvas" canvas-id=" ...
- 解决Myeclipse在调试(debug)时无法显示变量值问题
解决Myeclipse在调试(debug)时无法显示变量值问题 突然发现myeclipse在调试时当鼠标放在变量上面时无法显示变量值了 ctrl+shift+D居然提示cannot be resolv ...
- 解决 DatePickerDialog 在 Android7.0 API24 上使用 AlertDialog.THEME_TRADITIONAL、AlertDialog.THEME_HOLO_DARK、AlertDialog.THEME_HOLO_LIGHT等样式时无法显示为 Spinner 样式的问题
DatePickerDemoForAndroid24 解决 DatePickerDialog 在 Android7.0 API24 上使用AlertDialog.THEME_TRADITIONAL.A ...
- (转载)解决切换Fragment时布局重新实例化
解决切换Fragment时布局重新实例化 作者 instanceof 关注 2015.12.30 17:25* 字数 628 阅读 7616评论 17喜欢 23 关于Fragment 在这简单说一下F ...
- 解决 PHPExcel 长数字串显示为科学计数[转]
解决 PHPExcel 长数字串显示为科学计数 在excel中如果在一个默认的格中输入或复制超长数字字符串,它会显示为科学计算法,例如身份证号码,解决方法是把表格设置文本格式或在输入前加一个单引号. ...
- 织梦DedeCMS判断简略标题为空时则显示完整标题
使用织梦DedeCMS系统程序开发网站中,我们会遇到很多因网页版面设计限定的宽度,使文章标题需要进行字数限制,通常做法是在a标签中加入一个title属性,让鼠标放上去的时候显示完整标题.但是标题被剪裁 ...
随机推荐
- fopen和fopen_s用法的比较
open和fopen_s用法的比较 fopen 和 fopen_s fopen用法: fp = fopen(filename,"w"). fop ...
- 分布式架构探索 - 1. RPC框架之Java原生RMI
1. 什么是RPC RPC(Remote Procedure Call)即远程过程调用,指的是不同机器间系统方法的调用,这和 同机器动态链接库(DLL)有点类似,只不过RPC是不同机器,通过网络通信来 ...
- WPF 实现窗体拖动
C# 实现代码 this.Loaded += (r, s) => { this.MouseDown += (x, y) => { if (y.LeftButton == MouseButt ...
- python接口自动化测试(六)-unittest-单个用例管理
前面五节主要介绍了环境搭建和requests库的使用,可以使用这些进行接口请求的发送.但是如何管理接口案例?返回结果如何自动校验?这些内容光靠上面五节是不行的,因此从本节开始我们引入python单元测 ...
- 关于Docker目录挂载的总结(转)
关于Docker目录挂载的总结 Docker容器启动的时候,如果要挂载宿主机的一个目录,可以用-v参数指定. 譬如我要启动一个centos容器,宿主机的/test目录挂载到容器的/soft目录,可通过 ...
- MATLAB 统计元素出现的次数
可以使用 hist 函数: A = [1 2 8 8 1 8 2 1 8 2 1]; count = hist(A,unique(A)) count的结果与unique(A)对应.
- CentOS 7.4安装nodejs & nginx & pm2
一.安装nodejs1.查看操作系统信息 uname -a cat /etc/centos-release 2.安装wget yum install wget -y3.安装nodejs 1.下载 wg ...
- iOS性能优化篇 —— 耗电优化总结
手机App耗电的主要来源有以下四个因素: CPU处理,Processing 网络,Networking 定位,Location 图像,Graphics 耗电优化最终目的:通过尽可能降低CPU ...
- HDU 5095--Linearization of the kernel functions in SVM【模拟】
Linearization of the kernel functions in SVM Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- why-the-default-authentication-hadoop-is-unsecured ?
https://www.learningjournal.guru/article/hadoop/hadoop-security-using-kerberos/ https://stackoverflo ...