zoukankan      html  css  js  c++  java
  • 扩展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 == 1 && gridview.Rows[0].Cells[0].Text == EmptyText)
            {
                int columnCount = gridview.Columns.Count;
                InitGridView(gridview, columnCount);
            }
        }
    
        private static void InitGridView(GridView gridview, int columnCount)
        {
            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 GridViewBind(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 = gridview.Columns.Count;
                InitGridView(gridview, columnCount);
            }
            else
            {
                //数据不为空直接绑定
                gridview.DataSource = table;
                gridview.DataBind();
            }
    
            //重新绑定取消选择
            gridview.SelectedIndex = -1;
        }
    
        public static void GridViewBind<T>(GridView gridview, List<T> list)
        {
            //记录为空重新构造Gridview
            if (list.Count == 0)
            {
                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 = -1;
        }
    
    }

    调用代码

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

    更简单的办法

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

            this.GridView1.ShowHeaderWhenEmpty = true;
            this.GridView1.EmptyDataText = "没有记录";
  • 相关阅读:
    mongodb.conf配置文件
    mongodb创建普通角色和普通用户
    add unique index 注意事项
    error: src refspec master does not match any
    innodb_data_file_path配置变更引发mysql重启失败
    time_zone参数配置
    主键有无检测
    gdb在线修改mysql变量
    mybatis连接数据库
    mongo登录
  • 原文地址:https://www.cnblogs.com/shya/p/4415709.html
Copyright © 2011-2022 走看看