如何让Gridview在没有数据的时候显示表头[没有使用SqlDataSource控件时]
原文发布时间为:2008-08-03 —— 来源于本人的百度文章 [由搬家工具导入]
要看全文请点击http://blog.csdn.net/windok2004/archive/2007/10/28/1852554.aspx
我们知道只要GridView绑定的DataTable有一行记录,GridView就会显示表头,所以当DataTable为空时
我们增加一个空行从而显示表头。
我们把代码改成如下所示:
DataTable dt = new DataTable();
dt.Columns.Add("temple_id");
dt.Columns.Add("temple_name");
dt.Columns.Add("location");
dt.Columns.Add("build_date");
if (dt.Rows.Count == 0)
{
dt.Rows.Add(dt.NewRow());
}
this.GridViewEmptyDataTest.DataSource = dt;
this.GridViewEmptyDataTest.DataBind();
在每次绑定前判断,如果为空就增加一空行,这样绑定的结果如下图所示:
可以看得表头已经可以显示了,但是显示的空行没有任何数据也让人费解,可不可以增加一下提示信息呢
?
4
.
3
增加空记录提示
我们在数据绑定后增加一些代码对GridView进行一下处理,让显示结果更友好。在
this.GridViewEmptyDataTest.DataBind();后面增加代码如下所示:
int columnCount = dt.Columns.Count;
GridViewEmptyDataTest.Rows[0].Cells.Clear();
GridViewEmptyDataTest.Rows[0].Cells.Add(new TableCell());
GridViewEmptyDataTest.Rows[0].Cells[0].ColumnSpan = columnCount;
GridViewEmptyDataTest.Rows[0].Cells[0].Text = "没有记录";
GridViewEmptyDataTest.Rows[0].Cells[0].Style.Add("text-align", "center");
改良后的显示结果如下图所示:
看来显示结果已经达到了我们的要求,但是当页面上有其他按钮操作导致页面PostBack时,页面再次显示
确没有了提示信息变成如下图所示的样子:
这并不是我们想要的。
4
.
4
防止
PostBack
时页面显示变化
为了防止显示改变我们在Page_Load事件里添加如下代码,从而重新绑定GridView:
if (IsPostBack)
{
//如果数据为空则重新构造Gridview
if (GridViewEmptyDataTest.Rows.Count == 1 && GridViewEmptyDataTest.Rows
[0].Cells[0].Text == "没有记录")
{
int columnCount = GridViewEmptyDataTest.Columns.Count;
GridViewEmptyDataTest.Rows[0].Cells.Clear();
GridViewEmptyDataTest.Rows[0].Cells.Add(new TableCell());
GridViewEmptyDataTest.Rows[0].Cells[0].ColumnSpan = columnCount;
GridViewEmptyDataTest.Rows[0].Cells[0].Text = "没有记录";
GridViewEmptyDataTest.Rows[0].Cells[0].Style.Add("text-align", "center");
}
}
这下我们的控件终于可以按我们的要求显示了,但是为了代码的重用,当一个项目里有多个GridView时,
避免充分些相同的代码,我们需要把代码封装成类,从而让所有的GridView数据绑定时都可以轻易地实现
我们的要求。
类的封装代码如下所示:
using System.Data;
using System.Web.UI.WebControls;
/// <summary>
/// Gridview绑定的数据记录为空时显示Gridview的表头,并显示没有记录的提示
/// </summary>
public class GridviewControl
{
//当Gridview数据为空时显示的信息
private static string EmptyText = "没有记录";
public GridviewControl()
{
}
/// <summary>
/// 防止PostBack后Gridview不能显示
/// </summary>
/// <param name="gridview"></param>
public static void ResetGridView(GridView gridview)
{
//如果数据为空则重新构造Gridview
if (gridview.Rows.Count == 1 && gridview.Rows[0].Cells[0].Text == EmptyText)
{
int columnCount = gridview.Columns.Count;
gridview.Rows[0].Cells.Clear();
gridview.Rows[0].Cells.Add(new TableCell());
gridview.Rows[0].Cells[0].ColumnSpan = columnCount;
gridview.Rows[0].Cells[0].Text = EmptyText;
gridview.Rows[0].Cells[0].Style.Add("text-align", "center");
}
}
/// <summary>
/// 绑定数据到GridView,当表格数据为空时显示表头
/// </summary>
/// <param name="gridview"></param>
/// <param name="table"></param>
public static void GridViewDataBind(GridView gridview, DataTable table)
{
//记录为空重新构造Gridview
if (table.Rows.Count == 0)
{
table = table.Clone();
table.Rows.Add(table.NewRow());
gridview.DataSource = table;
gridview.DataBind();
int columnCount = table.Columns.Count;
gridview.Rows[0].Cells.Clear();
gridview.Rows[0].Cells.Add(new TableCell());
gridview.Rows[0].Cells[0].ColumnSpan = columnCount;
gridview.Rows[0].Cells[0].Text = EmptyText;
gridview.Rows[0].Cells[0].Style.Add("text-align", "center");
}
else
{
//数据不为空直接绑定
gridview.DataSource = table;
gridview.DataBind();
}
//重新绑定取消选择
gridview.SelectedIndex = -1;
}
}
你可以把这个类编译成DLL,让各个地方调用。
4.6使用示例
这个类的使用很简单,就是在每次进行数据绑定是调用GridViewDataBind,这个函数的第一个参数是要绑
定数据的GridView第二个参数是包含数据字段列的DataTable,可能为空可能不空,如果数据不空,函数
则自动进行正常绑定,否则显示“没有记录”的提示。
上面的按钮事件的代码可以改成如下所示:
DataTable dt = new DataTable();
dt.Columns.Add("temple_id");
dt.Columns.Add("temple_name");
dt.Columns.Add("location");
dt.Columns.Add("build_date");
GridviewControl.GridViewDataBind(this.GridViewEmptyDataTest, dt);
最后在Page_Load中对本页面所有GridView调用ResetGridView函数,如下所示:
if (IsPostBack)
{
GridviewControl.ResetGridView(this.GridViewEmptyDataTest);
}
在此提供一个网站测试源码,可以按照2中所说的数据表建立test数据库,并在表中加入相应数据进行测
试,记得把连接串改一下哦。
测试源码:http://dl2.csdn.net/down4/20071008/08205401208.rar
如何让Gridview在没有数据的时候显示表头[没有使用SqlDataSource控件时]的更多相关文章
- 如何让Gridview在没有数据的时候显示表头(asp.net)
原文:如何让Gridview在没有数据的时候显示表头(asp.net) 1.前言 当对GridView控件进行数据绑定时,如果绑定的记录为空,网页上就不显示GridView,造成页面部分空白,页面布局 ...
- 无记录时显示gridview表头,并增加一行显示“没有记录”【绑定SqlDataSource控件时】
原文发布时间为:2008-08-04 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...
- 五种情况下会刷新控件状态(刷新所有子FWinControls的显示)——从DFM读取数据时、新增加子控件时、重新创建当前控件的句柄时、设置父控件时、显示状态被改变时
五种情况下会刷新控件状态(刷新控件状态才能刷新所有子FWinControls的显示): 在TWinControls.PaintControls中,对所有FWinControls只是重绘了边框,而没有整 ...
- [WPF] 让第一个数据验证出错(Validation.HasError)的控件自动获得焦点
1. 需求 在上一篇文章 <在 ViewModel 中让数据验证出错(Validation.HasError)的控件获得焦点>中介绍了如何让 Validation.HasError 的控件 ...
- Gridview中运用CommandField 删除控件时注意点
我在gridview1 <编辑列>里面添加了一个<CommandField 删除>的控件,之后在gridview1的事件<RowDeleting>事件下 写了一段删 ...
- 关于gridview改变行内容事件需要点击别的行或控件才能执行
一般的datagridview控件: this.dgvAssetList.CurrentCell = null;//取消datagridview行的编辑状态 Dev gridcontrol控件 Gr ...
- Qt编写数据可视化大屏界面电子看板11-自定义控件
一.前言 说到自定义控件,我是感觉特别熟悉的几个字,本人亲自原创的自定义控件超过110个,都是来自各个行业的具体应用真实需求,而不是凭空捏造的,当然有几个小控件也有点凑数的嫌疑,在编写整个数据可视化大 ...
- [WPF] 在 ViewModel 中让数据验证出错(Validation.HasError)的控件获得焦点
1. 需求 在 MVVM 中 ViewModel 和 View 之间的交互通常都是靠 Icommand 和 INotifyPropertyChanged,不过有时候还会需要从 MVVM 中控制 Vie ...
- WPF / Win Form:多线程去修改或访问UI线程数据的方法( winform 跨线程访问UI控件 )
WPF:谈谈各种多线程去修改或访问UI线程数据的方法http://www.cnblogs.com/mgen/archive/2012/03/10/2389509.html 子线程非法访问UI线程的数据 ...
随机推荐
- 数据库-SQL语法:GROUP BY与HAVING
注意:select 后的字段,必须要么包含在group by中,要么包含在having 后的聚合函数里. 1. GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合使用. grou ...
- WINDOWS-基础:WINDOWS常用API
1.窗口信息 //MS 为我们提供了打开特定桌面和枚举桌面窗口的函数. hDesk=OpenDesktop(lpszDesktop,,FALSE,DESKTOP_ENUMERATE); //打开我们默 ...
- MAC环境Android SDK环境变量配置
一.材料 1.Mac设备1台: 2.下载并更新android SDK:示列中sdk存放路径为/Users/gametest/Library/Android/sdk 二.操作步骤 1.启动Termina ...
- mac系统下android studio创建手机模拟器
打开android studio,点击右上角的模拟器图标,打开“Android Virtual Device Manager” 窗口,如下图 点击“Create Virtual Device”,在 ...
- Js图片缩放代码 鼠标滚轮放大缩小 图片向右旋转
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- mybatis 批量操作增删改查
在介绍批量操作之前,首先先介绍一个语法:foreach.可以说是,foreach是整个批量操作的灵魂. 属性 描述 item 循环体中的具体对象. 支持属性的点路径访问,如item.age,item. ...
- mycat中间件安装与使用
前提: 安装JDK版本在7.0及其以上 1.下载: 下载地址在:http://dl.mycat.io/ 选择1.6-release版本下载 2.安装: 直接解压即可: tar -zxf Mycat-s ...
- Perl学习三:运算符
运算符: 1.operand operator expression statement2.算术运算符 + - * / ** % -字符串参加运算必须转化为整数,若不能转化认为是0. 2.算术比较 & ...
- Python GUI界面开发环境配置:Pycharm+PyQt5
通过DoS命令行执行如下命令,可能需要管理员权限. 检查Python版本:python 更新pip版本:python -m pip install --upgrade pip 安装PyQt5: pip ...
- (转)在Xcode 7上直接使用Clang Address Sanitizer
原文地址: http://www.cocoachina.com/ios/20150730/12830.html WWDC 2015上,除了Swift 2.0外,还有一个令人激动的消息:可以直接在Xco ...