Gridview所绑定的数据为空时显示表头
4.5封装
类的封装代码如下所示:
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);
}