2015-05-11 114 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>