2017-02-01 4 views
0

У меня есть <asp:ButtonField> внутри gridview. Как настроить таргетинг на кнопку в gridview, чтобы сделать ее видимой во время выполнения на основе условия? Я не могу настроить таргетинг, поскольку он не имеет свойства ID. Я застрял здесь. Вот код нижеСделать кнопку пустого поля видимым во время выполнения

<asp:GridView ID="OrdersDataList1" runat="server" DataKeyNames="OrderID" Width="100%" SkinID="Gridview" OnPageIndexChanging="orders_PageIndexChanging" 
    EmptyDataText="You have no orders." AllowSorting="True" OnSorting="OnSort" AllowPaging="true" PageSize="15" AutoGenerateColumns="False" OnRowCommand="updateStatus"> 
    <Columns> 
     <asp:BoundField DataField="CustomerUser_ID" HeaderText="UserID" Visible="true" /> 
     <asp:BoundField DataField="OrderID" HeaderText="OrderNo" InsertVisible="False" ReadOnly="True" HeaderStyle-HorizontalAlign="Left" ItemStyle-HorizontalAlign="Left" SortExpression="OrderID" /> 
     <asp:BoundField DataField="OrderDate" HeaderText="OrderDate" SortExpression="OrderDate" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center"/> 
     <asp:BoundField DataField="Base" HeaderText="Base" DataFormatString="{0:C}" SortExpression="Base" HeaderStyle-HorizontalAlign="Right" ItemStyle-HorizontalAlign="Right"/> 
     <asp:BoundField DataField="Freight" HeaderText="Freight" DataFormatString="{0:C}" SortExpression="Freight" HeaderStyle-HorizontalAlign="Right" ItemStyle-HorizontalAlign="Right"/> 
     <asp:BoundField DataField="Total" HeaderText="Total" DataFormatString="{0:C}" SortExpression="Total" HeaderStyle-HorizontalAlign="Right" ItemStyle-HorizontalAlign="Right"/> 
     <asp:BoundField DataField="Products" HeaderText="Products" SortExpression="Products" DataFormatString="{0} product" HeaderStyle-HorizontalAlign="Left" ItemStyle-HorizontalAlign="Left"/> 
     <asp:BoundField DataField="Units" HeaderText="Units" SortExpression="Units" DataFormatString="{0} units" HeaderStyle-HorizontalAlign="Left" ItemStyle-HorizontalAlign="Left"/> 
     <asp:BoundField DataField="OrderStatusName" HeaderText="Current Status" SortExpression="OrderStatusName" HeaderStyle-HorizontalAlign="Left" ItemStyle-HorizontalAlign="Left"/> 
     <asp:BoundField DataField="OrderStatusID" HeaderText="Orderstatusid" Visible="true" /> 
     <asp:BoundField DataField="OrderTracking_ID" HeaderText="TrackingNo" SortExpression="OrderTracking_ID" HeaderStyle-HorizontalAlign="Left" ItemStyle-HorizontalAlign="Left"/> 
     <asp:TemplateField HeaderText="Action"> 
      <ItemTemplate> 
       <%# GetViewOrderLink(Eval("OrderID").ToString(), Eval("OrderState").ToString())%> 
      </ItemTemplate> 
      <HeaderStyle HorizontalAlign="Left" /> 
      <ItemStyle HorizontalAlign="Left" /> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Change Status" SortExpression="OrderStatusName"> 
      <ItemTemplate> 
       <asp:DropDownList ID="OrderStatusDD" runat="server" 
        DataSourceID="OrdersStatuses" DataTextField="OrderStatusName" DataValueField="OrderStatusID" Visible="false">          
       </asp:DropDownList> 
       <asp:SqlDataSource ID="OrdersStatuses" runat="server" 
        ConnectionString="<%$ ConnectionStrings:SqlConn %>" 
        SelectCommand="SELECT [OrderStatusID], [OrderStatusName] FROM [Orders_Statuses] where OrderStatusID = 2 or OrderStatusID = 8 ORDER BY [OrderStatusName]"> 
       </asp:SqlDataSource> 
      </ItemTemplate> 
     </asp:TemplateField> 

     <asp:ButtonField ButtonType="Button" Text="Update status" Visible="false" HeaderText="Change Status" /> 
    </Columns> 
</asp:GridView> 

PS У меня есть onrowCommand установить на GridView слушать кнопку мыши в GridView

+0

я думаю, что вам нужно преобразовать buttonfield в TemplateField .. Таким образом, вы можете назначить его с идентификатором – eirishainjel

+0

Кроме того, сделать его скрытым не является невидимым , Установка 'YourButton.Visible = false' предотвращает ее визуализацию и требует обратной передачи, чтобы сделать ее видимой. Гораздо чище добавить кусок JS или JQ в свой DDL-выбор и сменить кнопку «hidden = true» на «hidden = false» или «display: none' to' display: inline »или, тем не менее, вы хотите это сделать. – fnostro

+0

Имейте в виду, что изменение видимости может привести к некоторому непривлекательному движению экрана из-за раскрытия кнопки. Вы должны учитывать это или, возможно, подумать над тем, чтобы все кнопки отображались и изменяли его состояние включения/отключения. – fnostro

ответ

0

Вы можете использовать RowCreated событие в GridView следующим образом:

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) 
    { 
     Button btn = (Button) e.Row.Cells[12].Controls[0]; 


     if(1==1) 
     { 

      btn.Visible = true; 

     } 
    } 
0

Необходимо создать событие RowCreated для gridview example

Прежде чем элемент управления GridView может быть отображен, объект GridViewRow должен быть создан d для каждой строки в элементе управления. Событие RowCreated создается, когда каждая строка в элементе управления GridView создается. Это позволяет вам предоставлять метод обработки событий, который выполняет настраиваемую процедуру, например добавление настраиваемого содержимого в строку, всякий раз, когда это событие происходит.

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) 
{ 
} 

ИЛИ

<asp:GridView runat="server" ID="GV1" AutoGenerateColumns="false"> 
    <Columns> 
     <asp:BoundField DataField="Name" HeaderText="Name" /> 
     <asp:BoundField DataField="Age" HeaderText="Age" /> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:Button runat="server" Text="Reject" 
       Visible='<%# IsOverAgeLimit((Decimal)Eval("Age")) %>' 
       CommandName="Select"/> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

protected Boolean IsOverAgeLimit(Decimal Age) { 
    return Age > 35M; 
} 

Ссылка example

Смежные вопросы