GridView 中隐藏列 Visible=false会不能正常取值 ???????
GridView1.Columns[0].Visible = false;GridView1.Columns[1].Visible = false;
----------------------------
后面取值
string CompanyID = GridView1.Rows[rowid].Cells[1].Text;
string uid = GridView1.Rows[rowid].Cells[0].Text;
这样会取到空值 ....但要设为true 时则能得到值 ....
我怎样才能把这两列隐藏起来...但也能取到值 ~~~~! --------------------编程问答-------------------- if (e.Row.RowType == DataControlRowType.DataRow || e.Row.RowType == DataControlRowType.Header)
{
e.Row.Cells[0].Visible = false;
} --------------------编程问答-------------------- 当然不能取值。如果Visible=False在生成Gridview数据表格的时候,就根本不会生成出来。你怎么取值?隐藏列用这个方法:
Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
'所有行显示控制
If e.Row.RowType <> DataControlRowType.Pager Then
Try
'昵称
e.Row.Cells(2).Style("display") = "none"
...
... --------------------编程问答-------------------- 对,隐藏后取不到值,你可以去百度看看有很多例子,或者前两位也可以 --------------------编程问答-------------------- try:
GridView1.Columns[0].width=0; --------------------编程问答-------------------- protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
//用CSS 隐藏列
e.Row.Cells[3].Style.Add("display", "none")
for (int i = 16; i <= 28; i++)
{
e.Row.Cells[i].Style.Add("display", "none");
}
} --------------------编程问答-------------------- 这个:
http://www.x2blog.cn/supnate/?tid=7037 --------------------编程问答-------------------- 设计中添加绑定列时钩上“不可见”复选框 --------------------编程问答-------------------- 你的隐藏方式就错了,应该是这样的
<asp:BoundColumn Visible="False"
这样你隐藏的列也能取到值了
--------------------编程问答-------------------- width=0可以 --------------------编程问答-------------------- 用css隐藏 --------------------编程问答-------------------- 將要取的隱藏字段放在自定義模板中 --------------------编程问答-------------------- GridView 中隐藏列 Visible=false会
======
1。
这是一个已知的问题。
DataGrid 不存在此问题。
GridView 的所谓某些“优化”就是包括这个,因为 vivible=false, 它认为不需要呈现,就不必备获取(实际上执行一个反射计算,反射需要一个比较大的开销)此列的值。
2。
使用 Eray(黑桃六) 的方法当然是可以的,通过设置 css 样式控制,但是存在安全性问题,因此数据还是呈现到了客户端。
width=0可以 多数情况下是不可以了,多数浏览器依然会呈现出来,不按 width=0 呈现
3。
一般用法,应该优先考虑使用 GridView.DataKeys 存储
确实需要通过隐藏列,GridView 只有使用模板列的
// .aspx
<asp:TemplateField HeaderText="NewProductName" Visible="true">
<ItemTemplate>
<asp:label ID="lblProductName" runat="server" Text='<%# Eval("ProductName") %>' />
</ItemTemplate>
</asp:TemplateField>
// .aspx.cs
// 访问指定行
Response.Write(((Label)GridView1.Rows[0].FindControl("lblProductName")).Text);
// RowBound 事件
Response.Write(((Label)e.Row.FindControl("lblProductName")).Text);
--------------------编程问答-------------------- protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
e.Row.Cells[0].Visible = false;
}
Jinglecat(晓风残月 >> 问题需简洁,错误要详细) 说的很详细,应优先使用DataKeyNames --------------------编程问答-------------------- 隐藏了取不到值的. --------------------编程问答-------------------- 用GridView的DataKeys
<asp:GridView ID="GridView" runat="server" DataKeyNames="字段名称1,字段名称2" />
//取值时
string strValue = GridView.DataKeys[e.RowIndex]["字段名称"].ToString(); --------------------编程问答-------------------- lizh0103 的方法也是可以的,学到了,呵呵
事实上,实际项目中,我几乎没有用
GridViewRow.Cells[cellIndex].Text
以及
GridViewRow.Cells[cellIndex].Controls
的方式访问,
因为 cellIndex 是一个索引值,意味着,如果你添加、删除GridView/DataGrid 的列时,此值就需要修改,保证同步,N 烦啊
我更喜欢,使用模板列
GridViewRow.FindControl("MyControlID")
与索引访问相比,对牺牲一定的性能,但是这是完全可以忽略的
对于 GridView.DataKeys 可以存储多个键值,更是优先选择之
--------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 有道理 用模板列就能找到了 不用BoundColumn --------------------编程问答-------------------- 是可以獲取值的,和正常顯示一樣獲取,只是每次在綁定時,必須先讓該隱藏列顯示然後在綁定。 --------------------编程问答-------------------- protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
e.Row.Cells[0].Visible = false;
}
这是事件里面写,肯定能取到值 --------------------编程问答-------------------- protected void GridView2_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow || e.Row.RowType == DataControlRowType.Header)
{
e.Row.Cells[0].Visible = false;
e.Row.Cells[1].Visible = false;
e.Row.Cells[2].Visible = false;
}
}
这样的才能隐藏多列... --------------------编程问答-------------------- 是我就把宽设成0 --------------------编程问答-------------------- “卖女孩的小火柴”的方法是对的,谢谢了。 --------------------编程问答-------------------- 不会取不到值啊
在gridview的RowCreated事件中写 e.Row.Cells[11].Visible = false;
然后在 protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Cells[11].Text 这里是可以取值的
} --------------------编程问答-------------------- 用CommandArgument也是可以的
在rowcommand里用e.CommandArgument取值处理
--------------------编程问答-------------------- GridView列隐藏后不能取值?? 没用过,不知道。经常用DataGrid。 想不到"DataGrid" "GridView" "DataGridView" 三者什么关系呢... --------------------编程问答-------------------- protected void GVList_RowDataBound(object sender, GridViewRowEventArgs e)
{
//隐藏不必要的列
if ((e.Row.RowType == DataControlRowType.DataRow) || (e.Row.RowType == DataControlRowType.Header) || (e.Row.RowType == DataControlRowType.Footer))
{
e.Row.Cells[0].Visible = false;
e.Row.Cells[3].Visible = false;
}
}
这是迄今为止最简洁的解决方法了。 --------------------编程问答-------------------- 你可以把要隐藏的列中放置一个label控件,把值赋到控件的text属性上,然后在后台代码处理中,查找这个控件,找到控件后取其TEXT值即可
--------------------编程问答-------------------- 设置visible=false的时候,ASP.NET将不会生成这个cell的。
最好的办法是用css控制这个格子(cell)的display=none,这样会生成不过不显示,能实现您的要求 --------------------编程问答-------------------- LZ如果不考虑安全问题。。使用CSS隐藏就好了,。 --------------------编程问答-------------------- --------------------编程问答-------------------- 获取gridview 隐藏列
在Gridview 的 RowCreated事件中书写如下代码:
--------------------编程问答-------------------- GridView 是可以获取隐藏字段值
void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow ||
e.Row.RowType == DataControlRowType.Header)
{
//隐藏第1列
e.Row.Cells[0].Visible = false;
//可以根据需要隐藏更多的列
}
}因为在RowCreated事件(隐藏)在绑定时候发生,所以这样就即能将数据绑定到列上,又隐藏该列,所以可以访问到隐藏列的值。 protected void gvUnit_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
//获取隐藏列的值
if (e.Row.Cells[1].Text == "xxx")
{
//TODO
}
}
}
后置代码
GridViewRow.FindControl( "MyControlID ")
--------------------编程问答-------------------- 楼上都说了那么多了、我就看看吧 --------------------编程问答--------------------
绝对支持这个!
补充:.NET技术 , ASP.NET