【问题标题】:How to make gridview column visible true or false dynamically?如何使gridview列动态可见真或假?
【发布时间】:2013-11-28 07:14:40
【问题描述】:

我在 asp.net 中使用 GridView,如下所示:

    mygrid.DataSource = dTable;       
    mygrid.DataBind();

    if (mygrid.Columns.Count > 1)
    {
        mygrid.Columns[2].Visible = false;
    } 

我的网格视图代码如下

    <asp:GridView ID="mygrid" runat="server" AllowPaging="True" 
       onpageindexchanging="mygrid_PageIndexChanging" PageSize="15" 
       PersistedSelection="true"  
       ondatabound="mygrid_DataBound">
       <Columns>
           <asp:TemplateField>
           <ItemTemplate>
           <asp:HyperLink ID="Edit" runat="server" Text="Edit" NavigateUrl='<%# Eval("Value", "~/myweppage.aspx?Id=M{0}") %>' />
           </ItemTemplate>
           </asp:TemplateField> 
       </Columns>           
       <PagerSettings PageButtonCount="4" />


   </asp:GridView>

这里我无法设置visible=false

我尝试了以下答案

How do I make several gridview columns invisible dynamically?

我在 Visual Studio 2010 中找不到 datarow 事件。谁能帮我设置列的可见属性?

我的数据表的列结构是

column[0] 是 Value 列,然后还有 4 个其他列。

我的网格视图的列结构是 列[0] 为link field1Value field from Dtable 其他 4 列

【问题讨论】:

  • 如果我没有放入 if 条件中,则对象引用未设置错误。如果条件控制没有出现,我把它放进去。
  • 你用AutoGenerateColumns="false"做gridview吗?
  • @Bhavesh Kachhadiya 如果我设置 AutoGenerateColumns="false" ptoperty,那么只有在列上可见。来自数据表的列不可见。同样的问题列计数> 1 个条件失败。
  • 我已经编辑了答案,它将非常适合您。请查看我编辑的答案。

标签: c# asp.net gridview


【解决方案1】:

这是gridview中动态生成列的完美解决方案

请试试这个:

int indexOfColumn = 1; //Note : Index will start with 0 so set this value accordingly
protected void mygrid_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.Cells.Count > indexOfColumn)
    {
        e.Row.Cells[indexOfColumn].Visible = false;
    } 
}      

对于.aspx页面编辑gridview标签如下:

 <asp:GridView ID="mygrid" runat="server" AllowPaging="True" 
       onpageindexchanging="mygrid_PageIndexChanging" PageSize="15" 
       PersistedSelection="true"  
       ondatabound="mygrid_DataBound"
       OnRowDataBound="mygrid_RowDataBound">

【讨论】:

    【解决方案2】:

    这是简单的答案。如下创建css

    .classHide{ display:none } 
    

    然后代替column.visible = false,只需将classHide CSS 类分配给列。

    例如

    grdRole.Columns(0).ItemStyle.CssClass = "classHide"
        grdRole.Columns(0).HeaderStyle.CssClass = "classHide"
    

    【讨论】:

    • 该列只没有得到assign.object引用没有设置错误它的给出
    • mygrid.Columns[2].cssClass="classHide"
    • 找不到属性 cssClass
    • 它工作正常。这是最好的答案,因为如果您想隐藏一列但仍然可以访问其中的控件怎么办?换句话说,您不想将其完全从 DOM 中删除。如果你关心并且不关心,那么 .Visible = false 就足够了
    • @@Indranil.Bharambe 谢谢你...非常感谢...通过使用 css 类...我可以轻松获得客户端的专栏...
    【解决方案3】:

    *强文本*尝试利用事件ItemDataBound事件并尝试使用以下语法动态隐藏列:

       mygrid.Columns[1].Visible = false           //(Example)
    

    数据表的列数从 0 开始,而不是从 1 开始。所以如果是第二列,你想隐藏,索引应该是1。

    希望这会有所帮助..

    【讨论】:

    • @Raghuveera..你也可以利用事件..Pre Render 隐藏列
    • 给出这样的错误索引超出范围。必须是非负数且小于集合的大小。参数名称:索引
    • @Raghuveera.你给出的索引值是多少?
    • 2 因为在数据表中它是第 2 列。
    • @Raghuveera..如果这不起作用..你能尝试使用 Prerender 吗?其他的事情是你设置 AutogenerateColumns=False 吗?
    【解决方案4】:

    右键单击gridview并选择Properties然后选择Events你会发现RowDataBound双击它并在Row data bound中写这个

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        e.Row.Cells[0].Visible = false;
    }
    

    【讨论】:

      【解决方案5】:

      试试这个:

      for (int i = 0; i < YourGrid.Rows.Count; i++)
      {
          (YourGrid.Columns[2]).Visible = false;
      }
      

      【讨论】:

      • 虽然这段代码可以回答问题,但最好解释一下如何解决问题并提供代码作为示例或参考。仅代码的答案可能会令人困惑且缺乏上下文。
      • 谢谢@罗伯特·哥伦比亚
      猜你喜欢
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 2014-02-17
      • 1970-01-01
      相关资源
      最近更新 更多