0

DevExpress AspxGridView 的另一个问题 :)

上下文:

  • 一页
  • 在页面中,一个自定义控件
  • 在自定义控件中,一个 AspxDropDown
  • AspxDropDown一个DropDownWindowTemplate
  • 在 中DropDownItemTemplate,我添加了一个GridView和一个启用的分页/排序/过滤ObjectDataSource
  • 在处理 的选择事件时ObjectDataSource,我应该为数据源设置过滤器参数。那里的过滤器参数应该来自FilterRowAspxGridView(最好使用AspxGridView.FilterExpression属性)。

问题:该AspxGridView.FilterExpression属性未设置为正确的值(由用户设置)。

有没有人找到一个很好的实现我在这里尝试做的事情?

谢谢一堆。

:)

4

2 回答 2

1

我终于设法解决了这个问题。

不是一个好的解决方案,但仍然是一种解决方法。

所以..“解决方案”是在每个 AfterPerformCallback 事件上对网格进行数据绑定。

void grid_AfterPerformCallback(object sender, ASPxGridViewAfterPerformCallbackEventArgs e)
    {
        ((DevExpress.Web.ASPxGridView.ASPxGridView)sender).DataBind();
    }

正如我所说,这不是一个好的解决方案。

于 2010-03-22T09:34:00.043 回答
0

每个 DevExpress 的答案是正确的 FilterExpression 在数据绑定时更新。

他们声称在 BeforePerformDataSelect 中,您将看到正确的值。

我有 1 个连接到正确执行此操作的 SqlDataSource 的网格,而另一个未正确执行此操作的网格...所以您的里程可能会有所不同。

我的第二个网格没有遵守这个原则,所以我在 AfterPerformCallback() 中集成了另一个人的概念重新绑定。诀窍是防止双重查询。这段代码还演示了如何劫持 devexpress 来构建自己的 SQL。显然,这是来自我的工作项目,所以请发挥您的想象力,我拥有您没有的功能......

这是相关的html和代码:

<dxwgv:ASPxGridView ID="grid" runat="server" 
    KeyFieldName="OrderID"
    OnAfterPerformCallback="grid_AfterPerformCallback"
    OnBeforePerformDataSelect="grid_BeforePerformDataSelect"
    AutoGenerateColumns="True"
    SettingsDetail-AllowOnlyOneMasterRowExpanded="true" 
    Settings-ShowFilterRow="true"
    Settings-ShowFilterRowMenu="True"
    SettingsBehavior-AllowSelectSingleRowOnly="true"
    OnDetailRowExpandedChanged="Grid_DetailRowExpandedChanged" 
    Styles-Cell-Cursor="pointer"
    SettingsBehavior-EnableRowHotTrack="true" 
    CssFilePath="~/App_Themes/Office2010Blue/{0}/styles.css"
    CssPostfix="Office2010Blue"
    SettingsPager-PageSize="<%# this._GridRowsPerPage %>"
    SettingsBehavior-ColumnResizeMode="Control" 
    SettingsCustomizationWindow-PopupHorizontalAlign="WindowCenter" 
    SettingsCustomizationWindow-PopupVerticalAlign="WindowCenter"
    SettingsCustomizationWindow-Width="300px"
    Settings-ShowHorizontalScrollBar="true" 
    Width="<%# this._GetWidth() %>"
    SettingsPager-AlwaysShowPager="true"
    SettingsCookies-Enabled="true"
    >
    <Columns>
        <dxwgv:GridViewDataColumn FieldName="PriorityType" Visible="false" />
        <dxwgv:GridViewDataColumn FieldName="basePatientID" Caption="PTID" />
        <dxwgv:GridViewDataColumn FieldName="FirstName" />
        <dxwgv:GridViewDataColumn FieldName="LastName" />
        <dxwgv:GridViewDataColumn FieldName="Employer" />
        <dxwgv:GridViewDataColumn FieldName="Insurer" />
        <dxwgv:GridViewDataColumn FieldName="ClaimJurisdiction" Caption="Jurisdiction" />
        <dxwgv:GridViewDataColumn FieldName="DOB" Visible="false" />
        <dxwgv:GridViewDataColumn FieldName="DateOfInjury" Caption="DOI" Visible="false" />
        <dxwgv:GridViewDataColumn FieldName="PostalCode" Caption="ZipCode" Visible="false" />
        <dxwgv:GridViewDataColumn FieldName="FirstCareDate" Visible="false" />
        <dxwgv:GridViewDataColumn FieldName="LastCareDate" Visible="false" />
        <dxwgv:GridViewDataColumn FieldName="IntakeStatus" />
        <dxwgv:GridViewDataColumn FieldName="SchedulingNeeded" />
        <dxwgv:GridViewDataColumn FieldName="InitialReferralDate" Caption="Date Assigned" />

        <dxwgv:GridViewDataColumn FieldName="Orders_UpdatedOn" Caption="Last Follow-up" />


        <dxwgv:GridViewDataColumn FieldName="RequestTypes" Caption="Service" Visible="false" />
        <dxwgv:GridViewDataColumn FieldName="FacilityGroups" Caption="Provider" Visible="false" />
        <dxwgv:GridViewDataColumn FieldName="ICD9Codes" Visible="false" />
        <dxwgv:GridViewDataColumn FieldName="CPTCodes" Visible="false" />
        <dxwgv:GridViewDataColumn FieldName="OrderCategory" Caption="Source" />
        <dxwgv:GridViewDataColumn FieldName="CaseCoordinator" Visible="false" />
        <dxwgv:GridViewDataColumn FieldName="SchedulingTier" Visible="false" Caption="Tier" />
        <dxwgv:GridViewDataColumn FieldName="LockRequest_UserName" Visible="true" Caption="InUseBy" />
    </Columns>
    <Styles CssFilePath="~/App_Themes/Office2010Blue/{0}/styles.css" CssPostfix="Office2010Blue">
        <Header ImageSpacing="5px" SortingImageSpacing="5px">
        </Header>
        <LoadingPanel ImageSpacing="10px">
        </LoadingPanel>
    </Styles>
    <ImagesFilterControl>
        <LoadingPanel Url="~/App_Themes/Office2010Blue/Editors/Loading.gif">
        </LoadingPanel>
    </ImagesFilterControl>
    <Images SpriteCssFilePath="~/App_Themes/Office2010Blue/{0}/sprite.css">
        <LoadingPanelOnStatusBar Url="~/App_Themes/Office2010Blue/GridView/gvLoadingOnStatusBar.gif">
        </LoadingPanelOnStatusBar>
        <LoadingPanel Url="~/App_Themes/Office2010Blue/GridView/Loading.gif">
        </LoadingPanel>
    </Images>
    <ClientSideEvents ContextMenu="grid_ShowContextMenu" />
    <ClientSideEvents BeginCallback="function(s, e) { OnBeginCallback(s,e); }" />
    <ClientSideEvents EndCallback="function(s, e) { OnEndCallback(s,e); }" />
    <StylesEditors>
        <ProgressBar Height="25px">
        </ProgressBar>
    </StylesEditors>

</dxwgv:ASPxGridView>
<asp:SqlDataSource ID="GridSource" runat="server"></asp:SqlDataSource>

这是 BeforePerformDataSelect 的事件处理程序:

私人布尔_DataBindingCompleted = false;

    protected void grid_BeforePerformDataSelect(object sender, EventArgs e)
    {
        if (_DataBindCompleted) Grid_PerformDataSelect(sender, e);
    }

    protected override void Grid_PerformDataSelect(bool ClearSelection)
    {
        if (ClearSelection) this.grid.Selection.UnselectAll();

        GridSource.ProviderName = System.Configuration.ConfigurationManager.ConnectionStrings["mysql"].ProviderName;
        GridSource.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["mysql"].ConnectionString;
        SetupSearch();
        //if (this.FilterContext.Count > 0 || !string.IsNullOrEmpty(grid.FilterExpression))
        //{
        string FilterSQL = DevExpressUtils.GetMySQLFilterExpression(grid);
        string OrderBySQL = DevExpressUtils.GetSQLOrderByExpression(grid, "OrderID");
        //FilterSQL = FilterSQL.Replace("[PatientID]", "vwPatients."+ Patient.PRIMARYKEY);
        if (Utils.GetAppSettingBool("MYSQL"))
        {
            GridSource.SelectCommand = this.MP.CurrentUser.GetEOSHeaderSQL(this.FilterContext, FilterSQL, "");
        }
        else
        {
            GridSource.SelectCommand = "";
        }

    }

    protected override void Grid_PerformDataSelect(object sender, EventArgs e)
    {
        bool IsFromParent = this.ClientID.StartsWith(this.MP.GridCallback);
        if (grid.Visible && (!this.Page.IsCallback ||
                ((this.MP.GridCallback == this.grid.ClientID && (this.MP.GridCallbackCommand != "SHOWDETAILROW" || this.IsDetailGrid))
                    || (this.MP.GridCallbackCommand == "SHOWDETAILROW" && IsFromParent)
                    )
                )
           )
        {
            Grid_PerformDataSelect(false);
        }
    }

    protected void grid_AfterPerformCallback(object sender, ASPxGridViewAfterPerformCallbackEventArgs e)
    {
        _DataBindCompleted = true;
        ((DevExpress.Web.ASPxGridView.ASPxGridView)sender).DataBind();
    }

    protected void Page_Init(object sender, EventArgs e)
    {
        grid.DataSource = GridSource;
    }

    protected new void Page_Load(object sender, EventArgs e)
    {
        this.grid.ClientInstanceName = this.grid.ClientID;
        if (!this.IsPostBack)
        {
            _DataBindCompleted = true;
            grid.DataBind();
        }
    }
于 2011-09-07T07:18:28.647 回答