我是用sqldatasource与GridView绑定,然后实现了标题列排序和分页等功能.现在,我想给GridView多加了一列..这列与数据库完全无关,就是为每行生成3位数的随机数,现在,我现在实现..这列,点击标题列,可以为这行排序..能够做到呢?

解决方案 »

  1.   

    希望排序,最佳方式是将这列 Add 进入 SqlDataSource 返回的 DataTable 而不是 gridView 
      

  2.   

            DataSet ds =……;
            DataView dv = ds.Tables[0].DefaultView;        dv.Sort = "数据库中的字段 desc/acs";//在你的GridView 的列上用按钮控制 这个Sort
                   GridView gv = new GridView();
            gv.DataSource = dv;
            gv.DataBind();
    或者说参考: PowerTable  (在网上下载)
      

  3.   

    这是一个网上的填充固定行数的GridView例子看看:
    <%@ 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 = "&nbsp;";
              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>
      

  4.   

    1.
    据我所了解,想完成你目前的功能,只有通过手动的调用  SqlDataSourceID1.Select  方法来获取 DataView 进而获取DataTable并添加列,
    再手动绑定 GridView1.DataSource 上,
    并且手动实现 Sorting 事件关于如何绑定大概如下 protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                DataView dv = (SqlDataSource1.Select(DataSourceSelectArguments.Empty) as DataView);
                DataTable dt = dv.Table;
                dt.Columns.Add("Random_Number");
                Random r = new Random(512);
                foreach (DataRow row in dt.Rows)
                {
                    row["Seed"] = r.Next();
                }
                GridView1.DataSource = dt;
                GridView1.DataBind();
            }
        }
    2.
    假如你原来的代码是通过直接设置 GridView1.DataSourceID = SqlDataSourceID1
    那么你回发现用 1 的方法工作量就大了,
    相对来说,你可能更喜欢直接再 Database Select 的时候加入 那一列随机数,比如 SQL Server 你可使用 RAND 函数生成随机数,具体请参考联机文档SELECT *, RAND() Random_Number FROM MyTable