【问题标题】:hide Gridview Column but get value隐藏 Gridview 列但获得价值
【发布时间】:2011-11-07 18:39:33
【问题描述】:

我有一个 GridView,我将它数据绑定到 Page_Load()。我想隐藏一个它的列,但我仍然想访问它。我试过了

       SqlCommand sqlCommand = new SqlCommand("select name,surname,id from test", sqlConnection);
        sqlConnection.Open();
        SqlDataReader reader = sqlCommand.ExecuteReader();         
        GridView1.DataSource = reader;          
        GridView1.DataBind();
GridView1.columns[1].visible= False;

我得到错误索引超出范围。必须是非负数且小于集合的大小。 有任何想法吗?

【问题讨论】:

  • 您是否尝试让列宽 = 0?如果您在设置可见性时收到错误消息,则可能是您的数据源没有 3 个字段的问题。请记住,它从索引 0 开始。
  • 可能想要显示更多代码 - 特别是,您在何处以及如何对控件进行数据绑定。您看到的错误几乎肯定表明 GridViewTest.columns 在您尝试访问第二个元素时包含零个或一个元素。
  • 当您需要做的只是访问数据时,您不应该操作列。这就是数据键的用途。
  • @mikemann 检查我的代码

标签: c# asp.net gridview


【解决方案1】:

为此使用数据键。

<asp:GridView ID="GridView1" runat="server" DataKeyNames="ID" ...>
   <Columns>
       <asp:BoundField HeaderText="Name" DataField="Name" />
       <asp:BoundField HeaderText="Surname" DataField="Surname" />
   </Columns>
</asp:GridView>

添加数据键后,您可以像这样访问值:

 //returns the id at the first row
 int ID = GridView1.DataKeys[0]["ID"] as int;

【讨论】:

  • 嗯,但在您的代码的第二行,我收到以下错误:只有赋值、调用、递增、递减和新对象表达式可以用作语句
  • @pikk:查看编辑后的答案。抱歉,我忘记将列值分配给变量。
  • 是的,但这怎么能帮助我隐藏列但仍然访问它的值?
  • 这将消除隐藏列的需要,因为您将能够通过数据键访问列值。
  • 上帝啊...您仍在从选择中返回列。唯一的区别是您将值保存在数据键中,而不是将其隐藏在列中。以这种方式访问​​该值将更容易。这就是数据键的用途,我建议您对它们进行一些研究以更好地理解它。
【解决方案2】:

你检查过吗:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.datacontrolfield.visible.aspx: "..将字段名称添加到数据绑定控件的 DataKeyNames 属性中"

【讨论】:

    猜你喜欢
    • 2013-07-18
    • 2012-06-02
    • 2011-05-06
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多