Hi,
I have written some code to trigger the filtering on one button, however when I click this button the values in the filter textboxes dissappear because a postback has taken place. How do I retain the values in the filtering textboxes after posting back.
Thanks
Robert Smith
protected void Filter()
{
string expression = string.Empty;
string textFilter = string.Empty;
string colName = string.Empty;
if (this.AllowFilteringByColumn)
{
GridFilteringItem item = MasterTableView.GetItems(GridItemType.FilteringItem)[0] as GridFilteringItem;
for (int i = 0; i < Columns.Count; i++)
{
Type colType = Columns[i].DataType;
Telerik.Web.UI.GridColumn column = Columns[i];
colName = MasterTableView.Columns[i].UniqueName;
string dataField = "";
if (item[colName].Controls.Count <= 0)
continue;
string GridColumnType = (MasterTableView.Columns[i].Owner).Columns.FindByUniqueName(colName).GetType().Name;
if (GridColumnType == "GridTemplateColumn")
{
GridTemplateColumn MyColumn = (GridTemplateColumn)(MasterTableView.Columns[i].Owner).Columns.FindByUniqueName(colName);
dataField = MyColumn.DataField;
}else if (GridColumnType == "GridBoundColumn" )
{
GridBoundColumn MyColumn = (GridBoundColumn)(MasterTableView.Columns[i].Owner).Columns.FindByUniqueName(colName);
dataField = MyColumn.DataField;
}
else if (GridColumnType == "GridCheckBoxColumn")
{
GridCheckBoxColumn MyColumn = (GridCheckBoxColumn)(MasterTableView.Columns[i].Owner).Columns.FindByUniqueName(colName);
dataField = MyColumn.DataField;
}
if ((item[colName].Controls.Count > 2))
{
if (item[colName].Controls[1].GetType().Name == "RadComboBox")
{
textFilter = (item[colName].Controls[1] as RadComboBox).SelectedValue;
if (textFilter == "ALL" || textFilter == "")
{
continue;
}
else
{
if (expression != "")
expression += " AND ";
GridDropDownColumn MyColumn = (GridDropDownColumn)(MasterTableView.Columns[i].Owner).Columns.FindByUniqueName(colName);
dataField = MyColumn.DataField;
expression += "([" + dataField + "] = " + textFilter + ")";
continue;
}
}
else
{
//at this stage we don't know what type of control it is and thus can't handle it
continue;
}
}
if (colType == typeof(System.String) && (Columns[i].Visible))
{
textFilter = (item[colName].Controls[0] as TextBox).Text;
if (textFilter != "")
{
if (expression != "")
expression += " AND ";
expression += "([" + dataField + "] LIKE \'%" + textFilter + "%\')";
}
}
if ((colType == typeof(System.Int32) || colType == typeof(System.Double))&& (Columns[i].Visible))
{
textFilter = (item[colName].Controls[0] as TextBox).Text;
if (textFilter != "")
{
if (expression != "")
expression += " AND ";
expression += "([" + dataField + "] = " + textFilter + ")";
}
}
if (colType == typeof(System.DateTime) && (Columns[i].Visible))
{
DateTime dtFilter;
if ((item[colName].Controls[0] as TextBox).Text != "")
{
dtFilter = Convert.ToDateTime((item[colName].Controls[0] as TextBox).Text);
}else
{
continue;
}
if (textFilter != null)
{
if (expression != "")
expression += " AND ";
expression += "([" + dataField + "] = \'" + dtFilter + "\')";
}
this.FilterValues[colName] = dtFilter;
}
if (colType == typeof(System.Boolean) && (Columns[i].Visible))
{
bool boolFilter = (item[colName].Controls[0] as CheckBox).Checked;
if (boolFilter != false)
{
if (expression != "")
expression += " AND ";
expression += "([" + dataField + "] = " + boolFilter + ")";
}
this.FilterValues[colName] = boolFilter;
}
if (textFilter != string.Empty)
{
this.FilterValues[colName] = textFilter;
}
}
}
this.MasterTableView.FilterExpression = expression;
this.MasterTableView.Rebind();
// Loop over the list, writing out the value
foreach (DictionaryEntry myEntry in FilterValues)
{
this.Columns.FindByUniqueName(Convert.ToString(myEntry.Key)).CurrentFilterValue = Convert.ToString(myEntry.Value);
Console.WriteLine(myEntry.Value);
}
}
I have written some code to trigger the filtering on one button, however when I click this button the values in the filter textboxes dissappear because a postback has taken place. How do I retain the values in the filtering textboxes after posting back.
Thanks
Robert Smith
protected void Filter()
{
string expression = string.Empty;
string textFilter = string.Empty;
string colName = string.Empty;
if (this.AllowFilteringByColumn)
{
GridFilteringItem item = MasterTableView.GetItems(GridItemType.FilteringItem)[0] as GridFilteringItem;
for (int i = 0; i < Columns.Count; i++)
{
Type colType = Columns[i].DataType;
Telerik.Web.UI.GridColumn column = Columns[i];
colName = MasterTableView.Columns[i].UniqueName;
string dataField = "";
if (item[colName].Controls.Count <= 0)
continue;
string GridColumnType = (MasterTableView.Columns[i].Owner).Columns.FindByUniqueName(colName).GetType().Name;
if (GridColumnType == "GridTemplateColumn")
{
GridTemplateColumn MyColumn = (GridTemplateColumn)(MasterTableView.Columns[i].Owner).Columns.FindByUniqueName(colName);
dataField = MyColumn.DataField;
}else if (GridColumnType == "GridBoundColumn" )
{
GridBoundColumn MyColumn = (GridBoundColumn)(MasterTableView.Columns[i].Owner).Columns.FindByUniqueName(colName);
dataField = MyColumn.DataField;
}
else if (GridColumnType == "GridCheckBoxColumn")
{
GridCheckBoxColumn MyColumn = (GridCheckBoxColumn)(MasterTableView.Columns[i].Owner).Columns.FindByUniqueName(colName);
dataField = MyColumn.DataField;
}
if ((item[colName].Controls.Count > 2))
{
if (item[colName].Controls[1].GetType().Name == "RadComboBox")
{
textFilter = (item[colName].Controls[1] as RadComboBox).SelectedValue;
if (textFilter == "ALL" || textFilter == "")
{
continue;
}
else
{
if (expression != "")
expression += " AND ";
GridDropDownColumn MyColumn = (GridDropDownColumn)(MasterTableView.Columns[i].Owner).Columns.FindByUniqueName(colName);
dataField = MyColumn.DataField;
expression += "([" + dataField + "] = " + textFilter + ")";
continue;
}
}
else
{
//at this stage we don't know what type of control it is and thus can't handle it
continue;
}
}
if (colType == typeof(System.String) && (Columns[i].Visible))
{
textFilter = (item[colName].Controls[0] as TextBox).Text;
if (textFilter != "")
{
if (expression != "")
expression += " AND ";
expression += "([" + dataField + "] LIKE \'%" + textFilter + "%\')";
}
}
if ((colType == typeof(System.Int32) || colType == typeof(System.Double))&& (Columns[i].Visible))
{
textFilter = (item[colName].Controls[0] as TextBox).Text;
if (textFilter != "")
{
if (expression != "")
expression += " AND ";
expression += "([" + dataField + "] = " + textFilter + ")";
}
}
if (colType == typeof(System.DateTime) && (Columns[i].Visible))
{
DateTime dtFilter;
if ((item[colName].Controls[0] as TextBox).Text != "")
{
dtFilter = Convert.ToDateTime((item[colName].Controls[0] as TextBox).Text);
}else
{
continue;
}
if (textFilter != null)
{
if (expression != "")
expression += " AND ";
expression += "([" + dataField + "] = \'" + dtFilter + "\')";
}
this.FilterValues[colName] = dtFilter;
}
if (colType == typeof(System.Boolean) && (Columns[i].Visible))
{
bool boolFilter = (item[colName].Controls[0] as CheckBox).Checked;
if (boolFilter != false)
{
if (expression != "")
expression += " AND ";
expression += "([" + dataField + "] = " + boolFilter + ")";
}
this.FilterValues[colName] = boolFilter;
}
if (textFilter != string.Empty)
{
this.FilterValues[colName] = textFilter;
}
}
}
this.MasterTableView.FilterExpression = expression;
this.MasterTableView.Rebind();
// Loop over the list, writing out the value
foreach (DictionaryEntry myEntry in FilterValues)
{
this.Columns.FindByUniqueName(Convert.ToString(myEntry.Key)).CurrentFilterValue = Convert.ToString(myEntry.Value);
Console.WriteLine(myEntry.Value);
}
}
