搜索文章:

首页  |  Java技术  |  Asp.net  |  Asp编程  |  VC/C++  |  Delphi  |  VB编程

如何给DataGrid添加双题头分类显示

我在写powerdatagrid想到要提供一个查询(有关powerdatagrid的详细信息参考csdn论坛中的讨论帖,源码可以在www.foxhis.com/powermjtest/sharepowerdatagrid.rar下载),该查询的构想是这样的:我的这个控件可以通过指定一个sql语句来显示该语句的内容(其他的功能不叙述了,这不是重点),那么我可以封装一组ui到这个控件里面来实现查询的功能,问题出来了,这个查询通常情况下应该在datagrid的上面也就是查询结果的上面,我要怎么才能保留原来的题头同时再添加一个题头呢(双题头)?

    问题出来了,改如何解决呢?想了好多办法都不行,如果要将header重画,那么还要处理排序是前后台的交互问题,那么只能再保留原来header不动的基础上添加新的header。无意中发现在分页的时候可以有几种分页显示的方法,在分页面板里面有一个选现可以选择分页的位置,可以选择上下型,在选择这个类型的时候datagrid在原来的header上面又多了一行,我们今天就利用这一行来完成我们的任务,今天我们不产生查询的ui而是产生一个分类的题头,我们使用测试数据库northwind中的employees来显示数据,首先我们要做的是绑定数据绑定代码如下:

  sqlconnection con = new sqlconnection("server=localhost;database=northwind;uid=sa;pwd=;");
         sqldataadapter da = new sqldataadapter("select lastname+ +firstname as name, birthdate, country, title, hiredate from employees",con);
         datatable dt = new datatable();
         da.fill(dt);
         this.datagrid1.datasource = dt;
         this.datagrid1.databind();
  }

    接着我们在itemcreated里面添加适当的代码来完成我们的任务,在powerdatagrid该事件处理函数里面已经添加了创建一个自定义分页的ui!如果你在powerdatagrid里面添加需要判断两个(上下)pager的位置,我们可以使用一个全局变量来判断。

    定义一个全局变量 private int m_createpagetimes = 0;
    然后我们为该事件处理函数添加如下代码:

  private int m_createpagetimes  = 0;
  private void datagrid1_itemcreated(object sender, system.web.ui.webcontrols.datagriditemeventargs e) {
         listitemtype elemtype = e.item.itemtype;
         if (elemtype == listitemtype.pager) {
            if (m_createpagetimes == 0) {
               tablecell cellperson = (tablecell) e.item.controls[0];
               cellperson.controls.clear();

cellperson.backcolor = color.navy;
               cellperson.forecolor = color.yellow;
               cellperson.columnspan = 3;
               cellperson.horizontalalign = horizontalalign.center;
               cellperson.controls.add(new literalcontrol("个人信息"));
 
               tablecell celljob = new tablecell();
               celljob.backcolor = color.navy;
               celljob.forecolor = color.yellow;
               celljob.columnspan = 2;
               celljob.horizontalalign = horizontalalign.center;
               celljob.controls.add(new literalcontrol("工作信息"));
               e.item.controls.add(celljob);
               m_createpagetimes  ++;
            }else if(m_createpagetimes ==1){
               // create custom pager ui
            }
         }

    最后是datagrid的html部分的代码如下:
  <asp:datagrid id="datagrid1" runat="server" allowpaging="true" autogeneratecolumns="false" width="100%"
     pagesize="2">
     <columns>
      <asp:boundcolumn datafield="name" headertext="姓名"></asp:boundcolumn>
      <asp:boundcolumn datafield="birthdate" headertext="生日"></asp:boundcolumn>
      <asp:boundcolumn datafield="country" headertext="国家"></asp:boundcolumn>
      <asp:boundcolumn datafield="title" headertext="头衔"></asp:boundcolumn>
      <asp:boundcolumn datafield="hiredate" headertext="雇佣日期"></asp:boundcolumn>
     </columns>
     <pagerstyle position="topandbottom" mode="numericpages"></pagerstyle>
    </asp:datagrid>

  运行效果如下所示:

()

相关文章:
© 2006   www.java-asp.net