Discuz!NT
欢迎 游客 , 注册 | 登录 | 会员 | 界面 | 简洁版本 | 在线 | 帮助
商都网教育宝典宝库

发表新主题 回复该主题
本主题被查看840次, 共2个帖子, 1页, 当前为第1页     选择页数: 1      跳转到第   上一主题   下一主题
标题: 自动填充固定行数的 GridView
张小峰
超级版主
UID: 14
来自:
精华: 4
积分: 313
帖子: 285
注册: 2007-8-23 10:27:00
状态: 离线
威望: 8.00
金钱: 75.55 元
只看楼主 2007-09-06 11:42
自动填充固定行数的 GridView
在有些开发实践中,有时候为了页面美观的需要,需要将GridView填充成固定行数的表格,下面这个方法实现了这种填充的功能。此方法可以处理自动产生列和模版列。注意:由于时间关系,没有实现对完全空白数据的填充,呵呵,如果需要,可以自己添加哈:)!

#1  
张小峰
超级版主
UID: 14
来自:
精华: 4
积分: 313
帖子: 285
注册: 2007-8-23 10:27:00
状态: 离线
威望: 8.00
金钱: 75.55 元
只看楼主 2007-09-06 11:42
回复:自动填充固定行数的 GridView
C#

<%@ 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>
#2  
发表新主题 回复该主题
本主题被查看840次, 共2个帖子, 1页, 当前为第1页     选择页数: 1      跳转到第







现在的时间是 2008-10-11 02:47:45

版权所有 商都网教育宝典
         Powered by Discuz!NT 1.0.6666    Copyright © 2001-2008 Comsenz Inc.
Processed in 0 seconds