【整理】C#中GridView隐藏指定列的方法

试了好几种方法,总算成功了。


(1)在GridView的标签处设置OnRowCreated="GridView1_RowCreated" ;

(2)在RowCreated事件中书写如下代码

   void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
     {

             //根据所需条件判断是否可视
             e.Row.Cells[0].Visible = false; //如果想使第1列不可见,则将它的可见性设为false
     }


============================================================================

试了其他方法,都不顺利,细节处讲得不明白或是提示错误(比如:莫名其妙出现【不包含“GridView1”的定义】),记录下供以后参考。


方法1:

autogeneratecolumns属性---表示列的自定义产生
在cs文件中多加一行代码,其思路如下:
(1)设置一个css类: 
     <style> 
     .hidden{display:none;} 
     </style>
(2)随后在GridView的列编辑对话框中,对需要进行隐藏的列进行设置,分别设置FootStyle,HeaderStyle,ItemStyle的CssClass属性为“hidden”
Ok,这样我们就实现了隐藏列的目的,同时又能保证对其进行数据绑定。搜索

隐藏列的值
在RowCreated事件中书写如下代码
   void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
     {
         e.Row.Cells[0].Visible = true;   //如果想使第1列不可见,则将它的可见性设为false
        //可以根据需要设置更多的列
     }
     因为在RowCreated事件(隐藏)在绑定时候发生,所以这样就即能将数据绑定到列上,又隐藏了该列.所
以可以访问到隐藏列的值
   dt.Columns[0].ColumnMapping = MappingType.Hidden; //隐藏

--------为gridview控件里的“删除”列添加一个确认对话框----------------------
在删除按钮的那一列属性里面,把DeleteText属性设为
可以时img标签
<div id="de" οnclick="JavaScript:return confirm('确定删除吗?')">删除</div>

方法2

Public   void myTestFunction()
{
   string conString="....";//省略
     string sqlquery="...";//省略
    SqlConnection con = new SqlConnection(conString);
         SqlDataAdapter da = new SqlDataAdapter(sqlquery, con);
         DataSet ds = new DataSet();
         da.Fill(ds);
         ds.Tables[0].Columns[0].ColumnMapping = MappingType.Hidden;
         GridView1.DataSouce = ds.Tables[0];
         GridView1.DataBind() ;
}


方法3:

一开始解决这个问题的时候,查了google,发现都不是我想要的,在 GridViewColumn中,它有个属性Width,如果设置为0,就没有显示出来,其实这个是虚假的,你可以把它再界面上拉长,因此不是我想要的。


后来在网上查到说是用GridView.Columns[columns].Visible = false;但是GridViewColumn.Columns[columns]是没有Visible属性的,因此这个方法对我来说也是不行的。于是我就想到了用x:Name的方法,这样来做,

<GridView x:Name="gvGroups">

<GridViewColumn  x:Name="hideitem" />

</GridView>

在代码里面用gvGroups.Columns.Remove(hideitem);把它去掉,就不显示了,

如果想显示的话,直接gvGroups.Columns.Add(hideitem);不过是把它放在最后的一列去了。

这样算是解决了隐藏列的问题。


方法4:

protected void Page_Load(object sender, EventArgs e)
    {
        //这里可以根据自己的判断来隐藏某列
        this.GridView1.Columns[0].Visible = false;  //把第一列隐藏
}


这个方法尝试了,很奇怪,出现以下问题:“_Default”不包含“GridView1”的定义,并且找不到可接受类型为“_Default”的第一个参数的扩展方法“GridView1”(是否缺少 using 指令或程序集引用?)。明明在aspx文件里已经定义过。

ASP.NET实现Gridview隐藏/显示源码 介绍: 这篇文章演示如果让用户有显示/隐藏他们需要的GridView的功能,这是非常有用的,因为在GridView的所有是每个的用户都需要的.用户想根据自己的需求看到想要的.而是显示一个巨大的gridview,霸占了整个屏幕,而是一个整洁的Gridview,而且它有所有你需要的.对于页面的打印这也是一个非常有用的技术,因为用户可以灵活地选择GridView打印。 背景: RowCreated 和ItemDataBound 事件允许你用多种方式注入HTML, CSS,和JavaScript 来增强GridView 控件的功能。 文章将会演示两种显示和隐藏GridView方法,一种是客户端的方法,另外一种是服务段的方法. 在客户段显示和隐藏GridView 大部分代码是在GridView的RowCreated事件生成客户端的功能的。当GridView的Header行被创建后,一个带负号的HyperLink被插入每个Header行的单元格中用来隐藏。 这个hyperlink通过它的onclick事件调用一个HideCol的Javascript方法,CSS类用来增加负号的大小,当每个数据行被创建的时候,一个Id将会被添加到每行中用来让Javascript区分每一行. 代码 protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) { GridView gridView = (GridView)sender; StringBuilder sb = new StringBuilder(); // For the header row add a link to each header // cell which can call the HideCol javascript method if (e.Row.RowType == DataControlRowType.Header) { // Loop through each cell of the row for (int columnIndex = 0; columnIndex 0) { Label columnTextLabel = new Label(); columnTextLabel.Text = e.Row.Cells[columnIndex].Text; e.Row.Cells[columnIndex].Controls.Add(columnTextLabel); } } } // Give each row an id if (e.Row.RowType == DataControlRowType.Pager) e.Row.Attributes.Add("id", gridView.ClientID + "_pager"); else e.Row.Attributes.Add("id", gridView.ClientID + "_r" + e.Row.RowIndex.ToString()); } SetupShowHideColumns方法中生成“Show Columns”下拉菜单的HTML,输出在Literal控件上面 。 代码 private void SetupShowHideColumns(GridView gridView, Literal showHideColumnsLiteral) { StringBuilder sb = new StringBuilder(); sb.Append(""); sb.Append(""); sb.Append("- Show Column -"); showHideColumnsLiteral.Text = sb.ToString(); } 在数据绑定到GridView之后,其余的工作由ShowHideColumns.js中的javascript来完成.当头的hyperlink被点击的时候后,它将会传递GridView的名字,的索引和名给HideCol方法,这个方法能找到这一的每个单元格,每个单元格的将添加display:none样式,用来隐藏这一. 当选择"Show Column"中的选项后,Javascript方法ShowCol将会被调用,它将移除每个单元格的display:none样式,这一将会被再次显示. 在服务端显示/隐藏GridView 服务端的例子将通过RowCreated事件给每个头添加一个负号,这次是使用LinkButton控件.设置CommandName和CommandArgument属性,这样当通过LinkButton引发RowCommand事件时,相关的都可以隐藏。以前隐藏索引存储在一个List中,这些在建立时,将会被隐藏的。 代码 protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) { // For the header row add a link button to each header // cell which can execute a row command if (e.Row.RowType == DataControlRowType.Header) { // Loop through each cell of the header row for (int columnIndex = 0; columnIndex 0) { Label columnTextLabel = new Label(); columnTextLabel.Text = e.Row.Cells[columnIndex].Text; e.Row.Cells[columnIndex].Controls.Add(columnTextLabel); } } } // Hide the column indexes which have been stored in hiddenColumnIndexes foreach(int columnIndex in hiddenColumnIndexes) if (columnIndex 0) { this.GridView1ShowHideColumns.Visible = true; this.GridView1ShowHideColumns.Items.Add(new ListItem("-Show Column-", "-1")); foreach (int i in hiddenColumnIndexes) this.GridView1ShowHideColumns.Items.Add( new ListItem(columnNames[i], i.ToString())); } else { this.GridView1ShowHideColumns.Visible = false; } } 示例项目的例子: 客户端的例子: •C#.NET - Client-side example accessing data stored in session. •C#.NET - Client-side example which includes: MasterPage, UpdatePanel, GridView editing, paging and sorting, accessing data via the SqlDataSource control. •VB.NET - Client-side example accessing data stored in session. 服务端的例子 •C#.NET - Server-side example accessing data stored in session. •C#.NET - Server-side example which includes: MasterPage, UpdatePanel, GridView editing, paging and sorting, accessing data via the SqlDataSource control. •VB.NET - Server-side example accessing data stored in session. 结论: 如果你想让你的用户能够显示和隐藏在ASP.NET GridView,那么这种技术可能是非常有用的。 原文:http://www.codeproject.com/KB/webforms/ShowHideGridviewColumns.aspx 作者:朱祁林 出处:http://zhuqil.cnblogs.com/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值