C# 关于Gridview的隐藏列问题
首先声明,我的这个Gridview和普通的不同,所以请复制代码的就不要麻烦了,方法我都尝试完了,不行。我的这个Gridview是动态生成的,并且它位于页面的一个table...
首先声明,我的这个Gridview和普通的不同,所以请复制代码的就不要麻烦了,方法我都尝试完了,不行。
我的这个Gridview是动态生成的,并且它位于页面的一个table里面,我现在要隐藏掉这个Gridview的最后一列,普通的方法都不行,没有效果,请那位老师帮忙想想办法。可以考虑JS
你好 flag5 gvwTask.Columns[6].Visible = false;
会报出异常:索引超出范围。必须为非负值并小于集合大小。这个异常并不是因为我得值是六的原因,这么火他也应该能把5列隐藏把? 但是不行。所以,跟这个无关,我修改了从1到6 都不行,调式发现为null,这是因为我用asp的这个GV ,用laughm的意见就是说GridView中的列是自动生成的,自动生成的列字段不会添加到 Columns 集合中,虽然已经填充,可惜GV里面Columns 集合中依然为空,我捣鼓了很长时间了,一般方法真的都已经尝试遍了,包括你说的,我能理解你的意思,但是在这里却是行不通。另外这是个公司的项目的一个小部分,所以出于保密起见,属不能把代码全部发送。我在尝试一下其他的看看有什么办法没有,苦就苦在事写出来的控件,想设置真的不是那么容易,改拖动的又太麻烦,影响的地方太大
谢谢flag5 ,lagh以及各位 展开
我的这个Gridview是动态生成的,并且它位于页面的一个table里面,我现在要隐藏掉这个Gridview的最后一列,普通的方法都不行,没有效果,请那位老师帮忙想想办法。可以考虑JS
你好 flag5 gvwTask.Columns[6].Visible = false;
会报出异常:索引超出范围。必须为非负值并小于集合大小。这个异常并不是因为我得值是六的原因,这么火他也应该能把5列隐藏把? 但是不行。所以,跟这个无关,我修改了从1到6 都不行,调式发现为null,这是因为我用asp的这个GV ,用laughm的意见就是说GridView中的列是自动生成的,自动生成的列字段不会添加到 Columns 集合中,虽然已经填充,可惜GV里面Columns 集合中依然为空,我捣鼓了很长时间了,一般方法真的都已经尝试遍了,包括你说的,我能理解你的意思,但是在这里却是行不通。另外这是个公司的项目的一个小部分,所以出于保密起见,属不能把代码全部发送。我在尝试一下其他的看看有什么办法没有,苦就苦在事写出来的控件,想设置真的不是那么容易,改拖动的又太麻烦,影响的地方太大
谢谢flag5 ,lagh以及各位 展开
7个回答
展开全部
GridView中的列是自动生成的,自动生成的列字段不会添加到 Columns 集合中,所以gv.Columns[5].Visible = false是不行的,只修改它的数据源了及把它Bind的DataTable的第6列删除就行了。
根据你上面的内容,我做了一个测试程序。你在CS文件中粘贴上我写的代码,看一下。
protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("User_ID", typeof(int));
dt.Columns.Add("User_Name", typeof(string));
dt.Columns.Add("Address", typeof(string));
dt.Columns.Add("Tel", typeof(string));
dt.Columns.Add("Other", typeof(string));
dt.Columns.Add("Flag", typeof(int));
dt.Columns.Add("AddDate", typeof(string));
for (int i = 0; i < 10; i++)
{
DataRow dr = dt.NewRow();
dr["User_ID"] = (i+1).ToString("000000");
dr["User_Name"] = "Test" + i.ToString("00");
dr["Address"] = "北京海淀区中关村" + i.ToString("00");
dr["Tel"] = "Tel:" + i.ToString("000000");
dr["Other"] = "Other:" + i.ToString("00");
dr["Flag"] = i;
dr["AddDate"] = DateTime.Now.ToString("yyyy-MM-dd dddd");
dt.Rows.Add(dr);
}
GridView gv = (GridView)this.BackUp.FindControl("gvwTask");//找到GridView
gv.RowDataBound += new GridViewRowEventHandler(gv_RowDataBound);//设置它的RowDataBound事件
//gv.Columns[5].Visible = false;//自动生成的列字段不会添加到 Columns 集合中,所以这样是不行的。
//所以我们只能修改它的数据源了,及修改dt.
dt = this.DelDataTableColumn(dt, 6);
gv.DataSource = dt;
gv.DataBind();
}
protected void BackUp_OnLoad(object sender, EventArgs e)
{
}
protected void gvwTask_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
}
protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (e.Row.RowIndex % 2 != 0)
{
e.Row.Style.Add(HtmlTextWriterStyle.BackgroundColor, "#F2F2F2");
}
}
}
private DataTable DelDataTableColumn(DataTable dt, int rowIndex)
{
int rowCount = dt.Columns.Count;
if (rowIndex >= 1 && rowIndex <= rowCount)
{
dt.Columns.Remove(dt.Columns[rowIndex-1]);
}
return dt;
}
根据你上面的内容,我做了一个测试程序。你在CS文件中粘贴上我写的代码,看一下。
protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("User_ID", typeof(int));
dt.Columns.Add("User_Name", typeof(string));
dt.Columns.Add("Address", typeof(string));
dt.Columns.Add("Tel", typeof(string));
dt.Columns.Add("Other", typeof(string));
dt.Columns.Add("Flag", typeof(int));
dt.Columns.Add("AddDate", typeof(string));
for (int i = 0; i < 10; i++)
{
DataRow dr = dt.NewRow();
dr["User_ID"] = (i+1).ToString("000000");
dr["User_Name"] = "Test" + i.ToString("00");
dr["Address"] = "北京海淀区中关村" + i.ToString("00");
dr["Tel"] = "Tel:" + i.ToString("000000");
dr["Other"] = "Other:" + i.ToString("00");
dr["Flag"] = i;
dr["AddDate"] = DateTime.Now.ToString("yyyy-MM-dd dddd");
dt.Rows.Add(dr);
}
GridView gv = (GridView)this.BackUp.FindControl("gvwTask");//找到GridView
gv.RowDataBound += new GridViewRowEventHandler(gv_RowDataBound);//设置它的RowDataBound事件
//gv.Columns[5].Visible = false;//自动生成的列字段不会添加到 Columns 集合中,所以这样是不行的。
//所以我们只能修改它的数据源了,及修改dt.
dt = this.DelDataTableColumn(dt, 6);
gv.DataSource = dt;
gv.DataBind();
}
protected void BackUp_OnLoad(object sender, EventArgs e)
{
}
protected void gvwTask_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
}
protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (e.Row.RowIndex % 2 != 0)
{
e.Row.Style.Add(HtmlTextWriterStyle.BackgroundColor, "#F2F2F2");
}
}
}
private DataTable DelDataTableColumn(DataTable dt, int rowIndex)
{
int rowCount = dt.Columns.Count;
if (rowIndex >= 1 && rowIndex <= rowCount)
{
dt.Columns.Remove(dt.Columns[rowIndex-1]);
}
return dt;
}
展开全部
用CSS
.hide{display:none}
设置列属性ItemStyle-CssClass="hide"
动态生成的gridview也可以动态添加属性
.hide{display:none}
设置列属性ItemStyle-CssClass="hide"
动态生成的gridview也可以动态添加属性
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Gridview自动生成的话,你应该知道一共有多少列。
在RowDataBound事件里
e.Row.Cells[Gridview一共有多少列-1].Visible = false;
我没测过,你可以试一下。
在RowDataBound事件里
e.Row.Cells[Gridview一共有多少列-1].Visible = false;
我没测过,你可以试一下。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Gridview自动生成的话,你应该知道一共有多少列。
在RowDataBound事件里
e.Row.Cells[Gridview一共有多少列-1].Visible = false;
在RowDataBound事件里
e.Row.Cells[Gridview一共有多少列-1].Visible = false;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
算了,我还是不能把你说明白了,你要对列做操作,你首先就要确定你的grideview有没有列和列的索引有没超出范围,只有条件都符合了,才能隐藏该列,如果是你连列都还没创建,你就去隐藏列,你说符合逻辑吗?而且第6列的索引是5,你用gvwTask.Columns[6],能不超出范围吗?你实在不行,把代码发到flag2@126.com吧!
不管你拖还是怎么的,他还是gridview,用我的方法可以!
我真晕,你要隐藏的是列,对行做操作干什么。写到page_load里或者你要隐藏列的事件里,例如你要单击按钮隐藏列就写到click事件里
gridView1.Columns[gridView1.Columns.Count - 1].Visible = false;
什么叫普通方法都不行,这个方法你试了吗?这也是最容易想到的方法。
还有什么叫我的这个Gridview和普通的不同,难道你还能自己写个Gridview出来,还真牛!
不管你拖还是怎么的,他还是gridview,用我的方法可以!
我真晕,你要隐藏的是列,对行做操作干什么。写到page_load里或者你要隐藏列的事件里,例如你要单击按钮隐藏列就写到click事件里
gridView1.Columns[gridView1.Columns.Count - 1].Visible = false;
什么叫普通方法都不行,这个方法你试了吗?这也是最容易想到的方法。
还有什么叫我的这个Gridview和普通的不同,难道你还能自己写个Gridview出来,还真牛!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询