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