【转载】解决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属性,让鼠标放上去的时候显示完整标题.但是标题被剪裁 ...
随机推荐
- 开源MSSQL Express Profile 文件
https://files.cnblogs.com/files/mqingqing123/ExpressProfile.rar
- webpack Import 动态文件
其实React Import scss 是非常简单的,比如一般写法import './PromotionPage.scss';,今天遇到一个样式需要覆盖,那么修改后的代码变成了: import './ ...
- C# MemoryCache GCHandle
MemoryCache在项目中用了很久,感觉比较简单,以前也看过里面的源代码,主要借用MemoryCacheStore来完成数据的存储,里面是线程安全的,MemoryCacheStore借用Hasht ...
- GBK转UTF8
shell 脚本自动GBK转UTF8 for i in `find . -name "*.java"`; do iconv -f gbk -t utf-8 $i > $i.n ...
- 树莓派raspberry pi配置
(1)国际化语言 树莓派初装系统之后,首次启动会出现“raspi-config”工具,如下图:(若不是初次启动,在命令模式下,请输入 sudo raspi-config 命令,即可调出此界面.若在图形 ...
- 微信小程序tab切换,可滑动切换,导航栏跟随滚动实现
简介 看到今日头条小程序页面可以滑动切换,而且tab导航条也会跟着滚动,点击tab导航,页面滑动,切导航栏也会跟着滚动,就想着要怎么实现这个功能 像商城类商品类目如果做成左右滑动切换类目用户体验应该会 ...
- 【Linux】Centos下安装ffmpeg
一.准备工作 1.系统环境:CentOS release 6.9 (Final) 2.安装依赖包 yum install -y autoconf automake cmake freetype-dev ...
- centos7磁盘挂载及取消
磁盘挂载查看已经挂载磁盘数 cat /proc/scsi/scsi | grep HostHost: scsi1 Channel: 00 Id: 00 Lun: 00Host: scsi2 Chann ...
- linux epoll学习
#include <sys/time.h> /* For portability */ #include <sys/select.h> int select(int nfds, ...
- 开源文件服务器file-service介绍
file-service 一个基于ASP.NET Core的可伸缩.通用的文件服务器. 通常后端项目可能会有头像.图片.音频.视频等上传/下载需求,这些需求都可以抽象为文件服务. 功能特点 支持Lin ...