2010-03-16 89 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