Hello.
I`m using rad grid with binding in NeedDataSource. I`m using Filtering for "manual" filtering: in NeedDataSourse I read filtervalues for all columns and send this values as parameters to StoredProcedure into Database.
I need to set default filter on column "DATEIN" on page loading/
Everything works fine exept one: when I change any filter of any column( except column "DATEIN") , default filter value on column "DATEIN" reseting.
If I change filter "DATEIN" manualy, it works fine and not reset after changing other filters.
What is wrong?
I`m using rad grid with binding in NeedDataSource. I`m using Filtering for "manual" filtering: in NeedDataSourse I read filtervalues for all columns and send this values as parameters to StoredProcedure into Database.
I need to set default filter on column "DATEIN" on page loading/
Everything works fine exept one: when I change any filter of any column( except column "DATEIN") , default filter value on column "DATEIN" reseting.
If I change filter "DATEIN" manualy, it works fine and not reset after changing other filters.
What is wrong?
<telerik:RadGrid ID="RadGrid1" runat="server" AllowFilteringByColumn="True" EnableLinqExpressions="False" AllowPaging="True" PageSize="50" OnNeedDataSource="RadGrid1_NeedDataSource" AllowCustomPaging="True" AllowSorting="True" CellSpacing="0" GridLines="None" Height="100%" style="margin-top: 0px" Culture="ru-RU" OnItemDataBound="RadGrid1_ItemDataBound" OnPreRender="RadGrid1_PreRender"> <ClientSettings AllowColumnsReorder="true" ColumnsReorderMethod="Reorder"> <Selecting AllowRowSelect="true" /> <Resizing AllowColumnResize="true" ResizeGridOnColumnResize="true" /> <Scrolling AllowScroll="True" UseStaticHeaders="True" /> <ClientEvents OnRowDblClick="rowDblClick" /> </ClientSettings> <PagerStyle Mode="NextPrevNumericAndAdvanced" /> <MasterTableView AutoGenerateColumns="False" DataKeyNames="PKALERTSOBJ,PKSTATUS" Name="Parent"> <CommandItemSettings ExportToPdfText="Export to PDF"></CommandItemSettings> <RowIndicatorColumn Visible="True" FilterControlAltText="Filter RowIndicator column"> <HeaderStyle Width="20px"></HeaderStyle> </RowIndicatorColumn> <ExpandCollapseColumn Visible="True" UniqueName="ExpandColumn" FilterControlAltText="Filter ExpandColumn column"> <HeaderStyle Width="20px"></HeaderStyle> </ExpandCollapseColumn> <DetailTables> <telerik:GridTableView Name="Child" DataSourceID="eDsAlertDetails" AutoGenerateColumns="false" AllowFilteringByColumn="false" DataKeyNames="PKALERTSOBJSAVEDPERSONS" Width="90%"> <ParentTableRelation> <telerik:GridRelationFields DetailKeyField="FKALERTSOBJ" MasterKeyField="PKALERTSOBJ" /> </ParentTableRelation> <Columns> <telerik:GridBoundColumn DataField="PERSONID" UniqueName="PERSONID" Display="false" /> <telerik:GridBoundColumn DataField="FKALERTSOBJ" Display="false" UniqueName="FKALERTSOBJ" /> <telerik:GridBoundColumn DataField="NAMES" HeaderText="ФИО/Наименование" UniqueName="NAMES" /> <telerik:GridBoundColumn DataField="BIRTH" HeaderText="Дата рождения" UniqueName="BIRTH" HeaderStyle-Width="100" /> </Columns> </telerik:GridTableView> </DetailTables> <Columns> <telerik:GridBoundColumn DataField="PKALERTSOBJ" DataType="System.Decimal" FilterControlAltText="Filter PKALERTSOBJ column" HeaderText="ID" HeaderTooltip="Идентификатор предупреждения" ReadOnly="True" SortExpression="PKALERTSOBJ" UniqueName="PKALERTSOBJ" CurrentFilterFunction="Contains" AutoPostBackOnFilter="true" ShowFilterIcon="false" FilterControlWidth="100%" HeaderStyle-Width="50"> </telerik:GridBoundColumn> <telerik:GridTemplateColumn DataField="PKSTATUS" FilterControlAltText="Filter PKSTATUS column" HeaderText="Статус" SortExpression="PKSTATUS" UniqueName="PKSTATUS" HeaderStyle-Width="80"> <FilterTemplate> <telerik:RadComboBox ID="RadComboBoxKey" SelectedValue='<%# ((GridItem)Container).OwnerTableView.GetColumn("PKSTATUS").CurrentFilterValue %>' Width="100%" DropDownWidth="200px" AppendDataBoundItems="true" runat="server" OnClientSelectedIndexChanged="KeyIndexChanged" > <Items> <telerik:RadComboBoxItem Text="Все" /> <telerik:RadComboBoxItem Text="Совпадения отсутствуют" Value="0" /> <telerik:RadComboBoxItem Text="Совпадение" Value="1" /> </Items> </telerik:RadComboBox> <telerik:RadScriptBlock ID="RadScriptBlock1" runat="server"> <script type="text/javascript"> function KeyIndexChanged(sender, args) { var tableView = $find("<%# ((GridItem)Container).OwnerTableView.ClientID %>"); tableView.filter("PKSTATUS", args.get_item().get_value(), "EqualTo"); } </script> </telerik:RadScriptBlock> </FilterTemplate> <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "PKSTATUS").ToString()=="0"?"Совпадения отсутствуют":"Совпадение"%>' ></asp:Label> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridBoundColumn DataField="DOCTYPE" FilterControlAltText="Filter DOCTYPE column" HeaderText="Тип проверки" SortExpression="DOCTYPE" UniqueName="DOCTYPE" AllowFiltering="false" HeaderStyle-Width="100"> <%-- <FilterTemplate> <telerik:RadComboBox ID="cmbDocType" SelectedValue='<%# ((GridItem)Container).OwnerTableView.GetColumn("DOCTYPE").CurrentFilterValue %>' Width="100%" DropDownWidth="200px" AppendDataBoundItems="true" runat="server" OnClientSelectedIndexChanged="KeyIndexChanged2" > <Items> <telerik:RadComboBoxItem Text="Все" /> <telerik:RadComboBoxItem Text="клиент" Value="клиент" /> <telerik:RadComboBoxItem Text="документ МЦИ" Value="документ МЦИ" /> <telerik:RadComboBoxItem Text="документ SWIFT" Value="документ SWIFT" /> <telerik:RadComboBoxItem Text="ручной поиск" Value="ручной поиск" /> </Items> </telerik:RadComboBox> <telerik:RadScriptBlock ID="RadScriptBlock2" runat="server"> <script type="text/javascript"> function KeyIndexChanged2(sender, args) { var tableView = $find("<%# ((GridItem)Container).OwnerTableView.ClientID %>"); tableView.filter("DOCTYPE", args.get_item().get_value(), "EqualTo"); } </script> </telerik:RadScriptBlock> </FilterTemplate>--%> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="DOCID" FilterControlAltText="Filter ID column" HeaderText="№ документа" HeaderTooltip="Номер проверяемо документа/Уникальный идентификатор проверяемой сущности в проверяющей системе" SortExpression="DOCID" UniqueName="DOCID" CurrentFilterFunction="EqualTo" AutoPostBackOnFilter="true" ShowFilterIcon="false" FilterControlWidth="100%" HeaderStyle-Width="100"> </telerik:GridBoundColumn> <telerik:GridTemplateColumn DataField="SUBSYSTEMID" HeaderText="Подсистема" HeaderTooltip="Вызывающая подсистема" UniqueName="SUBSYSTEMID" HeaderStyle-Width="100"> <ItemTemplate> <asp:Label ID="Label2" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "SHORTNAME").ToString() %>' ></asp:Label> </ItemTemplate> <FilterTemplate> <telerik:RadComboBox ID="cmbDocType" DataTextField="shortname" DataValueField="pkrefendpoint" SelectedValue='<%# ((GridItem)Container).OwnerTableView.GetColumn("SUBSYSTEMID").CurrentFilterValue %>' Width="100%" DropDownWidth="200px" AppendDataBoundItems="true" DataSourceID="sqlDsSubsystems" runat="server" OnClientSelectedIndexChanged="KeyIndexChanged3" > <Items> <telerik:RadComboBoxItem Text="Все" /> </Items> </telerik:RadComboBox> <telerik:RadScriptBlock ID="RadScriptBlock3" runat="server"> <script type="text/javascript"> function KeyIndexChanged3(sender, args) { var tableView = $find("<%# ((GridItem)Container).OwnerTableView.ClientID %>"); tableView.filter("SUBSYSTEMID", args.get_item().get_value(), "EqualTo"); } </script> </telerik:RadScriptBlock> </FilterTemplate> </telerik:GridTemplateColumn> <telerik:GridBoundColumn DataField="COINCIDENCE" FilterControlAltText="Filter COINCIDENCE column" HeaderText="Текст" HeaderTooltip="Содержание проверяемой сущности" SortExpression="COINCIDENCE" UniqueName="COINCIDENCE" CurrentFilterFunction="Contains" AutoPostBackOnFilter="true" ShowFilterIcon="false" FilterControlWidth="100%"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="DATEIN" FilterControlAltText="Filter DATEIN column" HeaderText="Дата проверки" SortExpression="DATEIN" UniqueName="DATEIN" DataType="System.DateTime" HeaderStyle-Width="170" > <FilterTemplate> <telerik:RadDatePicker ID="RadDatePicker1" runat="server" AutoPostBack="false" SelectedDate='<%# amlblnew.CustomConverter.GetDateOrNull(((GridItem)Container).OwnerTableView.GetColumn("DATEIN").CurrentFilterValue) %>' > <ClientEvents OnDateSelected="onDateSelected" /> </telerik:RadDatePicker> <telerik:RadScriptBlock ID="RadScriptBlock4" runat="server"> <script type="text/javascript"> function onDateSelected(sender, args) { var tableView = $find("<%# ((GridItem)Container).OwnerTableView.ClientID %>"); var d = sender.get_selectedDate(); if (d != null) { var curDate = d.getDate(); var curMonth = d.getMonth() + 1; var curYear = d.getFullYear(); var strDate = curDate + '.' + curMonth + '.' + curYear; tableView.filter("DATEIN", strDate, "EqualTo"); } else { tableView.filter("DATEIN", null, "NoFilter"); } } </script> </telerik:RadScriptBlock> </FilterTemplate> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="USERNAME" FilterControlAltText="Filter USERNAME column" HeaderText="Инициатор проверки" SortExpression="USERNAME" UniqueName="USERNAME" CurrentFilterFunction="Contains" AutoPostBackOnFilter="true" ShowFilterIcon="false" FilterControlWidth="100%" HeaderStyle-Width="100"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="AMMOUNT" FilterControlAltText="Filter AMMOUNT column" HeaderText="Сумма" HeaderTooltip="Сумма документа (при проверке типа 'Документ МЦИ')" SortExpression="AMMOUNT" UniqueName="AMMOUNT" DataType="System.Decimal" CurrentFilterFunction="EqualTo" AutoPostBackOnFilter="true" ShowFilterIcon="false" FilterControlWidth="100%" HeaderStyle-Width="100"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="SEARCHQUERY" FilterControlAltText="Filter SEARCHQUERY column" HeaderText="Поисковая фраза" HeaderTooltip="При проверке во внешних системах в данном поле отображается поисковая фраза на которую произошло срабатывание. При ручной проверке отображается строка, которую пользователь ввел в Шаблон поиска" SortExpression="SEARCHQUERY" UniqueName="SEARCHQUERY" CurrentFilterFunction="EqualTo" AutoPostBackOnFilter="true" ShowFilterIcon="false" FilterControlWidth="100%" HeaderStyle-Width="200"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="PKSTATUS" Display="false" UniqueName="PKSTATUSID"> </telerik:GridBoundColumn> </Columns> </MasterTableView> <FilterMenu EnableImageSprites="False"></FilterMenu> </telerik:RadGrid> <asp:EntityDataSource ID="eDsAlerts" runat="server" ConnectionString="name=AmlblEntities" DefaultContainerName="AmlblEntities" EnableFlattening="False" EntitySetName="V_ALERTS" OrderBy="it.PKALERTSOBJ" OnSelecting="eDsAlerts_Selecting"> </asp:EntityDataSource> <asp:EntityDataSource ID="eDsAlertDetails" runat="server" ConnectionString="name=AmlblEntities" DefaultContainerName="AmlblEntities" EnableFlattening="False" EntitySetName="V_ALERTSDETAILS" Where="it.[FKALERTSOBJ] = @fkalertsobj"> <WhereParameters> <asp:SessionParameter Name="fkalertsobj" SessionField="PKALERTSOBJ" Type="Int32" /> </WhereParameters> </asp:EntityDataSource>protected void RadGrid1_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e) { Search(); } private void Search() { if (!Page.IsPostBack) { RadGrid1.MasterTableView.FilterExpression = string.Format("(DATEIN = '{0}')", DateTime.Now.Date.ToString("yyyy-MM-dd HH:mm"));//"(it.DATEIN = DATETIME'" + DateTime.Now.Date.ToString("yyyy-MM-dd HH:mm") + "')"; RadGrid1.MasterTableView.GetColumn("DATEIN").CurrentFilterValue = DateTime.Now.Date.ToString(); } using (OracleConnector con = new OracleConnector()) { OracleCommand cmd = con.GetCommand("amlbl.alerts_search.find"); cmd.BindByName = true; OracleParameter p_rowCount = new OracleParameter(); p_rowCount.ParameterName = "p_rowCount"; p_rowCount.OracleDbType = OracleDbType.Int32; p_rowCount.Direction = ParameterDirection.Output; cmd.Parameters.Add(p_rowCount); OracleParameter p_result = new OracleParameter(); p_result.ParameterName = "p_result"; p_result.OracleDbType = OracleDbType.RefCursor; p_result.Direction = ParameterDirection.Output; cmd.Parameters.Add(p_result); OracleParameter p_startRow = new OracleParameter(); p_startRow.ParameterName = "p_startRow"; p_startRow.OracleDbType = OracleDbType.Int32; p_startRow.Value = RadGrid1.CurrentPageIndex * RadGrid1.PageSize + 1;/////////////// cmd.Parameters.Add(p_startRow); OracleParameter p_endRow = new OracleParameter(); p_endRow.ParameterName = "p_endRow"; p_endRow.OracleDbType = OracleDbType.Int32; p_endRow.Value = (RadGrid1.CurrentPageIndex + 1) * RadGrid1.PageSize;/////////////// cmd.Parameters.Add(p_endRow); string[] expressions = RadGrid1.MasterTableView.FilterExpression.Split(new string[] { "AND" }, StringSplitOptions.None); RadGrid1.MasterTableView.FilterExpression = string.Empty; GridColumn[] renderedColumns = RadGrid1.MasterTableView.RenderColumns; OracleParameter p_alertid = new OracleParameter(); p_alertid.ParameterName = "p_alertid"; p_alertid.OracleDbType = OracleDbType.Int32; p_alertid.Value = GetFilterValueByName(renderedColumns, "PKALERTSOBJ"); cmd.Parameters.Add(p_alertid); OracleParameter p_pkstatus = new OracleParameter(); p_pkstatus.ParameterName = "p_pkstatus"; p_pkstatus.OracleDbType = OracleDbType.Int32; p_pkstatus.Value = string.IsNullOrEmpty(status)?GetFilterValueByName(renderedColumns, "PKSTATUS") : status; cmd.Parameters.Add(p_pkstatus); OracleParameter p_docid = new OracleParameter(); p_docid.ParameterName = "p_docid"; p_docid.OracleDbType = OracleDbType.Varchar2; p_docid.Value = GetFilterValueByName(renderedColumns, "DOCID"); cmd.Parameters.Add(p_docid); OracleParameter p_subsystemid = new OracleParameter(); p_subsystemid.ParameterName = "p_subsystemid"; p_subsystemid.OracleDbType = OracleDbType.Int32; p_subsystemid.Value = GetFilterValueByName(renderedColumns, "SUBSYSTEMID"); cmd.Parameters.Add(p_subsystemid); OracleParameter p_coincidence = new OracleParameter(); p_coincidence.ParameterName = "p_coincidence"; p_coincidence.OracleDbType = OracleDbType.Varchar2; p_coincidence.Value = GetFilterValueByName(renderedColumns, "COINCIDENCE"); cmd.Parameters.Add(p_coincidence); OracleParameter p_datein = new OracleParameter(); p_datein.ParameterName = "p_datein"; p_datein.OracleDbType = OracleDbType.Date; p_datein.Value =CustomConverter.GetDateOrNull(GetFilterValueByName(renderedColumns, "DATEIN")); cmd.Parameters.Add(p_datein); OracleParameter p_username = new OracleParameter(); p_username.ParameterName = "p_username"; p_username.OracleDbType = OracleDbType.Varchar2; p_username.Value = GetFilterValueByName(renderedColumns, "USERNAME"); cmd.Parameters.Add(p_username); OracleParameter p_ammount = new OracleParameter(); p_ammount.ParameterName = "p_ammount"; p_ammount.OracleDbType = OracleDbType.Varchar2; p_ammount.Value = GetFilterValueByName(renderedColumns, "AMMOUNT"); cmd.Parameters.Add(p_ammount); OracleParameter p_searchquery = new OracleParameter(); p_searchquery.ParameterName = "p_searchquery"; p_searchquery.OracleDbType = OracleDbType.Varchar2; p_searchquery.Value = GetFilterValueByName(renderedColumns, "SEARCHQUERY"); cmd.Parameters.Add(p_searchquery); if (con.ExecuteCommandMsgExceptionOnly(cmd, this))//cmd.ExecuteNonQuery(); { OracleDataReader dr = ((OracleRefCursor)p_result.Value).GetDataReader(); DataTable dt = new DataTable(); for (int i = 0; i < dr.FieldCount; i++) { dt.Columns.Add(dr.GetName(i)); } object[] values = new object[dr.FieldCount]; while (dr.Read()) { dr.GetValues(values); dt.Rows.Add(values); } if (dt.Rows.Count != 0) { //RadGrid1.PageSize = dt.Rows.Count; RadGrid1.VirtualItemCount = int.Parse(p_rowCount.Value.ToString()); RadGrid1.DataSource = dt; } else { RadGrid1.VirtualItemCount = 0; RadGrid1.DataSource = new DataTable(); } dr.Dispose(); p_result.Dispose(); } else { RadGrid1.VirtualItemCount = 0; RadGrid1.DataSource = new DataTable(); } } } private static string GetFilterValueByName(GridColumn[] columns, string paramName) { var p = from t in columns where t.UniqueName.Contains(paramName) & t.SupportsFiltering() select t; if (p.Count() == 0) { return null; } else { return string.IsNullOrEmpty(p.First().CurrentFilterValue) ? null : p.First().CurrentFilterValue; } }