前言:
asp.net在提供我们丰富的内置控件方便我们开发的同时,一些格式化的东西也限制了我们灵活的要求。在DataGrid控件中,我们遇到的一个非常典型的问题就是如何把我们不想显示的列根据需要随时隐藏掉。
解决方案:
我们不能隐藏在DataGrid里自动生成列的主要的一点原因是:DataGrid里的column不能被DataGrid的属性DataGridColumn增加。
基于以上原因,我们可以提出两种不同的方案来解决这个问题。
方案一:
根据页面请求的事件来隐藏列:
代码:
1@ Page Language="VB"
1@ Import Namespace="System.Data"
1@ Import Namespace="System.Data.SqlClient"
1<html>
2<script runat="server">
3Sub Page_Load(Sender As Object, E As EventArgs)
4Dim myConnection As SqlConnection = new _
5SqlConnection("Data Source=(local)\NetSDK; Trusted_Connection=Yes;_ Initial Catalog=pubs")
6Dim myCommand As SqlCommand = New SqlCommand("Select * From_ Publishers",myConnection)
7
8myConnection.Open()
9myDataGrid.DataSource = myCommand.ExecuteReader_ (CommandBehavior.CloseConnection)
10myDataGrid.DataBind()
11End Sub
12Sub HideShow_Click(Sender As Object, E As EventArgs)
13If myDataGrid.Columns(0).Visible = False Then
14myDataGrid.Columns(0).Visible = True
15Else
16myDataGrid.Columns(0).Visible = False
17End If
18End Sub
19</script>
20<body>
21<form runat="server">
22<asp:datagrid autogeneratecolumns="false" id="myDataGrid" runat="server" width="25%">
23<columns>
24<asp:templatecolumn headertext="Publisher's ID">
25<itemtemplate>
26<span>```
27# Container.DataItem("pub_id")
28```</span>
29</itemtemplate>
30</asp:templatecolumn>
31<asp:templatecolumn headertext="Publisher's Name">
32<itemtemplate>
33<span>```
34# Container.DataItem("pub_name")
35```</span>
36</itemtemplate>
37</asp:templatecolumn>
38<asp:templatecolumn headertext="City">
39<itemtemplate>
40<span>```
41# Container.DataItem("city")
42```</span>
43</itemtemplate>
44</asp:templatecolumn>
45<asp:templatecolumn headertext="State">
46<itemtemplate>
47<span>```
48# Container.DataItem("state")
49```</span>
50</itemtemplate>
51</asp:templatecolumn>
52<asp:templatecolumn headertext="Country">
53<itemtemplate>
54<span>```
55# Container.DataItem("country")
56```</span>
57</itemtemplate>
58</asp:templatecolumn>
59</columns>
60</asp:datagrid>
61<asp:button id="HideShow" onclick="HideShow_Click" runat="server" text="Hide/Show"></asp:button>
62</form>
63</body>
64</html>
程序执行执行演示:
Show:
(图show)
Hide
(图hide)
方案二:
方案二实际上是一的变通,我就简单的介绍一下。在一中我们通过button的OnClick事件来判断是Show还是Hide,那么我们也可以通过联接获取参数的值来做判断。
代码:
1@ Page Language="VB"
1@ Import Namespace="System.Data"
1@ Import Namespace="System.Data.SqlClient"
1<html>
2<script runat="server">
3Sub Page_Load(Sender As Object, E As EventArgs)
4Dim myConnection As SqlConnection = new _
5SqlConnection("Data Source=(local)\NetSDK; Trusted_Connection=Yes;_ Initial Catalog=pubs")
6Dim myCommand As SqlCommand = New SqlCommand("Select * From Publishers",_ myConnection)
7
8myConnection.Open()
9myDataGrid.DataSource = myCommand.ExecuteReader_(CommandBehavior.CloseConnection)
10myDataGrid.DataBind()
11If Request.QueryString("Security") = "Admin" Then
12myDataGrid.Columns(0).Visible = False
13End If
14End Sub
15</script>
16<body>
17<form runat="server">
18<asp:datagrid autogeneratecolumns="false" id="myDataGrid" runat="server">
19<columns>
20<asp:templatecolumn headertext="Publisher's ID">
21<itemtemplate>
22<span>```
23# Container.DataItem("pub_id")
24```</span>
25</itemtemplate>
26</asp:templatecolumn>
27<asp:templatecolumn headertext="Publisher's Name">
28<itemtemplate>
29<span>```
30# Container.DataItem("pub_name")
31```</span>
32</itemtemplate>
33</asp:templatecolumn>
34<asp:templatecolumn headertext="City">
35<itemtemplate>
36<span>```
37# Container.DataItem("city")
38```</span>
39</itemtemplate>
40</asp:templatecolumn>
41<asp:templatecolumn headertext="State">
42<itemtemplate>
43<span>```
44# Container.DataItem("state")
45```</span>
46</itemtemplate>
47</asp:templatecolumn>
48<asp:templatecolumn headertext="Country">
49<itemtemplate>
50<span>```
51# Container.DataItem("country")
52```</span>
53</itemtemplate>
54</asp:templatecolumn>
55</columns>
56</asp:datagrid>
57</form>
58</body>
59</html>
程序执行演示:
1.Security参数的值:Nothing
(图:hidde)
Security参数:Admin
(图:Show)