asp.net 2.0: GridView如何使每页行数固定?并且添加删除行时也固定行数?
hooku 2008-10-31 10:48:40 问题:
gridview中行数小于pagesize时,以空行填充使行数达到pagesize。
我在网上找到了相关代码,但是在删除行时出现异常。异常出现在
gridview1.controls[0].controls.addat(numcount + 1 + i, row);
这行。
怎样在删除时也能保持行数不变呢?
下面是我找到的代码:
<%@ page language="c#"%>
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en"
"http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<script runat="server">
// 计算数据,完全可以从数据看取得
icollection createdatasourcebyxianhuimeng()
{
system.data.datatable dt = new system.data.datatable();
system.data.datarow dr;
dt.columns.add(new system.data.datacolumn("学生班级", typeof(system.string)));
dt.columns.add(new system.data.datacolumn("学生姓名", typeof(system.string)));
dt.columns.add(new system.data.datacolumn("语文", typeof(system.decimal)));
dt.columns.add(new system.data.datacolumn("数学", typeof(system.decimal)));
dt.columns.add(new system.data.datacolumn("英语", typeof(system.decimal)));
dt.columns.add(new system.data.datacolumn("计算机", typeof(system.decimal)));
for (int i = 0; i < 8; i++)
{
system.random rd = new system.random(environment.tickcount * i); ;
dr = dt.newrow();
dr[0] = "班级" + i.tostring();
dr[1] = "【孟子e章】" + i.tostring();
dr[2] = system.math.round(rd.nextdouble() * 100, 2);
dr[3] = system.math.round(rd.nextdouble() * 100, 2);
dr[4] = system.math.round(rd.nextdouble() * 100, 2);
dr[5] = system.math.round(rd.nextdouble() * 100, 2);
dt.rows.add(dr);
}
system.data.dataview dv = new system.data.dataview(dt);
return dv;
}
// 设置每页显示的行数
int totalrowcount = 12;
// 自动填充的行数
int numcount = 0;
protected void page_load(object sender, eventargs e)
{
if (!page.ispostback)
{
gridview1.datasource = createdatasourcebyxianhuimeng();
gridview1.databind();
}
}
protected void gridview1_rowdatabound(object sender, gridviewroweventargs e)
{
if (e.row.rowtype == datacontrolrowtype.datarow)
{
// 计算自动填充的行数
numcount++;
}
if (e.row.rowtype == datacontrolrowtype.footer)
{
// 计算完毕,在此添加缺少的行
int toleft = totalrowcount - numcount;
int numcols = gridview1.rows[0].cells.count;
for (int i = 0; i < toleft; i++)
{
gridviewrow row = new gridviewrow(-1, -1, datacontrolrowtype.emptydatarow, datacontrolrowstate.normal);
for (int j = 0; j < numcols; j++)
{
tablecell cell = new tablecell();
cell.text = " ";
row.cells.add(cell);
}
gridview1.controls[0].controls.addat(numcount + 1 + i, row);
}
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>自动填充固定行数的 gridview</title>
</head>
<body>
<form id="form1" runat="server">
<asp:gridview id="gridview1" runat="server" onrowdatabound="gridview1_rowdatabound"
font-size="12px" cellpadding="3">
<headerstyle backcolor="#ededed" />
<columns>
<asp:templatefield headertext="模版列">
<itemtemplate>
<%#eval("学生姓名") %>
</itemtemplate>
</asp:templatefield>
</columns>
</asp:gridview>
</form>
</body>
</html>