如何在DataGrid控件中隐藏列

datagrid|datagrid控件

如何在DataGrid控件中隐藏列
前言:
    asp.net在提供我们丰富的内置控件方便我们开发的同时,一些格式化的东西也限制了我们灵活的要求。在DataGrid控件中,我们遇到的一个非常典型的问题就是如何把我们不想显示的列根据需要随时隐藏掉。
解决方案:
    我们不能隐藏在DataGrid里自动生成列的主要的一点原因是:DataGrid里的column不能被DataGrid的属性DataGridColumn增加。
    基于以上原因,我们可以提出两种不同的方案来解决这个问题。
    方案一:
    根据页面请求的事件来隐藏列:
代码:
<%@ 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>
程序执行执行演示:
Show:

                                (图show)
Hide

                               (图hide)
   方案二:
   
   方案二实际上是一的变通,我就简单的介绍一下。在一中我们通过button的OnClick事件来判断是Show还是Hide,那么我们也可以通过联接获取参数的值来做判断。
代码:
<%@ 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>
程序执行演示:
1.Security参数的值:Nothing

                                  (图:hidde)
Security参数:Admin

                                  (图:Show)   
                             
翻译:CNet   转自:http://www.aspalliance.com/    全文完

时间: 2024-07-31 11:49:41

如何在DataGrid控件中隐藏列的相关文章

如何在DataGrid控件中实现自定义分页_自学过程

如何在DataGrid控件中实现自定义分页      在一般情况下,DataGrid控件每次实现翻页操作时,都会将数据源中的数据重新调用一次,当数据中 数据很多时,这样做就会很浪费系统资源和降低程序的执行效率.这时候我们一般通过自定义分页来解 决这个问题.     DataGrid控件的AllowCustomPaging属性用来获取或设置DataGrid控件是否允许自定义分 页;VirtualItemCoun属性用来获取或设置在使用自定义分页时DataGrid中实际的项数.要实现自定义分 页,必

ASP.NET 2.0中GridView控件的隐藏列的问题

Asp.net 2.0 GridView隐藏列visible="false" 后你就无法取得这列的值了, 而用datagrid就没有这个问题, MS这个混蛋老是改变游戏规则, 幸好我聪明, 在百度上搜到了别人的解决方法, 然后加入了自己的方法, 才解决问题: protected void GVList_RowDataBound(object sender, GridViewRowEventArgs e) { //隐藏不必要的列 if ((e.Row.RowType == DataCon

在DataGrid控件中获取数据项中各列的数据内容

datagrid|datagrid控件|数据 在DataGrid控件中,一般只是在绑定列或模版列中进行数据显示. 在编写DataGrid控件(控件名为dg1)的事件的处理方法时,通常希望获取数据项某列的数据. 除了SelectedInexChanged事件外,其它事件的处理方法的参数e都是DataGridCommandEventArgs类的实例.通过e实例,可以获取引发事件的数据项中数据. 1.获取绑定列中的数据 1)处于非编辑状态.或者数据项处于编辑状态但该绑定列只读   e.Item.Cel

datagrid/GridView 控件中的列,添加编辑(删除,更新) 如果直接删除数据库中的记录,更新数据库的记录

问题描述 datagrid/GridView控件中的列,添加编辑(删除,更新)如果直接删除数据库中的记录,更新数据库的记录报错数据源,没有设置deletecommang对象 解决方案 解决方案二:是写在GridView1_RowDeleting事件里面???解决方案三:要不就是在模版列里面CommandName="Delete"如下<ItemTemplate><asp:LinkButtonID="LinkButton3"runat="se

在DataGrid控件中编辑数据项

要想在DataGrid控件中编辑数据,请使用"按钮列"中的"编辑.更新.取消"列,这些都可以在DataGrid控件的属性生成器中设置 当为DataGrid控件(以控件名为dg1为例)中加入了"编辑.更新.取消"列后,在页面的dg1控件中会多出一列,该列的每一项都是文本为"编辑"的LinkButton/Button. 如果单击了某一行的"编辑"按钮,则该行处于编辑模式,"编辑"按钮被替换为

DataGrid控件中内容不换行的处理

datagrid|datagrid控件 DataGrid控件中内容不换行的处理 // ...// 定义DataGridprotected DataGrid myDataGrid;// ... // ...// 响应DataGrid的ItemCreated事件myDataGrid.ItemCreated += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid_ItemCreated);// ... // ...

实现DataGridView控件中CheckBox列的使用实例

 最近做WindowsForms程序,使用DataGridView控件时,加了一列做选择用,发现CheckBox不能选中.搜索后,要实现DataGridView的CellContentClick事件,将代码贴一下 代码如下: /// <summary>         /// 实现DataGridView控件中CheckBox列的使用         /// </summary>         /// <param name="sender">&l

vs2008-如何在ocx控件中调用另一个已经封装完整的ocx控件?

问题描述 如何在ocx控件中调用另一个已经封装完整的ocx控件? ocx开发初学者一名. 手上有一个完整的ocx控件A,我希望在另一个控件B中插入这个A.在调用控件B的界面中可以看到A的界面.就像用一个exe调用ocx一样实现是否可行? vs2008环境.

flex3-flex4 如何在MenuBar控件中的根节点加上icon图标

问题描述 flex4 如何在MenuBar控件中的根节点加上icon图标 能否实现上图的样子.新手求指教~~