2017-03-15 2 views
2

Ich habe ein ASPxGridView-Steuerelement, das eine Schaltfläche benötigt, die bedingt angezeigt wird. Ich habe mehrere Artikel durchsucht und gelesen, aber keine Lösung für meine spezielle Situation gefunden. Die Schaltfläche heißt btnAllocatePlan und sollte nur angezeigt werden, wenn der Wert in einer Spalte namens PayPlanFlg wahr ist. Unten ist das Markup für das Gitter und zwei Dinge, die ich im Codebehind versucht habe, wo ich das lieber machen würde. Tatsächlich hat keines dieser Ereignisse sogar gefeuert. Jede Hilfe wird sehr geschätzt!Bedingte Anzeige der benutzerdefinierten Schaltfläche auf DevExpress ASPxGridView in VB.NET

<dx:ASPxGridView ID="grdPayments" runat="server" CssClass="tblLined" SettingsPager-PageSize="50" 
     AutoGenerateColumns="False" KeyFieldName="PaymentKey" Width="100%"> 
     <SettingsBehavior AllowFocusedRow="True" ProcessFocusedRowChangedOnServer="True" /> 
     <Columns> 
      <dx:GridViewDataTextColumn Caption="CaseKey" FieldName="CaseKey" Visible="False" VisibleIndex="0"> 
      </dx:GridViewDataTextColumn> 
      <dx:GridViewDataTextColumn Caption="Name" FieldName="Name" VisibleIndex="1" Width="10%"> 
      </dx:GridViewDataTextColumn> 
      <dx:GridViewDataTextColumn Caption="Association" FieldName="AssociationName" VisibleIndex="2" Width="15%"> 
      </dx:GridViewDataTextColumn> 
      <dx:GridViewDataTextColumn Caption="Address" FieldName="Address1" VisibleIndex="3" Width="15%"> 
      </dx:GridViewDataTextColumn> 
      <dx:GridViewDataTextColumn Caption="Amount Paid" FieldName="Amount" VisibleIndex="4" Width="5%"> 
       <PropertiesTextEdit DisplayFormatString="c"></PropertiesTextEdit> 
      </dx:GridViewDataTextColumn> 
      <dx:GridViewDataTextColumn Caption="Payment Date" FieldName="TransactionTime" VisibleIndex="5" Width="12%"> 
      </dx:GridViewDataTextColumn> 
      <dx:GridViewDataTextColumn Caption="Payment Type" FieldName="PaymentType" VisibleIndex="6" Width="3%"> 
      </dx:GridViewDataTextColumn> 
      <dx:GridViewDataTextColumn Caption="Amount Owed" FieldName="Balance" VisibleIndex="7" Width="5%"> 
       <PropertiesTextEdit DisplayFormatString="c"> 
       </PropertiesTextEdit> 
      </dx:GridViewDataTextColumn> 
      <dx:GridViewDataTextColumn Caption="Amount Available" FieldName="AmountAvailable" VisibleIndex="8" Width="6%"> 
       <PropertiesTextEdit DisplayFormatString="c"> 
       </PropertiesTextEdit> 
      </dx:GridViewDataTextColumn> 
      <dx:GridViewDataHyperLinkColumn Name="AllocationLink" VisibleIndex="9" Caption=" " UnboundType="String" Width="5%"> 
       <DataItemTemplate> 
        <!--<a href="javascript:OpenPaymentAllocation()"><%#"Allocate"%></a>--> 
        <dx:ASPxButton ID="btnAllocate" runat="server" Text="Allocate" OnClick="btnAllocate_Click" /> 
       </DataItemTemplate> 
      </dx:GridViewDataHyperLinkColumn> 
      <dx:GridViewDataHyperLinkColumn Name="PlanLink" VisibleIndex="10" Caption=" " UnboundType="String" Width="5%"> 
       <DataItemTemplate> 
        <!--<a href="javascript:OpenPaymentPlanAllocation()"><%#"Allocate"%></a>--> 
        <dx:ASPxButton ID="btnAllocatePlan" runat="server" Text="Pay Plan" OnClick="btnAllocatePlan_Click" /> 
       </DataItemTemplate> 
      </dx:GridViewDataHyperLinkColumn> 
      <dx:GridViewDataTextColumn Caption="PayPlanFlg" FieldName="PayPlanFlg" Visible="false" VisibleIndex="11"> 
      </dx:GridViewDataTextColumn> 
     </Columns>    
    </dx:ASPxGridView> 

Versuche Codebehind:

Protected Sub grdPayments_CustomButtonInitialize(sender As Object, e As ASPxGridViewCustomButtonEventArgs) 

     If e.Button.ID = "btnAllocatePlan" Then 

      If grdPayments.GetRowValues(e.VisibleIndex, 11, "PayPlanFlg") = 1 Then 

       e.Button.Visibility = GridViewCustomButtonVisibility.Invisible 

      End If 

     End If 

    End Sub 

Protected Sub ASPxGridView1_HtmlDataCellPrepared(sender As Object, e As ASPxGridViewTableDataCellEventArgs) 

     If e.DataColumn.FieldName = "ID" Then 
      Dim textBox As ASPxButton = TryCast(ASPxGridView1.FindRowCellTemplateControl(e.VisibleIndex, e.DataColumn, "btn"), ASPxButton) 
      If Convert.ToString(e.GetValue("ItemName")).Equals("B") Then 
       textBox.Text = Convert.ToString(e.CellValue) 
       textBox.Visible = True 
      Else 
       textBox.Visible = False 
      End If 
     End If 

    End Sub 

Antwort

1

Der beste Ansatz ist die Schaltfläche des Init/Load-Ereignis zu behandeln. Diese empfohlene Technik ist im The general technique of using the Init/Load event handler KB-Artikel beschrieben.

prüfen unten Beispielcode für eine bestimmte Schaltfläche in einer Reihe versteckt ..

aspx

<dx:GridViewDataHyperLinkColumn Name="AllocationLink" VisibleIndex="9" Caption=" " UnboundType="String" Width="5%"> 
    <DataItemTemplate> 
     <!--<a href="javascript:OpenPaymentAllocation()"><%#"Allocate"%></a>--> 
     <dx:ASPxButton ID="btnAllocate" runat="server" Text="Allocate" OnInit="btnAllocate_Init" /> 
    </DataItemTemplate> 
</dx:GridViewDataHyperLinkColumn> 

CS-

protected void btnAllocate_Init(object sender, EventArgs e) 
{ 
    DevExpress.Web.ASPxButton btn = (DevExpress.Web.ASPxButton)sender; 
    GridViewDataItemTemplateContainer container = btn.NamingContainer as GridViewDataItemTemplateContainer; 

    // You can remove the if statement, and try to insert a new record. You'll catch an exception, because the DataBinder returns null reference 
    if (container != null && !container.Grid.IsNewRowEditing) 
     btn.Visible = !(bool)DataBinder.Eval(container.DataItem, "PayPlanFlg"); 
} 

Referenz:
ASPxGridView - Hide the control in the DataItemTemplate conditionally

+0

Danke für Ihre Antwort, Niranjan. Ich habe Ihren Code ausprobiert, erhalte aber einen Fehler, der besagt, dass DevExpress.Web.ASPxButton nicht definiert ist. Irgendwelche Ideen, was das verursacht? – Mike

+0

Ich sortierte dieses Problem. Ich verwende eine ältere Version von DevExpress, als der ASPxButton noch im ASPxEditors-Namespace war. – Mike

+0

aber Sie Funktionalität ist immer noch gleich .. ändern Sie dann Namespace und verweisen Sie den Code, um es entsprechend Ihrer DevExpress-Version zu ändern. –

Verwandte Themen