请教如何隐藏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

谢谢!
...全文
352 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
友情帮顶下
深度Java 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;
}

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧