GridView怎么从自动生成的列中删除列?
我的一个GridView用的是交叉查询,就是列是动态生成的,所以不能用模板列,只能自动生成,但自动生成的时候会把一些我只希望在后台得到的字段的值也会显示出来(比如ID),所以我想删除或隐藏掉这一列,可发现不能用GridView1.Columns[1].Visible = false;这种方法,不知道有什么方法可以实现我的要求?谢谢各位. --------------------编程问答-------------------- 我记得可以将列的宽度设置为“零“ --------------------编程问答-------------------- 问题是就找不到这一列啊 --------------------编程问答-------------------- 超难度?? --------------------编程问答-------------------- 既然是自动生成,为什么不在SELECT的时候把要用的字段列出来呢?我也碰到这种情况,不过没问了,也没翻书,最后就是改改SELECT了. --------------------编程问答-------------------- 问题是选择的时候那些列是自动生成的,只能select * from table
--------------------编程问答-------------------- 在DataKeyNames属性里把ID加进去就可以了,有很多方法。
(1)把OldParametersValueFormat设置成@original_{0},加入删除命令,Delete From xx where id=@original_ID。
(2)通过GridView1.DataKeys[i]得到id --------------------编程问答-------------------- 上面的方法也不行的 --------------------编程问答-------------------- 循环找到你要删的列的index
然后GridView1.Columns.removeAt(index)就行了 --------------------编程问答-------------------- 隐藏列的方法
private void gridview1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem||e.Item.ItemType==ListItemType.Header)
{
TableCell cell = e.Item.Cells[19];
cell.Style.Add("display","none");
}
} --------------------编程问答-------------------- 都不行,自动生成列是找不到e.Item.Cells[19]的 --------------------编程问答-------------------- 把gridview中的Autogeneratecol设置成false
在属性columns中添加列,再把列的datafild属性设置成你要显示的字段名.如:
"select userid,username from mytabel",把列属性datafild的值没置成“userid”或“username”
这样就可能对每一列操作了 --------------------编程问答-------------------- 别人就是要自动创建列, 楼上还要Autogeneratecol设置成false
那只有在绑定后做文章了,绑定后循环表格的每列,试下 --------------------编程问答-------------------- 绑定前 在数据源把这列删掉不就好了。 --------------------编程问答--------------------
是用户的选择还是你的选择?你这里肯定有问题。 --------------------编程问答-------------------- onrowdatabound:
protected void yourGrid_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
nIndex = 0;
foreach (TableCell cell in e.Row.Cells)
{
if (cell.Text == "NameofFieldWhichShouldNotBeShown")
{
cell.Visible = false;
break;
}
nIndex++;
}
}
else
{
TableCell cell = e.Row.Cells[nIndex];
cell.Visible = false;
}
} --------------------编程问答-------------------- --------------------编程问答-------------------- 如果多个列的话,那就nIndex改成数组,对应的薄记每个列的位置。上面隐藏单个的写了代码试了一下没问题。
不过这种在Control上的筛选真的是很无奈中的办法。。。。 --------------------编程问答-------------------- 隐藏 --------------------编程问答-------------------- 只能说你白
--------------------编程问答-------------------- 把datakeyName设成关键字ID,直接通过关键字读ID就可以了,至于那个删除列,可以用模板列啊,Gridview可以有模板列和动态生成列组合。 --------------------编程问答-------------------- 在RowDataBound事件里可以实现隐藏 --------------------编程问答-------------------- 可以设置这个列的样式来控制,也可以把不需要显示出来的字段,放到datakeys里边 --------------------编程问答-------------------- 不会做啊,但我看上面的几位 说的有点意思 --------------------编程问答-------------------- //表头隐掉
GridView1.HeaderRow.Cells[ddlColumns.SelectedIndex].Visible = isVisible;
//数据隐掉
for (int i = 0; i < GridView1.Rows.Count; i++)
{
GridView1.Rows[i].Cells[ddlColumns.SelectedIndex].Visible = isVisible;
} --------------------编程问答-------------------- 兄弟,,他们都不懂你。。我懂你。。。
在服务器端不能隐藏的。
因为自动绑定数据后。
GridView.Columns.Count = 0;所以怎么整都是卵的。
可以在客户端通过js隐藏掉
你把Id放在最前面。。
添加
$(document).ready(function(){
$("#<%=gv.ClientID %>").find("tr").find("td:eq(0),th:eq(0)").hide();
});
--------------------编程问答-------------------- lstcyzj说得很对。
不过如果找不到的话,可以用以下方式:
$(document).ready(function(){
$("[id$=gvID]")find("tr").find("td:eq(0),th:eq(0)").hide();
});
补充:.NET技术 , ASP.NET