日期:2014-05-18  浏览次数:20505 次

在自动绑定数据源如何让Gridview在没有数据的时候显示表头
下面是引用的一段代码:
原地址:http://www.evget.com/zh-CN/Info/ReadInfo.aspx?id=7233

4.2增加空行来显示 GridView 的结构
我们知道只要 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");

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

以上是手动绑定数据源时才会实现这种效果,

但是在自动绑定数据源如何让Gridview在没有数据的时候显示类似表头呢



------解决方案--------------------
我觉得最实际最简单的办法就是在

<EmptyDataTemplate></EmptyDataTemplate>作文章


<EmptyDataTemplate>
<div >
你的表头内容
</div> 
</EmptyDataTemplate>


方法很简单:就是先运行有数据的gridview,然后查看编译KO的页面的“查看源文件” 把里面生成的table的样式抠出来,放到<EmptyDataTemplate></EmptyDataTemplate>就可以了。

------解决方案--------------------
探讨
我觉得最实际最简单的办法就是在

<EmptyDataTemplate> </EmptyDataTemplate>作文章


<EmptyDataTemplate>
<div >
你的表头内容
</div>
</EmptyDataTemplate>


方法很简单:就是先运行有数据的gridview,然后查看编译KO的页面的“查看源文件” 把里面生成的table的样式抠出来,放到 <EmptyDataTemplate> </EmptyDataTemplate>就可以了。

------解决方案--------------------
数据源背后的实现方法仍然可以返回一行空记录,然后可以写例如
C# code
protected void GridViewEmptyDataTest_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        DataRowView d = (DataRowView )e.Row.DataItem;
        if (d[temple_id]==null || d[temple_id]==string.Empty)
            e.Row.Visible = false;
    }
}