扩展GridView实现无数据处理
提出需求
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实现无数据处理的更多相关文章
- 扩展GridView控件——为内容项添加拖放及分组功能
引言 相信大家对GridView都不陌生,是非常有用的控件,用于平铺有序的显示多个内容项.打开任何WinRT应用或者是微软合作商的网站,都会在APP中发现GridView的使用.“Tiles”提供了一 ...
- asp.net学习之扩展GridView
原文:asp.net学习之扩展GridView 本节讨论如何从现有的控件,进而扩展成强大的,更定制的GridView控件 1.扩展BoundField 默认的BoundField不能显示多文本,文字一 ...
- 扩展gridview轻松实现冻结行和列(增强型)
上一篇说过,还可以扩展gridview的分页功能以及实现导出结果为EXCEL/PDF的功能.实现好后应该封装起来,以方便后续的项目简单使用.至于要如何实现,我想不必过多的说了.下面是显示结果和主要的代 ...
- 扩展gridview轻松实现冻结行和列
在实际的项目中,由于项目的需要,数据量比较大,同时显示栏位也比较多,要做gridview里显示完整,并做到用户体验比较好,这就需要冻结表头和关键列.由于用到的地方比较多,我们可以护展一个gridvie ...
- 扩展GridView实现的一个自定义无刷新分页,排序,支持多种数据源的控件TwfGridView
最近项目View层越来越趋向于无刷新化,特别是数据展示方面,还要对Linq有很好的支持.在WebFrom模式的开发中,GridView是一个功能很强大,很常用的控件,但是他也不是完美的,没有自带的无刷 ...
- Leetcode 69. Sqrt(x)及其扩展(有/无精度、二分法、牛顿法)详解
Leetcode 69. Sqrt(x) Easy https://leetcode.com/problems/sqrtx/ Implement int sqrt(int x). Compute an ...
- 使用JMeter测试.Net5.0,.Net6.0框架下无数据处理的并发情况
1. 安装JMeter及使用 1.1下载JMeter 登录官方网站找到下载链接进行下载:https://jmeter.apache.org/download_jmeter.cgi 1.2配置环境变 ...
- [转]Oracle分页之三:利用PagerView来实现无刷新GridView
本文转自:http://www.cnblogs.com/scy251147/archive/2011/04/16/2018355.html 接上面一节,上面还存在问题就是分页控件使用的仍然是服务器端控 ...
- GridView点击空白地方事件扩展
我们通常在ListView或者GridView响应点击Item事件,但很多时候我们同样也 希望监听到点击空白区域的事件来做更多的处理.本文以GridView为例给出一个实现 的方法,扩展GridVie ...
随机推荐
- [BZOJ1500][NOI2005]维修数列---解题报告
Portal Gun:[BZOJ1500][NOI2005]维修数列 有一段时间没写博客了,最近在刚数据结构......各种板子背得简直要起飞,题目也是一大堆做不完,这里就挑一道平衡树的题来写写好了 ...
- MongoDB备份和恢复
mongodump备份数据 该命令可以导出所有数据到指定目录中, 也能通过参数指定备份服务器 mongodump -h dbhost -d dbname -o dbdirectory dbhost: ...
- 自定义Git之使用centos搭建git 服务器
Github 公开的项目是免费的,但是如果你不想让其他人看到你的项目就需要收费. 这时我们就需要自己搭建一台Git服务器作为私有仓库使用. 接下来我们将以 Centos 为例搭建 Git 服务器. 1 ...
- java集合框架的讲解
下面要开始java中相关集合框架的学习啦. Are you ready?Let's go~~ 今天要讲解的Java中的集合框架. 1) 首先查看jdk中Collection类的源码后会发现如下内容: ...
- css2--垂直对齐
## CSS2 vertical-align 垂直对齐 - baseline 默认值.基于基线对齐 - middle 位于同一行的非衬线字体小写字母的 1/2 处.不要为父 ...
- spring学习之spring 插件 for eclipse
1) 在公司一直使用固定的eclipse IDE版本3.3 确实太out了. eclipse官方网址:http://download.eclipse.org 奇怪的是eclipse 发布的版本顺序是 ...
- java多线程系列(六)---线程池原理及其使用
线程池 前言:如有不正确的地方,还望指正. 目录 认识cpu.核心与线程 java多线程系列(一)之java多线程技能 java多线程系列(二)之对象变量的并发访问 java多线程系列(三)之等待通知 ...
- NOIP2000提高组 单词接龙
题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...
- 时序分解算法:STL
1. 详解 STL (Seasonal-Trend decomposition procedure based on Loess) [1] 为时序分解中一种常见的算法,将某时刻的数据\(Y_v\)分解 ...
- Spring Data Jpa+SpringMVC+Jquery.pagination.js实现分页
本博客介绍基于Spring Data这款orm框架加上Jquery.pagination插件实现的分页功能. 介绍一下Spring Data框架 spring Data : Spring 的一个子项目 ...