当前位置:首页 > 网络编程 > WEB编程 > ASP.net >  用嵌套的DataGrid实现主从式表的显示

 用嵌套的DataGrid实现主从式表的显示

点击次数:21 次 发布日期:2008-11-26 11:15:25 作者:源代码网
源代码网推荐      经过半年的asp.net学习和开发的实践,随着学会的东西在不断增加的同时也发现不会的东西也在不断地增加,尽管如此,在这段时间里还是或多或少地积累了一些个人的开发经验,最重要的是学会如何更加充分地利用已经知道的知识和技术来完成自己想要达到的目的。
源代码网推荐  
源代码网推荐   如何实现主从式表的显示问题是我开发中所遇到的一个难题,在这个问题中还涉及到在DataGrid中使用复选框控件和定制DataGrid的单元格的问题。下面就这三个问题逐一进行解决。
源代码网推荐  
源代码网推荐   一、在DataGrid中使用复选框控件
源代码网推荐  
源代码网推荐   这个问题的解决有几种方式,我选用了一种既适用于复选框控件又适用于单选框控件的方式。具体实现如下:
源代码网推荐  
源代码网推荐   为DataGrid创建一个ButtonColumn,或者创建一个模板列,在模板列中放入一个Label控件(注:这些控件的选择并不是唯一的)。然后在DataGrid的ItemDataBound事件过程中生成复选框控件(单选框控件)的HTML标记并设置其相应的属性,就可以实现在DataGrid表中进行多选(单选)的功能。生成复选框控件的HTML标记的语句如下:
源代码网推荐  
源代码网推荐   1 If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.Item Then
源代码网推荐  
源代码网推荐   2 Dim r As LinkButton
源代码网推荐  
源代码网推荐   3 r = e.Item.Cells(2).Controls(0)
源代码网推荐  
源代码网推荐   4 r.Text = "<input type=checkbox name="chbRights" value="" & strID & "" >"
源代码网推荐  
源代码网推荐   5 End If
源代码网推荐  
源代码网推荐   这种情况下,checkbox或radio不能自动进行状态的管理,需要手动维持状态,也就是在表单提交到服务器返回浏览器显示的时候能够显示出提交前所进行的最后选择。这一步的实现并不难,先通过SelectResult = Request.Form("chbRights")语句获得表单提交的选择结果,然后将上面的第4句作如下修改:
源代码网推荐  
源代码网推荐   if SelectResult.IndexOf(strID) <> -1 then
源代码网推荐  
源代码网推荐   r.Text = "<input type=checkbox name="chbRights" value="" & strID & "" checked>"
源代码网推荐  
源代码网推荐   else
源代码网推荐  
源代码网推荐   r.Text = "<input type=checkbox name="chbRights" value="" & strID & "" >"
源代码网推荐  
源代码网推荐   end if
源代码网推荐  
源代码网推荐   二、定制DataGrid的单元格
源代码网推荐  
源代码网推荐   假设要完成的表格样式如下:
源代码网推荐  
源代码网推荐  Header1
源代码网推荐  
源代码网推荐  
源代码网推荐  Header2
源代码网推荐  
源代码网推荐  
源代码网推荐  Header3
源代码网推荐  
源代码网推荐  
源代码网推荐  Header4
源代码网推荐  
源代码网推荐  Item1
源代码网推荐  
源代码网推荐  
源代码网推荐  DataGrid1
源代码网推荐  
源代码网推荐  Item2
源代码网推荐  
源代码网推荐  
源代码网推荐  DataGrid2
源代码网推荐  
源代码网推荐   表1
源代码网推荐  
源代码网推荐  其中Header有4列,每个Item只有2列。
源代码网推荐  
源代码网推荐   这个是在DataGrid的ItemCreated事件过程中来具体实现的。首先创建Header,对于以上表格而言,它的Header缺省的是和Item一样有2列。那么我们要先清除Header中缺省的单元格控件,然后逐一创建Header1、Header2、Header3、Header4四个单元格控件。具体实现如下:
源代码网推荐  
源代码网推荐  1、 利用语句e.Item.ItemType = ListItemType.Header来找到DataGrid的Header;
源代码网推荐  
源代码网推荐  2、 清除Header中的缺省控件;
源代码网推荐  
源代码网推荐   e.Item.Controls.Clear()
源代码网推荐  
源代码网推荐  3、 创建新的单元格控件,
源代码网推荐  
源代码网推荐   dim cell0 as new TableCell
源代码网推荐  
源代码网推荐   cell0.Controls.Add(new LiteralControl("Header1"))
源代码网推荐  
源代码网推荐   e.Item.Controls.Add(cell0)
源代码网推荐  
源代码网推荐   并可以通过以下语句对单元格的风格、背景、宽度、高度、位置等属性进行设置:
源代码网推荐  
源代码网推荐   cell0.MergeStyle(dgAllRights.HeaderStyle)
源代码网推荐  
源代码网推荐   cell0.BackColor = Color.FromName("#8faae7")
源代码网推荐  
源代码网推荐   cell0.Width = Unit.Percentage(10)
源代码网推荐  
源代码网推荐   cell0.Height = Unit.Pixel(intHeight)
源代码网推荐  
源代码网推荐   cell0.HorizontalAlign = HorizontalAlign.Center
源代码网推荐  
源代码网推荐  4、 重复第3步,创建其它三个单元格控件。
源代码网推荐  
源代码网推荐   到此为止,Header就创建好了,但是由于Header的改变,导致Item的列出现了变化,由2列变成了4列,所以我们需要进行Item的单元格合并操作,具体语句如下:
源代码网推荐  
源代码网推荐   "设置Item第二列的ColumnSpan合并单元格属性
源代码网推荐  
源代码网推荐   If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.Item Then
源代码网推荐  
源代码网推荐   dim cell as TableCell
源代码网推荐  
源代码网推荐   cell = e.Item.Cells(1)
源代码网推荐  
源代码网推荐   cell.ColumnSpan = 3
源代码网推荐  
源代码网推荐   end if
源代码网推荐  
源代码网推荐   三、DataGrid嵌套显示主从式表
源代码网推荐  
源代码网推荐   经过以上两个问题的解决,尤其是第二个问题的解决,可以说现在这个问题的实现就非常容易了。
源代码网推荐  
源代码网推荐   首先为主DataGrid创建一个模板列,在该模板列中放置从DataGrid控件,从DataGrid控件的ShowHeader属性设为false,复选框控件的使用由从DataGrid控件来实现,而主DataGrid的表格形式要根据上述的第二个问题来定制。所以主DataGrid和从DataGrid控件的数据源也可以是不同的。然后根据自己的需要进行样式的设定,以下是最终形成的结果:
源代码网推荐  
源代码网推荐   当然,除了这种方法以外,一定还有其它的方法可以实现,关键是多尝试,在不断尝试的过程中一定会有一些意想不到的收获。  做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
源代码网推荐


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华