• 如何让Gridview在没有数据的时候显示表头[没有使用SqlDataSource控件时]


    原文发布时间为:2008-08-03 —— 来源于本人的百度文章 [由搬家工具导入]

    要看全文请点击http://blog.csdn.net/windok2004/archive/2007/10/28/1852554.aspx

    我们知道只要GridView绑定的DataTable有一行记录,GridView就会显示表头,所以当DataTable为空时

    我们增加一个空行从而显示表头。

    我们把代码改成如下所示:

    DataTable dt = new DataTable();

            dt.Columns.Add("temple_id");

            dt.Columns.Add("temple_name");

            dt.Columns.Add("location");

            dt.Columns.Add("build_date");

            if (dt.Rows.Count == 0)

            {

                dt.Rows.Add(dt.NewRow());

            }

            this.GridViewEmptyDataTest.DataSource = dt;

        this.GridViewEmptyDataTest.DataBind();

    在每次绑定前判断,如果为空就增加一空行,这样绑定的结果如下图所示:


    可以看得表头已经可以显示了,但是显示的空行没有任何数据也让人费解,可不可以增加一下提示信息呢

    4

    3
    增加空记录提示
    我们在数据绑定后增加一些代码对GridView进行一下处理,让显示结果更友好。在

    this.GridViewEmptyDataTest.DataBind();后面增加代码如下所示:

    int columnCount = dt.Columns.Count;

            GridViewEmptyDataTest.Rows[0].Cells.Clear();

            GridViewEmptyDataTest.Rows[0].Cells.Add(new TableCell());

            GridViewEmptyDataTest.Rows[0].Cells[0].ColumnSpan = columnCount;

            GridViewEmptyDataTest.Rows[0].Cells[0].Text = "没有记录";

         GridViewEmptyDataTest.Rows[0].Cells[0].Style.Add("text-align", "center");

    改良后的显示结果如下图所示:


    看来显示结果已经达到了我们的要求,但是当页面上有其他按钮操作导致页面PostBack时,页面再次显示

    确没有了提示信息变成如下图所示的样子:


    这并不是我们想要的。

    4

    4
    防止
    PostBack
    时页面显示变化
    为了防止显示改变我们在Page_Load事件里添加如下代码,从而重新绑定GridView:

    if (IsPostBack)

            {

                //如果数据为空则重新构造Gridview

                if (GridViewEmptyDataTest.Rows.Count == 1 && GridViewEmptyDataTest.Rows

    [0].Cells[0].Text == "没有记录")

                {

                    int columnCount = GridViewEmptyDataTest.Columns.Count;

                    GridViewEmptyDataTest.Rows[0].Cells.Clear();

                    GridViewEmptyDataTest.Rows[0].Cells.Add(new TableCell());

                    GridViewEmptyDataTest.Rows[0].Cells[0].ColumnSpan = columnCount;

                    GridViewEmptyDataTest.Rows[0].Cells[0].Text = "没有记录";

                    GridViewEmptyDataTest.Rows[0].Cells[0].Style.Add("text-align", "center");

                }

       }

    这下我们的控件终于可以按我们的要求显示了,但是为了代码的重用,当一个项目里有多个GridView时,

    避免充分些相同的代码,我们需要把代码封装成类,从而让所有的GridView数据绑定时都可以轻易地实现

    我们的要求。


    类的封装代码如下所示:

    using System.Data;

    using System.Web.UI.WebControls;

    /// <summary>

    /// Gridview绑定的数据记录为空时显示Gridview的表头,并显示没有记录的提示

    /// </summary>

    public class GridviewControl

    {

        //当Gridview数据为空时显示的信息

        private static string EmptyText = "没有记录";

         public GridviewControl()

         {

            

         }

        /// <summary>

        /// 防止PostBack后Gridview不能显示

        /// </summary>

        /// <param name="gridview"></param>

        public static void ResetGridView(GridView gridview)

        {

            //如果数据为空则重新构造Gridview

            if (gridview.Rows.Count == 1 && gridview.Rows[0].Cells[0].Text == EmptyText)

            {

                int columnCount = gridview.Columns.Count;

                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 GridViewDataBind(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 = table.Columns.Count;

                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");

            }

            else

            {

                //数据不为空直接绑定

                gridview.DataSource = table;

                gridview.DataBind();

            }

            //重新绑定取消选择

            gridview.SelectedIndex = -1;

        }

    }

    你可以把这个类编译成DLL,让各个地方调用。

    4.6使用示例
    这个类的使用很简单,就是在每次进行数据绑定是调用GridViewDataBind,这个函数的第一个参数是要绑

    定数据的GridView第二个参数是包含数据字段列的DataTable,可能为空可能不空,如果数据不空,函数

    则自动进行正常绑定,否则显示“没有记录”的提示。

    上面的按钮事件的代码可以改成如下所示:

    DataTable dt = new DataTable();

            dt.Columns.Add("temple_id");

            dt.Columns.Add("temple_name");

            dt.Columns.Add("location");

            dt.Columns.Add("build_date");

    GridviewControl.GridViewDataBind(this.GridViewEmptyDataTest, dt);

    最后在Page_Load中对本页面所有GridView调用ResetGridView函数,如下所示:

    if (IsPostBack)

            {

                GridviewControl.ResetGridView(this.GridViewEmptyDataTest);

        }

    在此提供一个网站测试源码,可以按照2中所说的数据表建立test数据库,并在表中加入相应数据进行测

    试,记得把连接串改一下哦。

    测试源码:http://dl2.csdn.net/down4/20071008/08205401208.rar

  • 相关阅读:
    codeforces 713A A. Sonya and Queries(状态压缩)
    2016大连网赛
    hdu-5834 Magic boy Bi Luo with his excited tree(树形dp)
    codeforces gym-101078
    ifrog-1028 Bob and Alice are playing numbers(trie树)
    codeforces 477B B. Dreamoon and Sets(构造)
    codeforces 477A A. Dreamoon and Sums(数学)
    三角形划分区域
    当总统
    Friends number
  • 原文地址:https://www.cnblogs.com/handboy/p/7143806.html
Copyright © 2020-2023  润新知