请教如何隐藏DataGrid列?

yubin_ilc 2006-09-08 10:20:16
请教:
我想将DataGrid表格指定列隐藏,但用DataGrid1.Columns(0).Visible = False语句时提示“<索引超出范围。必须为非负值并小于集合大小。参数名: index >”错误!代码如下:

Dim Adp As New OleDbDataAdapter("select * from zw_user", Con)
Dim Ds As New DataSet
Adp.Fill(Ds, "Data_zw_user")
DataGrid1.DataSource = Ds.Tables("Data_zw_user").DefaultView
Ds.Tables("data_zw_user").DefaultView.Sort = Sort
DataGrid1.DataBind()

DataGrid1.Columns(0).Visible = False

谢谢!
...全文
329 点赞 收藏 18
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
helendeer 2007-03-22
LOOV266(冬天过去了春天来了夏天不远了,秋天又回来了,死循环)

Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound
If e.Item.ItemType = ListItemType.Header Or e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
e.Item.Cells(0).Visible = False
End If
End Sub
**************

这个是正确的,俺问题的照这个解决了

回复
Karl_He 2007-03-13
DataGrid1.Columns(0).Visible = False 这句话只能写到DataGrid1_ItemDataBound事件中
方法参照 LOOV266(冬天过去了春天来了夏天不远了,秋天又回来了,死循环)

原因:

DataGrid1.Columns 只有在控件绑定结束后才能获得次属性,否则就会找不到对象,对于隐藏列的设置,只能放在ItemDataBound方法中完成
回复
blackant2 2007-03-13
鞭尸的人那么多
不在乎再多我一个
回复
ou108 2007-03-13
來晚了
DataGrid1.Columns(0).Visible = False
DataGrid1.Columns(1).Visible = False
DataGrid1.Columns(2).Visible = False
DataGrid1.Columns(3).Visible = False
DataGrid1.Columns(4).Visible = False
回复
shrekye 2007-03-13
主  题: 请教如何隐藏DataGrid列?
作  者: yubin_ilc () Blog
等  级:
信 誉 值: 100
所属社区: .NET技术 ASP.NET
问题点数: 50
回复次数: 13
发表时间: 2006-9-8 10:20:17
-----------------------------------
注意2006-9-8!!!!!!!!!!!!
不要顶这些老帖子了
回复
echi0711 2007-03-13
说的很全了
回复
best8625 2007-03-13
友情帮顶下
回复
21aspnet 2007-03-13
显示隐藏DataGrid控件中的第一列


using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Configuration;
namespace CommonFunction
{
/// <summary>
/// DataGridHideColumn 的摘要说明。
/// </summary>
public class DataGridHideColumn : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button btnSet;
protected System.Web.UI.WebControls.Label Message;
protected System.Web.UI.WebControls.DataGrid dgHideColumn;

private void Page_Load(object sender, System.EventArgs e)
{

//页面初试化时进行数据绑定
if(!IsPostBack)
DataGridDataBind();
}
//进行数据绑定
private void DataGridDataBind()
{
//定义数据连接对象,其中数据库连接字符串是在Web.Config文件中定义的
SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionSqlServer"].ToString());
//创建数据适配器对象
SqlDataAdapter da = new SqlDataAdapter("select LastName,FirstName,BirthDate,City from Employees",conn);
//创建DataSet对象
DataSet ds = new DataSet();
try
{
//填充数据集
da.Fill(ds,"testTable");
//进行数据绑定
dgHideColumn.DataSource = ds.Tables["testTable"];
dgHideColumn.DataBind();
}
catch(Exception error)
{
Response.Write(error.ToString());
}
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.btnSet.Click += new System.EventHandler(this.btnSet_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void btnSet_Click(object sender, System.EventArgs e)
{
dgHideColumn.Columns[0].Visible = !dgHideColumn.Columns[0].Visible;
Message.Text = "DataGrid中第一列现在的状态是:" + dgHideColumn.Columns[0].Visible.ToString();
}

}
}
回复
LOOV266 2007-03-13
Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound
If e.Item.ItemType = ListItemType.Header Or e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
e.Item.Cells(0).Visible = False
End If
End Sub

我的已经解决了啊,就如上面一样的啊
回复
Eddie005 2006-09-08
怎么乱说的人总是这么多...

1)请注意这是vb.net的语法,不是C#; vb.net访问数组元素用小括号没有问题

2)如果DataGrid设置AutoGenerateColumns属性设置为true,并且没有添加任何绑定列等,那么DataGrid1.Columns.Count永远是0
回复
Eddie005 2006-09-08
其实,如果你一开始就知道哪些列需要显示,哪些列不显示的话,应该将DataGrid的AutoGenerateColumns属性设置为false,并通过“属性生成器”添加需要的绑定列:

<asp:DataGrid id="DataGrid1" runat="server" Width="408px" Height="184px" AllowPaging="True" PageSize="5" AutoGenerateColumns="False">
<Columns>
<asp:BoundColumn DataField="field1"></asp:BoundColumn>
<asp:BoundColumn DataField="field3"></asp:BoundColumn>
</Columns>
</asp:DataGrid>
回复
joan1027 2006-09-08
拜托,应该是DataGrid1.Columns[0].Visible = False;好不好!
回复
robertlvqing 2006-09-08
if(DataGrid1.Columns.Count>0)DataGrid1.Columns(0).Visible = False
回复
Eddie005 2006-09-08
Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound
If e.Item.ItemType = ListItemType.Header Or e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
e.Item.Cells(0).Visible = False
End If
End Sub
回复
etilm 2006-09-08
DataGrid1.Columns[0].Visible = False
回复
Eddie005 2006-09-08
这应该是一个运行时自动生成列的DataGrid了,

可以在ItemDataBound事件中处理
回复
sunshushou 2006-09-08
webform?winform?
回复
etilm 2006-09-08
if(e.Item.ItemType==ListItemType.AlternatingItem||e.Item.ItemType==ListItemType.Item)
{
e.Item.Cells[1].Visible=false;
}
回复
相关推荐
发帖
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
帖子事件
创建了帖子
2006-09-08 10:20
社区公告
暂无公告