【问题标题】:Conditional Display of Custom Button on DevExpress ASPxGridView in VB.NETVB.NET DevExpress ASPxGridView 自定义按钮的条件显示
【发布时间】:2017-03-18 01:17:52
【问题描述】:

我有一个 ASPxGridView 控件,它需要一个有条件可见的按钮。我已经搜索并阅读了几篇文章,但没有找到适合我特定情况的解决方法。该按钮称为 btnAllocatePlan,仅当名为 PayPlanFlg 的列中的值为 true 时才应显示该按钮。下面是网格的标记和我在代码隐藏中尝试的两件事,这是我宁愿这样做的地方。实际上,这些事件都没有触发。非常感谢任何帮助!

<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

【问题讨论】:

    标签: vb.net devexpress aspxgridview


    【解决方案1】:

    最好的方法是处理 Button 的 Init/Load 事件。这个 推荐的技术在The general technique of using the Init/Load event handler KB 文章中进行了描述。

    查看下面的示例代码以连续隐藏特定按钮..

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

    参考:
    ASPxGridView - Hide the control in the DataItemTemplate conditionally

    【讨论】:

    • 感谢您的回复,尼兰詹。我试过你的代码,但我收到一个错误,说 DevExpress.Web.ASPxButton 没有定义。有什么想法是什么原因造成的吗?
    • 我对这个问题进行了排序。我使用的是旧版本的 DevExpress,当时 ASPxButton 仍在 ASPxEditors 命名空间中。
    • 但是你的功能还是一样的。只要改变命名空间并参考代码来根据你的 DevExpress 版本修改它。
    猜你喜欢
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多