2010-03-16 91 views
0

然而,隨着DevExpress的AspxGridView :)另一個問題DevExpress的AspxGridView濾波器的ObjectDataSource

上下文:

  • 一頁

  • 在頁面中,自定義控制

  • 在自定義控件,一個AspxDropDown

  • 的AspxDropDown,具有DropDownWindowTemplate

  • 在DropDownItemTemplate,我添加一個GridView和尋呼/排序/過濾啓用的ObjectDataSource

  • 當處理的ObjectDataSource的Selecting事件,我應該設置爲濾波器參數數據源。篩選參數應該來自AspxGridView的FilterRow(最好使用AspxGriedView.FilterExpression屬性)。

問題:AspxGriedView.FilterExpression屬性未設置爲正確的值(由用戶設置)。

有沒有人找到我想要在這裏做的很好的實現?

謝謝你一堆。

:)

回答

1

我終於設法解決了這個問題。

不是一個好的解決方案,但仍然是解決它的一種方法。

所以..「解決方案」是在每個AfterPerformCallback事件中數據綁定網格。

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

正如我所說,這不是一個好的解決方案。

+0

我已經標記了答案是正確的,但如果有人有更好的解決方案,請不要猶豫! – 2010-03-22 09:40:11

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(); 
     } 
    } 
+0

作爲一個額外的免費Grid_PerformDataSelect(對象發件人,EventArgs e)阻止多個執行時,其他回調發生在同一頁上的其他控件。在客戶端,我在網格上連接了2個事件,這些事件調用函數來設置一個hdnGridCallback,我把它放在網格beforeperformcallback上的母版頁上。 – KenF 2011-09-07 16:09:01