扩展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 ...
随机推荐
- python3网络编程之socketserver
本节主要是讲解python3网络编程之socketserver,在上一节中我们讲到了socket.由于socket无法支持多用户和多并发,于是就有了socket server. socket serv ...
- hdu 6059---Kanade's trio(字典树)
题目链接 Problem Description Give you an array A[1..n],you need to calculate how many tuples (i,j,k) sat ...
- 查看ubuntu的内核版本&获取roo…
1.查看内核版本命令 [root@AY130616190837708391Z ~]# cd .. (管理员权限) [root@AY130616190837708391Z /]# cd proc [ro ...
- mybatis 详解(三)------入门实例(基于注解)
1.创建MySQL数据库:mybatisDemo和表:user 详情参考:mybatis 详解(二)------入门实例(基于XML) 一致 2.建立一个Java工程,并导入相应的jar包,具体目录如 ...
- git分支管理之Bug分支
软件开发中,bug就像家常便饭一样.有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除. 当你接到一个修复一 ...
- knockoutjs模板实现树形结构列表
数据结构 /*数据*/ var ko_vue_data=[ { name: "总能耗", number:"0", energyone: 14410, energ ...
- 生成二维码的js以及调用打印插件
插件: qrcode.js 插件下载网址:http://code.ciaoca.com/javascript/qrcode/ 用法实例: <script type="text/java ...
- LinkQueue(链队列)
关于Node.h,请参考LinkStack #include"Node.h" template<typename ElemType> class LinkQueue { ...
- Python解析PDF三法
span{line-height:2em} --> 最近做调研想知道一些NZ当地的旅游信息,于是在NZ留学的友人自高奋勇地帮我去各个加油站拿了一堆旅游小册子,扫描了发给我. 但是他扫描出的高清图 ...
- js实现轮播图动画
在网页浏览中,可以看到轮播图是无处不在的,这是一个前端工程最基本的技巧.首先看看几个网页的呈现的效果. QQ音乐: 网易云音乐: 天猫: 接下来将从简到难总结几种实现轮播图的方法. 1.样式一:鼠标滑 ...