前言: asp.net在提供我們豐富的內(nèi)置控件方便我們開發(fā)的同時,一些格式化的東西也限制了我們靈活的要求。在DataGrid控件中,我們遇到的一個非常典型的問題就是如何把我們不想顯示的列根據(jù)需要隨時隱藏掉。 解決方案: 我們不能隱藏在DataGrid里自動生成列的主要的一點原因是:DataGrid里的column不能被DataGrid的屬性DataGridColumn增加。 基于以上原因,我們可以提出兩種不同的方案來解決這個問題。 方案一: 根據(jù)頁面請求的事件來隱藏列: 代碼: <%@ Page Language="VB" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> <html> <script runat="server"> Sub Page_Load(Sender As Object, E As EventArgs) Dim myConnection As SqlConnection = new _ SqlConnection("Data Source=(local)\NetSDK; Trusted_Connection=Yes;_ Initial Catalog=pubs") Dim myCommand As SqlCommand = New SqlCommand("Select * From_ Publishers",myConnection)
myConnection.Open() myDataGrid.DataSource = myCommand.ExecuteReader_ (CommandBehavior.CloseConnection) myDataGrid.DataBind() End Sub Sub HideShow_Click(Sender As Object, E As EventArgs) If myDataGrid.Columns(0).Visible = False Then myDataGrid.Columns(0).Visible = True Else myDataGrid.Columns(0).Visible = False End If End Sub </script> <body> <form runat="server"> <asp:DataGrid id="myDataGrid" Width="25%" AutoGenerateColumns="false" runat="server"> <Columns> <asp:TemplateColumn HeaderText="Publisher's ID"> <ItemTemplate> <span><%# Container.DataItem("pub_id") %></span> </ItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="Publisher's Name"> <ItemTemplate> <span><%# Container.DataItem("pub_name") %></span> </ItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="City"> <ItemTemplate> <span><%# Container.DataItem("city") %></span> </ItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="State"> <ItemTemplate> <span><%# Container.DataItem("state") %></span> </ItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="Country"> <ItemTemplate> <span><%# Container.DataItem("country") %></span> </ItemTemplate> </asp:TemplateColumn> </Columns> </asp:DataGrid> <asp:Button id="HideShow" Text="Hide/Show" OnClick="HideShow_Click" runat="server" /> </form> </body> </html> 程序執(zhí)行執(zhí)行演示: Show:
(圖show) Hide
(圖hide) 方案二:
方案二實際上是一的變通,我就簡單的介紹一下。在一中我們通過button的OnClick事件來判斷是Show還是Hide,那么我們也可以通過聯(lián)接獲取參數(shù)的值來做判斷。 代碼: <%@ Page Language="VB"%> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> <html> <script runat="server"> Sub Page_Load(Sender As Object, E As EventArgs) Dim myConnection As SqlConnection = new _ SqlConnection("Data Source=(local)\NetSDK; Trusted_Connection=Yes;_ Initial Catalog=pubs") Dim myCommand As SqlCommand = New SqlCommand("Select * From Publishers",_ myConnection)
myConnection.Open() myDataGrid.DataSource = myCommand.ExecuteReader_(CommandBehavior.CloseConnection) myDataGrid.DataBind() If Request.QueryString("Security") = "Admin" Then myDataGrid.Columns(0).Visible = False End If End Sub </script> <body> <form runat="server"> <asp:DataGrid id="myDataGrid" AutoGenerateColumns="false" runat="server"> <Columns> <asp:TemplateColumn HeaderText="Publisher's ID"> <ItemTemplate> <span><%# Container.DataItem("pub_id") %></span> </ItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="Publisher's Name"> <ItemTemplate> <span><%# Container.DataItem("pub_name") %></span> </ItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="City"> <ItemTemplate> <span><%# Container.DataItem("city") %></span> </ItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="State"> <ItemTemplate> <span><%# Container.DataItem("state") %></span> </ItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="Country"> <ItemTemplate> <span><%# Container.DataItem("country") %></span> </ItemTemplate> </asp:TemplateColumn> </Columns> </asp:DataGrid> </form> </body> </html> 程序執(zhí)行演示: 1.Security參數(shù)的值:Nothing
(圖:hidde) Security參數(shù):Admin
(圖:Show)
|