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>
...全文
487 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
claymore1114 2008-10-31
  • 打赏
  • 举报
回复
就这样分页,就可以达到效果吧!
lee576 2008-10-31
  • 打赏
  • 举报
回复
有点奇怪的需求
andrewsway 2008-10-31
  • 打赏
  • 举报
回复
判断本页的行数,添加空行

protected void GrvCode_RowCreated(object sender, GridViewRowEventArgs e)
{
int num = 0;
num = GrvCode.Rows.Count;
if (e.Row.RowType == DataControlRowType.Footer)
{
int left = GrvCode.PageSize - num;
int numCol = GrvCode.Rows[0].Cells.Count;
for(int i=0;i<left;i++)
{
GridViewRow row =
new GridViewRow(-1,-1,DataControlRowType.EmptyDataRow,DataControlRowState.Normal);
for (int j = 0; j < numCol; j++)
{
TableCell cell = new TableCell();
cell.Text = " ";
row.Cells.Add(cell);
}
GrvCode.Controls[0].Controls.AddAt(num+1+i,row);
}
}
}

代码需要整理下再用

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧