2011-04-05 41 views
0

我有三个字段显示在gridview中。根据第一个字段的值,我必须显示或隐藏第二个字段。Gridview - 问题

下面的代码是我到目前为止已经试过,但我不知道如何获得完整的解决方案。

任何人可以看看吗?

的三个字段是

1)activeStatus

2)DateMadeInactive

3)评论

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      bool activeStatus=Convert.ToBoolean(DataBinder.Eval(e.Row.DataItem,"Active")); 
      if(activeStatus) 
      { 
       // I need to display the activeStatus columns  
      } 
      else 
      { 
       // I need to hide activeStatus Column and Display the DatemadeInactive  and Comments 
      } 

     } 

    } 

回答

1

你可以把条件语句为模板字段:

<asp:GridView ... runat="server"> 
    <Columns> 
     ... your other fields ... 
     <asp:TemplateField HeaderText="Status"> 
     <ItemTemplate> 

      <asp:Label Text='<%# (bool)Eval("Active") 
           ? Eval("activeStatus") 
           : Eval("DateMadeInactive", "Inactive since {0}") %>' 
      runat="server"/> 

     </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
    </asp:GridView> 
1

我从您的问题中收集的是您想知道如何隐藏或显示DataGridView中的任何给定列。如果是这样,你只需要通过做给列添加到DataGridView,无论是用DataSource或手动,然后隐藏你不想任何列如下:

dataGridView1.Columns["YourColumnName"].Visible = false; 
+0

我都用这个,但是,如果我们有两个记录与Active状态的真实,同一页假,然后它不工作..反正虽然谢谢小号! – 2011-04-05 13:31:13

+0

你是什么意思,“它不工作”?你期望会发生什么?当你尝试它时究竟发生了什么? – Yetti 2011-04-05 13:35:47

+0

如果在具有activeStatus的页面中有两条记录,那么Value = True和False,它不会隐藏列,因此使其可见的目的不正确。我必须采取其他方法,不是你的代码正在工作,而是这种方法本身不起作用。所以我必须承担责任,谢谢 – 2011-04-05 13:55:02

0

我做了这样的事情使用, IIRC,CellFormatting事件。它使您有机会测试每个单元格的值,并根据此值替换它或该行中的其他单元格。在我的情况下,我正在用查找的字符串替换数字值并更改背景颜色。