2011-04-27 87 views
0

当我将数据源绑定到GridView时,如果它的数据源中没有记录,它将不会显示任何内容。如何使用GridView asp.net中的列显示“找不到记录”?

如果我在GridView中将数据设置为EmptyDataText属性,它将只显示该文本。

,但我想显示我的数据源的列,并且第一行必须在我的GridView中显示“找不到记录”。我该怎么办?

+0

你需要插入一个虚拟的记录在您的数据源,或者使用了EmptyDataTemplate定制 – V4Vendetta 2011-04-27 06:13:31

+0

@ V4Vendetta那好 – 2011-04-27 06:16:06

+0

检查此[链接](http://stackoverflow.com/questions/354369/gridview-show -headers-on-empty-data-source)4.0有一个ShowHeaderWhenEmpty属性(我想这就是你想要的) – V4Vendetta 2011-04-27 06:30:59

回答

2

当一个数据表是空的,创建一个集columspan到后一个新的行和绑定细胞计数。

 DataTable dtTable = GetData(); 

     if (dtTable.Rows.Count > 0) 
     { 
      gvDetails.DataSource = dtTable; 
      gvDetails.DataBind(); 
     } 
     else 
     { 
      dtTable.Rows.Add(dtTable.NewRow()); 
      gvDetails.DataSource = dtTable; 
      gvDetails.DataBind(); 
      int TotalColumns = gvDetails.Rows[0].Cells.Count; 
      gvDetails.Rows[0].Cells.Clear(); 
      gvDetails.Rows[0].Cells.Add(new TableCell()); 
      gvDetails.Rows[0].Cells[0].ColumnSpan = TotalColumns; 
      gvDetails.Rows[0].Cells[0].Text = "No Record Found"; 
     } 
+0

删除这一行是因为它会产生错误的设计行为.gvDetails.Rows [0] .Cells [0] .ColumnSpan = TotalColumns; – 2011-04-27 07:57:28

+0

否则“找不到记录”将仅出现在第一列中。 – varadarajan 2011-04-27 08:09:46

0

您可以创建一个扩展方法,它会查看是否没有记录,然后添加一行,表示“找不到记录”。比如像:

grid.ValidateRecords();

,或者您可以在数据源级别添加扩展方法。比如像:

public static class Extensions 
{ 
    public static DataSet HasData(this DataSet ds) 
    { 
     if (ds == null || ds.Tables.Count < 1 || ds.Tables[0].Rows.Count < 1)//add more validation, if dataset is not null? 
     { 
      DataTable dt = new DataTable("Table1"); 
      dt.Columns.Add("Col1"); 
      DataRow dr = dt.NewRow(); 
      dr["Col1"] = "No records found"; 
      dt.Rows.Add(dr); 
      ds.Tables.Add(dt); 
     } 
     return ds; 
    } 

} 

用法:

gridView1.DataSource = myDataSet.HasData(); 

输出: enter image description here

+1

OP已经在使用那个..请仔细阅读下面的问题 – V4Vendetta 2011-04-27 06:17:03