liangchao

2006年8月14日

利用Repeater解决DataGrid的嵌套显示问题

 一直以来,客户需要在WEB上面显示嵌套的数据页面,如下图所示:

  而我们的项目全部统一采用DataGrid来进行数据的绑定显示.对于这种嵌套数据的显示,我一直头疼.在网上搜了N种方法:采用嵌套DataGrid...手动在数据绑定的时候进行一些额外操作分割单元格.....全部都麻烦得要死.今天总算在CodeProject上面找到一种方便点的方法:采用Repeater来解决这个问题.
    首先,来看下我的DataGrid中列的html代码:

< asp:BoundColumn Visible ="False" DataField ="ID" ></ asp:BoundColumn >
< asp:BoundColumn DataField ="OrganName" HeaderText ="部门名称" ></ asp:BoundColumn >
< asp:TemplateColumn HeaderText ="员工" >
   
< ItemTemplate >
       
< FONT face ="宋体" >
           
< asp:Repeater id ="Repeater1" runat ="server" DataSource ='<%# ((System.Data.DataRowView)Container.DataItem).Row.GetChildRows("parentchild") % > '>
               
< HeaderTemplate >
                   
< table >
               
</ HeaderTemplate >
               
< ItemTemplate >
                   
< tr >
                       
< td > <% # DataBinder. Eval (Container.DataItem, " [\ " EmployeeName \ " ] " ) %> </ td >
                   
</ tr >
               
</ ItemTemplate >
               
< FooterTemplate >
                   
</ table >
               
</ FooterTemplate >
           
</ asp:Repeater ></ FONT >
   
</ ItemTemplate >
</ asp:TemplateColumn >
其中的ID列表示机构的ID,用来和员工信息中的机构ID进行"关联".


再来看关键代码
                DataSet ds =new DataSet();

                DataTable dtOrgan
=new DataTable();
                dtOrgan.Columns.Add(
"ID",typeof(string));
                dtOrgan.Columns.Add(
"OrganName",typeof(string));
                ...
               
/*...往机构表中灌数据...*/
                ds.Tables.Add(dtOrgan);

                DataTable dtEmployee
=new DataTable();
                dtEmployee.Columns.Add(
"OrganID",typeof(string));
                dtEmployee.Columns.Add(
"EmployeeName",typeof(string));
                ...
               
/*...往员工表中灌数据...*/

                ds.Tables.Add(dtEmployee);
                ds.Relations.Add(
"parentchild",ds.Tables[0].Columns["ID"],ds.Tables[1].Columns["OrganID"]);
                dgList.DataSource
= ds.Tables[0].DefaultView;
                dgList.DataBind();

最主要的就是利用了DataSet的Relations的属性,通过属性来将父子表关联起来,然后进行数据的绑定.最后,在WEB上运行出来的效果如下所示:
posted @ 2006-08-14 08:53 BEYOND 阅读(224) | 评论 (0) | 编辑 收藏
 

2006年7月31日

如何提高数据库性能,减少数据库服务器压力瓶颈一两个小方法
树立的观念:一个SQL语句,如果在压力测试时CPU占有率达到100%,此语句肯定存在问题。

    在大多数程序员的心里,一直认为数据库加索引,在查询中使用索引,就可以提高数据库性能。其实这种观点有一点的局限性,如果不好好的利用已经建立好的数据库索引,有时反倒给数据库增加更大的处理压力。现在我们举例说明一下:

    在现有的个人信息管理系统登录处的查询中,有这么一个SQL语句:

     Select StudentInfoID, StudentNumber, StudentName,UnifyExamInfoID,NetSchoolID from StudentInfo

     where StudentCrtificateNumber ='130425831217494' and rtrim(ltrim(StudentNumber)) = 'D0462382001'

     此SQL语句的目的是查找这个考生是否存在,验证登录的效果,就是这么一个简单的SQL语句,在压力测试时,10个用户同时登录,就会造成数据库服务器(2CPU,4G内存,IBM专用服务器)CPU占有率达到100%。而这张表也建立了StudentCrtificateNumber 和 StudentNumber 两个字段的索引, 问题出在哪呢?原因如下:

     (1)在studentinfo表中,建立了一个索引LX_STUDENTINFO,包括了四个字段,顺序为:studycenternumber,studentnumber,studentname,studentcrtificatenumber。

    (2)程序员理解的是,这个索引中包括了这两个字段,那么查询时就应该很快。实际不是。

    大家注意一点,这个LX_STUDENTINFO索引,是四个索引字段,而他们的顺序studycenternumber,studentnumber,studentname,studentcrtificatenumber,在数据库设计中,如果查询采用的第一个字段和第二个字段组合,则该索引有效;如果查询采用第一个、第二个和第三个字段组合,该索引也有效;而如果第一个和第三个,或第四个组合,则该索引是无效的,等同的效果仍是在没有索引的数据库中进行查询。也就是说建立的索引中的字段,在查询使用时,不能隔字段使用。

    另外,索引中涉及到字段的顺序也会影响查询的性能,如果一个索引包含两个字段A1和A2,那么在查询时,一定要严格按索引中这两个字段的顺序设计查询,比如:select * from a where A1='A' and A2='B'。而如果程序员写成了select * from a where A2='B' and A1='A'的话,虽然不影响程序正常使用,但会增加数据库的压力,并且查询效能会降低。

    根据这种思路,重新调整了一下这个表的索引,在这个表中增加了一个新的索引,只包括这两个字段,并且按StudentCrtificateNumber 和StudentNumber先后顺序排序。经过300人同时登录的压力测试,CPU占有率才只占2-3%,证明调整结果有效。

posted @ 2006-07-31 13:48 BEYOND 阅读(1697) | 评论 (0) | 编辑 收藏
 

2006年7月26日

SQL查询优化--索引
     摘要: sql Server 索引优化   聚集索引 , 表中存储的数据按照索引的顺序存储 , 检索效率比普通索引高 , 但对数据新增 / 修改 / 删除的...  阅读全文
posted @ 2006-07-26 17:26 BEYOND 阅读(1307) | 评论 (0) | 编辑 收藏
 
仅列出标题  
 
<2021年4月>
日一二三四五六
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

 导航

  • IT博客
  • 首页
  • 发新随笔
  • 发新文章
  • 联系
  • 聚合
  • 管理

 统计

  • 随笔: 3
  • 文章: 0
  • 评论: 0
  • 引用: 0

常用链接

  • 我的随笔
  • 我的评论
  • 我参与的随笔

留言簿(1)

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔分类

  • .net资料(1) (rss)
  • SQL资料(2) (rss)

随笔档案

  • 2006年8月 (1)
  • 2006年7月 (2)

相册

  • MyPic

搜索

  •  

最新评论

阅读排行榜

  • 1. 如何提高数据库性能,减少数据库服务器压力瓶颈一两个小方法(1697)
  • 2. SQL查询优化--索引(1307)
  • 3. 利用Repeater解决DataGrid的嵌套显示问题(224)

评论排行榜

  • 1. SQL查询优化--索引(0)
  • 2. 如何提高数据库性能,减少数据库服务器压力瓶颈一两个小方法(0)
  • 3. 利用Repeater解决DataGrid的嵌套显示问题(0)

Powered by: 博客园
模板提供:沪江博客
Copyright ©2021 BEYOND