2015-05-11 85 views
1

我有一个gridview包含一些字段,我想在TemplateField中显示按钮时处理字段有价值。

这里是我的代码:如何在模板字段gridview中添加条件按钮?

<asp:GridView ID="grdList" PageSize="20" runat="server" DataSourceID="ODList" AllowPaging="True" 
     AllowSorting="True" PagerSettings-Position="Top" AutoGenerateColumns="False" 
     ShowFooter="True" ShowHeaderWhenEmpty="True" OnPageIndexChanged="grdList_PageIndexChanged"> 
     <Columns> 
      <asp:BoundField DataField="MeasureCatalogId" SortExpression="MeasureCatalogId" /> 
      <asp:BoundField DataField="MeasureName" SortExpression="MeasureName" />     
      <asp:TemplateField SortExpression="Process"> 
       <ItemTemplate> 
        <asp:Label ID="Label2" runat="server" Text='<%# Bind("Process") %>'></asp:Label> 
       </ItemTemplate> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("LevelId") %>'></asp:TextBox> 
       </EditItemTemplate> 
      </asp:TemplateField>    
      <asp:TemplateField ShowHeader="False"> 
       <ItemTemplate> 
        <%if(????????) -- want condition for process!= "" 
         { 
        %> 
         <img class="semPopup" sempopupurl='<%=Constant.AppPath %>/forms/baseform/MeasureProcessFromCatalogForm.aspx?t=2&lid=<%# Eval("LevelId") %>&mid=<%# Eval("MeasureCatalogId") %>' 
            sempopupwidth="<%=width %>" sempopupheight="<%=height %>" 
            src="../../App_Themes/images/select2.gif" /> 
        <%} %> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
     <PagerSettings Position="Top"></PagerSettings> 
     <PagerStyle CssClass="grid_pager" /> 
    </asp:GridView> 

回答

2

作为其他建议的替代方案;您可以尝试在该字段上使用代码表达式:

<asp:TemplateField ShowHeader="False"> 
      <ItemTemplate>     
        <img class="semPopup" sempopupurl='<%=Constant.AppPath %>/forms/baseform/MeasureProcessFromCatalogForm.aspx?t=2&lid=<%# Eval("LevelId") %>&mid=<%# Eval("MeasureCatalogId") %>' 
           sempopupwidth="<%=width %>" sempopupheight="<%=height %>" 
           src="../../App_Themes/images/select2.gif" Visible='<%# ShowButton(Eval("Process")) %>'/> 
      </ItemTemplate> 
     </asp:TemplateField> 

我还没有尝试过这一点,但它遵循与我以前使用过的类似模式。代码表达式调用了代码隐藏函数'ShowButton',它应该返回一个bool,在这里你可以评估传入的进程的值,如果它符合你的喜好,则返回一个真正的值;否则返回false并且按钮不会显示。

C#

protected bool ShowButton(object DataItem) 
    { 
     //Here you can place as many conditions as you like 
     //Provided you always return either true or false 
     if (DataItem != null) 
      return true; 
     else 
      return false; 
    } 

建议编辑被提出以类似的方式,然而的代替一个bool能见度,能见度设置由字符串值改变。我相信他们也会加上他们的。毕竟,品种是生活的香料

0

使用代码隐藏,使按钮可见在适当的时候:

protected void gridview1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     DataRow row = ((DataRowView)e.Row.DataItem).Row; 
     string process = row.Field<string>("Process"); // change type from string to whatever it is 
     Button btn = (Button) e.Row.FindControl("ButtonID"); 
     btn.Visible = process == "YourProcessValue"; 
    } 
} 
0

,您可以利用RowDataBoundand的不是让隐藏你的控制决定

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      SomeObject mapItem = (SomeObject)e.Row.DataItem; 
      if(!mapItem.Process) 
        (e.Row.Cells[3].FindControl("Buttonid") as Button).visible= false; 
     }   
    } 

或尝试

 <ItemTemplate> 
      <asp:Button runat="server" Text="Reject" 
      Visible='<%# ((bool)Eval("Process")) %>' /> 
     </ItemTemplate>