2017-03-15 7 views
2

조건부로 볼 수있는 단추가 필요한 ASPxGridView 컨트롤이 있습니다. 나는 몇몇 기사를 수색하고 읽었지만 나의 특별한 상황에 대한 해결책을 찾지 못했다. 이 단추는 btnAllocatePlan이라고하며 PayPlanFlg 열의 값이 true 인 경우에만 표시해야합니다. 다음은 코드 비하인드에서 시도한 그리드와 두 가지 마크 업입니다. 실제로 이러한 사건 중 어느 것도 해고되지 않았습니다. 어떤 도움이라도 대단히 감사합니다!VBExpress의 DevExpress ASPxGridView에서 사용자 지정 단추의 조건부 표시

<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> 

코드 숨김 시도 :

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 

답변

1

가장 좋은 방법은 버튼의 초기화 /로드 이벤트를 처리하는 것입니다. 이 권장 기술은 The general technique of using the Init/Load event handler KB 문서에 설명되어 있습니다. 행의 특정 버튼을 숨기는 예 코드 아래

체크 ..

영문

<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"); 
} 

참조 :
ASPxGridView - Hide the control in the DataItemTemplate conditionally

+0

답장을 보내 주셔서 감사합니다. Niranjan. 귀하의 코드를 시도했지만 DevExpress.Web.ASPxButton이 정의되어 있지 않다는 오류가 나타납니다. 그게 무슨 아이디어 야? – Mike

+0

그 문제를 정리했습니다. ASPxButton이 여전히 ASPxEditors 네임 스페이스에있는 경우 이전 버전의 DevExpress를 사용하고 있습니다. – Mike

+0

하지만 기능은 여전히 ​​동일합니다 .. 네임 스페이스를 변경하고 DevExpress 버전에 따라 코드를 수정하도록 참조하십시오. –