This is a migrated thread and some comments may be shown as answers.

set default filter value

1 Answer 295 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Igor Ashmetkov
Top achievements
Rank 1
Igor Ashmetkov asked on 29 Jan 2014, 09:24 AM
    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?

<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;
        }
 
    }

1 Answer, 1 is accepted

Sort by
0
Igor Ashmetkov
Top achievements
Rank 1
answered on 29 Jan 2014, 09:55 AM
Problem resolved when I set
RadGrid1.MasterTableView.GetColumn("DATEIN").CurrentFilterFunction
Tags
Grid
Asked by
Igor Ashmetkov
Top achievements
Rank 1
Answers by
Igor Ashmetkov
Top achievements
Rank 1
Share this question
or