问题:

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空行时不显示的问题的更多相关文章

  1. 如何解决 Matlab 画图时中文显示乱码的问题?

    使用的是win10系统,从前几个月某一天,我的matlab的figure里的中文都变成了口口.很是郁闷,还以为是动到了什么配置引起的. 前几天更新了matlab 2018b,发现还有这个问题.就觉得不 ...

  2. 解决gridview row 左边序列号 显示不完全的技巧

    放在主程序 入口处, public Form1() { InitializeComponent(); gridView1.IndicatorWidth = ; //<宽度值>官方推荐常用是 ...

  3. Saiku图表导出时中文显示问题的解决方法

    Saiku图表导出时png,jpg,pdf三种格式的中文显示都有问题,目前找到一种不太完善的解决方法(中文可以显示但不清晰),需要修改Saiku项目下的ExporterResource.java文件, ...

  4. 解决微信小程序的wx-charts插件tab切换时的显示会出现位置移动问题-tab切换时,图表显示错乱-实现滑动tab

    解决Echarts在微信小程序tab切换时的显示会出现位置移动问题 tab切换时,图表显示错乱 <canvas class="kcanvas" canvas-id=" ...

  5. 解决Myeclipse在调试(debug)时无法显示变量值问题

    解决Myeclipse在调试(debug)时无法显示变量值问题 突然发现myeclipse在调试时当鼠标放在变量上面时无法显示变量值了 ctrl+shift+D居然提示cannot be resolv ...

  6. 解决 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 ...

  7. (转载)解决切换Fragment时布局重新实例化

    解决切换Fragment时布局重新实例化 作者 instanceof 关注 2015.12.30 17:25* 字数 628 阅读 7616评论 17喜欢 23 关于Fragment 在这简单说一下F ...

  8. 解决 PHPExcel 长数字串显示为科学计数[转]

    解决 PHPExcel 长数字串显示为科学计数 在excel中如果在一个默认的格中输入或复制超长数字字符串,它会显示为科学计算法,例如身份证号码,解决方法是把表格设置文本格式或在输入前加一个单引号. ...

  9. 织梦DedeCMS判断简略标题为空时则显示完整标题

    使用织梦DedeCMS系统程序开发网站中,我们会遇到很多因网页版面设计限定的宽度,使文章标题需要进行字数限制,通常做法是在a标签中加入一个title属性,让鼠标放上去的时候显示完整标题.但是标题被剪裁 ...

随机推荐

  1. FPGA基础之逻辑单元(LE or LC)的基本结构

    原帖地址: https://blog.csdn.net/a8039974/article/details/51706906/ 逻辑单元在FPGA器件内部,是完成用户逻辑的最小单元.逻辑单元在ALTER ...

  2. 网络编程之 keepalive(zz)

    link1: http://tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/ link2: http://dev.csdn.net/article/849 ...

  3. java-Freemarker TemplateLoader实现模版

    TemplateLoader的实现 作为一个模板文件加载的抽象,自然不能限制模板来自何方,在FreeMarker中由几个主要的实现类来体现,这些TemplateLoader是可以独立使用的,Webap ...

  4. iOS https请求 NSURLSessionDataTask

    // //  YKSHttpsRequest.m //  YKShareSdkDemo // //  Created by qingyun on 22/05/2017. //  Copyright © ...

  5. Javascript 解读与思想

    Javascript 解读与思想 解读:对底层类库功能的理解 思想:对程序架构的部署思维

  6. Docker 版本

    1. Docker 版本 长话短说:现在Docker改为基于YY.MM的版本(像Ubuntu),用户可以选择Stable(发布较慢)或者Edge(发布较快)版本. Docker Engine改为Doc ...

  7. What’s new for Spark SQL in Apache Spark 1.3(中英双语)

    文章标题 What’s new for Spark SQL in Apache Spark 1.3 作者介绍 Michael Armbrust 文章正文 The Apache Spark 1.3 re ...

  8. CentOS 7.5 安装KVM虚拟机(Windows)

    一.KVM环境搭建1.检测系统是否支持cat /proc/cpuinfo | egrep 'vmx|svm' KVM是基于x86虚拟化扩展(Intel VT 或者 AMD-V)技术的虚拟机软件,所以查 ...

  9. 【OCR技术系列之八】端到端不定长文本识别CRNN代码实现

    CRNN是OCR领域非常经典且被广泛使用的识别算法,其理论基础可以参考我上一篇文章,本文将着重讲解CRNN代码实现过程以及识别效果. 数据处理 利用图像处理技术我们手工大批量生成文字图像,一共360万 ...

  10. Linux零基础入门第五课

    文件的基本操作(下) 文件属性 file命令 语法 >$ file file0 [file1 file2 ...] file命令用于确认文件的类型. 在Linux下,通常并不会严格按照文件扩展名 ...