提出需求

GridView控件在开发后台管理的时候非常方便快速,但是要实现没有数据时显示“没有数据”,并居中,是一件比较麻烦的事情,这里在一个公开的方法里实现了绑定List<T>和DataTable时,如果没有记录显示“没有数据”和表头。

显示效果

实现代码

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Web;
using System.Web.UI.WebControls; /// <summary>
/// ControlExtension 的摘要说明
/// </summary>
public class ControlExtension
{
public ControlExtension()
{
//
// TODO: 在此处添加构造函数逻辑
//
} private static string EmptyText = "没有记录"; /// <summary>
/// 防止PostBack后Gridview不能显示
/// </summary>
/// <param name="gridview"></param>
private static void ResetGridView(GridView gridview)
{
//如果数据为空则重新构造Gridview
if (gridview.Rows.Count == && gridview.Rows[].Cells[].Text == EmptyText)
{
int columnCount = gridview.Columns.Count;
InitGridView(gridview, columnCount);
}
} private static void InitGridView(GridView gridview, int columnCount)
{
gridview.Rows[].Cells.Clear();
gridview.Rows[].Cells.Add(new TableCell());
gridview.Rows[].Cells[].ColumnSpan = columnCount;
gridview.Rows[].Cells[].Text = EmptyText;
gridview.Rows[].Cells[].Style.Add("text-align", "center");
} /// <summary>
/// 绑定数据到GridView,当表格数据为空时显示表头
/// </summary>
/// <param name="gridview"></param>
/// <param name="table"></param>
public static void GridViewBind(GridView gridview, DataTable table)
{
//记录为空重新构造Gridview
if (table.Rows.Count == )
{
table = table.Clone();
table.Rows.Add(table.NewRow());
gridview.DataSource = table;
gridview.DataBind();
int columnCount = gridview.Columns.Count;
InitGridView(gridview, columnCount);
}
else
{
//数据不为空直接绑定
gridview.DataSource = table;
gridview.DataBind();
} //重新绑定取消选择
gridview.SelectedIndex = -;
} public static void GridViewBind<T>(GridView gridview, List<T> list)
{
//记录为空重新构造Gridview
if (list.Count == )
{
DataTable table = new DataTable();
DataRow dr = table.NewRow();
Type type = typeof(T);
foreach (PropertyInfo p in type.GetProperties())
{ DataColumn dc = new DataColumn(p.Name);
table.Columns.Add(dc);
}
table.Rows.Add(table.NewRow());
gridview.DataSource = table;
gridview.DataBind();
int columnCount = gridview.Columns.Count;
InitGridView(gridview, columnCount);
}
else
{
//数据不为空直接绑定
gridview.DataSource = list;
gridview.DataBind();
} //重新绑定取消选择
gridview.SelectedIndex = -;
} }

调用代码

ControlExtension.GridViewBind<Apis>(this.GridView1, list);

更简单的办法

其实有更简单的方法,刚刚发现,代码如下,应该要Net4.0才支持。

        this.GridView1.ShowHeaderWhenEmpty = true;
this.GridView1.EmptyDataText = "没有记录";

扩展GridView实现无数据处理的更多相关文章

  1. 扩展GridView控件——为内容项添加拖放及分组功能

    引言 相信大家对GridView都不陌生,是非常有用的控件,用于平铺有序的显示多个内容项.打开任何WinRT应用或者是微软合作商的网站,都会在APP中发现GridView的使用.“Tiles”提供了一 ...

  2. asp.net学习之扩展GridView

    原文:asp.net学习之扩展GridView 本节讨论如何从现有的控件,进而扩展成强大的,更定制的GridView控件 1.扩展BoundField 默认的BoundField不能显示多文本,文字一 ...

  3. 扩展gridview轻松实现冻结行和列(增强型)

    上一篇说过,还可以扩展gridview的分页功能以及实现导出结果为EXCEL/PDF的功能.实现好后应该封装起来,以方便后续的项目简单使用.至于要如何实现,我想不必过多的说了.下面是显示结果和主要的代 ...

  4. 扩展gridview轻松实现冻结行和列

    在实际的项目中,由于项目的需要,数据量比较大,同时显示栏位也比较多,要做gridview里显示完整,并做到用户体验比较好,这就需要冻结表头和关键列.由于用到的地方比较多,我们可以护展一个gridvie ...

  5. 扩展GridView实现的一个自定义无刷新分页,排序,支持多种数据源的控件TwfGridView

    最近项目View层越来越趋向于无刷新化,特别是数据展示方面,还要对Linq有很好的支持.在WebFrom模式的开发中,GridView是一个功能很强大,很常用的控件,但是他也不是完美的,没有自带的无刷 ...

  6. Leetcode 69. Sqrt(x)及其扩展(有/无精度、二分法、牛顿法)详解

    Leetcode 69. Sqrt(x) Easy https://leetcode.com/problems/sqrtx/ Implement int sqrt(int x). Compute an ...

  7. 使用JMeter测试.Net5.0,.Net6.0框架下无数据处理的并发情况

    1.   安装JMeter及使用 1.1下载JMeter 登录官方网站找到下载链接进行下载:https://jmeter.apache.org/download_jmeter.cgi 1.2配置环境变 ...

  8. [转]Oracle分页之三:利用PagerView来实现无刷新GridView

    本文转自:http://www.cnblogs.com/scy251147/archive/2011/04/16/2018355.html 接上面一节,上面还存在问题就是分页控件使用的仍然是服务器端控 ...

  9. GridView点击空白地方事件扩展

    我们通常在ListView或者GridView响应点击Item事件,但很多时候我们同样也 希望监听到点击空白区域的事件来做更多的处理.本文以GridView为例给出一个实现 的方法,扩展GridVie ...

随机推荐

  1. 【HTML】dl dt dd

    摘要 看到没怎么使用过的html 标签,记录下 定义 dl 类似于 ul ,无任何样式,自定义列表容器, ul 为无序列表容器,ol 为有序列表容器 dt dd 类似于 li ,无任何样式,为帮助实现 ...

  2. [学习笔记] CDQ分治 从感性理解到彻底晕菜

    最近学了一种叫做CDQ分治的东西...用于离线处理一系列操作与查询似乎跑得很快233 CDQ的名称似乎源于金牌选手陈丹琦 概述: 对于一坨操作和询问,分成两半,单独处理左半边和处理左半边对于右半边的影 ...

  3. 13 年的 Bug 调试经验总结(来自蜗牛学院)

    在<Learning From Your Bugs>一文中,我写了关于我是如何追踪我所遇到的一些最有趣的bug. 最近,我回顾了我所有的194个条目,看看有什么经验教训是我可以学习的.下面 ...

  4. Github上比较流行的PHP扩展库项目

    这里列出比较常用的PHP开源扩展库项目: swoole, C扩展实现的PHP异步并行网络通信框架,可以重新定义PHP.过去PHP只能做Web项目,现在有了Swoole.任意服务器端程序都可以用PHP来 ...

  5. Spark No FileSystem for scheme file 解决方法

    在给代码带包成jar后,放到环境中运行出现如下错误: Exception in thread "main" java.io.IOException: No FileSystem f ...

  6. SASS笔记

    前端开发离不开三剑客:html.Javascript.css. html:主要进行网页内容的开发语言: JavaScript: 主要对页面业务逻辑的开发语言: css:主要对网页外观样式进行注解的文本 ...

  7. ABP+AdminLTE+Bootstrap Table权限管理系统一期

       学而时习之,不亦说乎,温顾温知新,可以为师矣. 这也是算是一种学习的方法和态度吧,经常去学习和总结,在博客园看了很多大神的文章,写下一点对于ABP(ABP是“ASP.NET Boilerplat ...

  8. Ubuntu虚拟机可以上网,可以ping网络,但是无法update和install,报连接不上服务器的错误解决方案:

    http://askubuntu.com/questions/711889/err-apt-get-update-on-ubuntu-14-04即使给Ubuntu配置了代理,terminal能ping ...

  9. struts2增删改查---layer---iframe层---通配符---国际化

    在前一篇文章的基础上,修改一部分即可(在此只是简单介绍) struts.xml页面 在原来的基础之上 action的name="*_*"  class="包名.{1}&q ...

  10. 【转】Hdu--4135 Co-prime

    Problem Description Given a number N, you are asked to count the number of integers between A and B ...