//incremental filtering for large datasets on combos /// <summary> /// incremental filtering and partial loading of vessels for speed /// both ItemsRequestedByFilterCondition and ItemRequestedByValue must be set up for this to work /// </summary> /// <param name="source"></param> /// <param name="e"></param> protected void dxcboVesselID_ItemsRequestedByFilterCondition(object source, DevExpress.Web.ASPxEditors.ListEditItemsRequestedByFilterConditionEventArgs e) { DevExpress.Web.ASPxEditors.ASPxComboBox _combo = (DevExpress.Web.ASPxEditors.ASPxComboBox)source; string _filter = !string.IsNullOrEmpty(e.Filter) ? e.Filter : ""; //use datareaders - much faster than loading into collections string[] _cols = { "VoyageID", "Joined", "ETS", "ETA", "DestinationPortID", "OriginPortID" }; string[] _sort = { "Joined" }; //additional filters on this dll string _originportid = this.dxhfOrder.Contains("ptstart") ? this.dxhfOrder.Get("ptstart").ToString() : ""; string _destportid = this.dxhfOrder.Contains("ptend") ? this.dxhfOrder.Get("ptend").ToString() : ""; if (_originportid != "" && _destportid != "") { //SubSonic.SqlQuery _query = DAL.Logistics.DB.Select(_cols).From(DAL.Logistics.Tables.NameAndAddressBook).Paged(e.BeginIndex + 1, e.EndIndex + 1, "CompanyID").WhereExpression("CompanyName").Like(string.Format("%{0}%", e.Filter.ToString())); SubSonic.SqlQuery _query = DAL.Logistics.DB.Select(_cols).From("Page2VesselView").Paged(e.BeginIndex + 1, e.EndIndex + 1, "VoyageID").Where("Joined").Like(string.Format("{0}%", e.Filter.ToString())).And("DestinationPortID").IsEqualTo(_destportid).And("OriginPortID").IsEqualTo(_originportid).OrderAsc(_sort); string test = _query.ToString(); IDataReader _rd = _query.ExecuteReader(); _combo.DataSource = _rd; _combo.ValueField = "VoyageID"; _combo.TextField = "Joined"; _combo.DataBindItems(); } }