Gridview在绑定数据时,如果绑定的数据源为空,Gridview就不显示,让人感觉很不舒服。还有,如何能让每页都显示固定的行数,而不是仅仅显示有数据的那些行?
下面是我参考网上的资料及自己修改实现的,效果还不错。
protected void Page_Load(object sender, EventArgs e)
{
int pageSize = gridView.AllowPaging == true ? gridView.PageSize : 20;//默认行数是20行
if (gridView.Rows.Count == 0)
{
// 当DataSource为空时绑定之,否则Gridview控件就不能显示
DataTable dt = new DataTable();
DataRow dr;
for (int i = 0; i < gridView.Columns.Count; i++)
{
dt.Columns.Add(new DataColumn(((BoundField)gridView.Columns[i]).DataField, typeof(string)));
dr = dt.NewRow();
dr[i] = " ";
}
dt.Columns.Add(new DataColumn(gridView.DataKeyNames[0], typeof(string)));
//填充Gridview的空白行
for (int j = 0; j < pageSize - gridView.Rows.Count; j++)
{
dr = dt.NewRow();
dt.Rows.Add(dr);
}
gridView.DataSource = dt;
gridView.DataBind();
}
else
{
// 如果Datasource不为空,直接填充空白行
for (int i = 0; i < pageSize - gridView.Rows.Count; i++)
{
int rowIndex = gridView.Rows.Count + i + 1;
GridViewRow row = new GridViewRow(rowIndex, -1, DataControlRowType.EmptyDataRow, DataControlRowState.Normal);
for (int j = 0; j < gridView.Columns.Count; j++)
{
TableCell cell = new TableCell();
cell.Text = " ";
row.Controls.Add(cell);
row.Attributes.Add("BorderColor ", "#d2d2d2");
}
gridView.Controls[0].Controls.AddAt(rowIndex, row);
}
}
}
当然,else里的语句可以写在RowdataBind方法里:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Footer) //这句必须写,否则空白行会出现在不正确的位置
{
//当Gridview行不足n时,填充空白行
for (int i = 0; i < pageSize - GridView1.Rows.Count; i++)
{
int rowIndex = GridView1.Rows.Count + i + 1;
GridViewRow row = new GridViewRow(rowIndex, -1, DataControlRowType.EmptyDataRow, DataControlRowState.Normal);
for (int j = 0; j < GridView1.Columns.Count; j++)
{
TableCell cell = new TableCell();
cell.Text = " ";
row.Controls.Add(cell);
row.Attributes.Add("BorderColor ", "#d2d2d2");
}
GridView1.Controls[0].Controls.AddAt(rowIndex, row);
}
}
}