提出需求

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. Android APP 内部捐赠实现(支付宝&微信)

    Android APP 内部捐赠实现(支付宝&微信) 目前支持 支付宝和 微信. 项目地址:https://github.com/didikee/AndroidDonate https://p ...

  2. CSS随笔1(CSS常用样式)

    样式 属性 大小 font-size(x-large ; xx-small ; 可用数值单位 : PX,PD) 样式 font-style(oblique 偏斜体 : italic 斜体 : norm ...

  3. node.js fs.open 和 fs.write 读取文件和改写文件

    Node.js的文件系统的Api //公共引用 var fs = require('fs'), path = require('path'); 1.读取文件readFile函数 //readFile( ...

  4. ajax-javascript原生-初步入门01(整理)

    -----------------------------------2017.07.21写----------------------------------------- 1.ajax的原名: a ...

  5. VMware NAT端口映射 外网可以访问内网虚拟机

    我想尝试的是利用本机的ip+port来访问虚拟机上的web服务器,因为这样的话,我就能够将我的web服务器部署成为一个能让外网访问的服务器了,首先说下我的环境: 主机:系统win7,ip地址172.1 ...

  6. Python 文件的处理

    简单的读取文件 f.read()  是读取这个文件的所有内容 f.readline()  是读取文件的一行 .write()  会去检查这个文件是否存在,不存在则创建,存在的话,则以覆盖的方式将内容写 ...

  7. Boyer-Moore Majority Vote Algorithm

    介绍算法之前, 我们来看一个场景, 假设您有一个未排序的列表.您想知道列表中是否存在一个数量占列表的总数一半以上的元素, 我们称这样一个列表元素为 Majority 元素.如果有这样一个元素, 求出它 ...

  8. MySQL中索引的基础知识

    本文是关于MySQL中索引的基础知识.主要讲了索引的意义与原理.创建与删除的操作.并未涉及到索引的数据结构.高性能策略等. 一.概述 1.索引的意义:用于提高数据库检索数据的效率,提高数据库性能. 数 ...

  9. 详解.Net 如何上传自己的包到Nuget平台以及如何使用Nuget包管理器

    首先需要一个Nuget账户,可以在官网注册:https://www.nuget.org.已有账户略. 需要一个ApiKeys,登录之后,在我的账户里找到ApiKeys进去; 创建ApiKeys 下载N ...

  10. Oracle B-tree、位图、全文索引三大索引性能比较及优缺点汇总

    引言:大家都知道“效率”是数据库中非常重要的一个指标,如何提高效率大家可能都会想起索引,但索引又这么多种,什么场合应该使用什么索引呢?哪种索引可以提高我们的效率,哪种索引可以让我们的效率大大降低(有时 ...