Iam Facing issue(creating dynamic column with filtertemplate in radcomboboxes in rad grid )
We are using radgrid.We are generating dynamic columns with combobox in filter template .We are generating Column dynamically.
Issue is Combobox selected changed event is not woring.
i am doing this programmatically using ITEMPLATE interface by inheriting in a class and calling InstantiateIn method using Creating combox control.
7 Answers, 1 is accepted
0
Accepted
Princy
Top achievements
Rank 2
answered on 25 Sep 2013, 11:15 AM
Hi Naga,
I guess you are trying to create a filter template with RadComboBox.Please try the following code snippet.
ASPX:
C#:
Thanks,
Princy
I guess you are trying to create a filter template with RadComboBox.Please try the following code snippet.
ASPX:
<
telerik:RadScriptManager
ID
=
"RadScriptManager1"
runat
=
"server"
>
</
telerik:RadScriptManager
>
<
telerik:RadAjaxManager
ID
=
"RadAjaxManager1"
runat
=
"server"
>
<
AjaxSettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"PlaceHolder1"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"PlaceHolder1"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
AjaxSettings
>
</
telerik:RadAjaxManager
>
<
asp:PlaceHolder
ID
=
"PlaceHolder1"
runat
=
"server"
></
asp:PlaceHolder
>
C#:
DataTable dt;
RadGrid RadGrid1;
private
void
Page_Init(
object
sender, System.EventArgs e)
{
RadGrid1 =
new
RadGrid();
RadGrid1.ID =
"RadGrid1"
;
RadGrid1.AutoGenerateColumns =
false
;
RadGrid1.AllowPaging =
true
;
RadGrid1.AllowSorting =
true
;
RadGrid1.AllowFilteringByColumn =
true
;
RadGrid1.EnableLinqExpressions =
false
;
RadGrid1.PagerStyle.AlwaysVisible =
true
;
RadGrid1.NeedDataSource +=
new
GridNeedDataSourceEventHandler(RadGrid1_NeedDataSource);
dt = GetDataTable(
"SELECT Country FROM Customers"
);
string
ColumnName =
"Country"
;
GridBoundColumn templateColumn;
templateColumn =
new
GridBoundColumn();
templateColumn.FilterTemplate =
new
MyTemplate(ColumnName,RadGrid1);
templateColumn.DataField = ColumnName;
templateColumn.HeaderText = ColumnName;
templateColumn.UniqueName = ColumnName;
this
.RadGrid1.MasterTableView.Columns.Add(templateColumn);
GridBoundColumn boundColumn;
boundColumn =
new
GridBoundColumn();
RadGrid1.MasterTableView.Columns.Add(boundColumn);
boundColumn.DataField =
"CompanyName"
;
boundColumn.HeaderText =
"CompanyName"
;
boundColumn =
new
GridBoundColumn();
RadGrid1.MasterTableView.Columns.Add(boundColumn);
boundColumn.DataField =
"ContactName"
;
boundColumn.HeaderText =
"Contact Name"
;
PlaceHolder1.Controls.Add(RadGrid1);
}
private
class
MyTemplate : ITemplate
{
DataTable dt;
protected
RadComboBox combo;
private
string
colname;
RadGrid radgrid;
public
MyTemplate(
string
cName,RadGrid grid)
{
colname = cName;
radgrid = grid;
}
public
void
InstantiateIn(System.Web.UI.Control container)
{
combo =
new
RadComboBox();
combo.ID =
"lControl"
;
combo.DataBinding +=
new
EventHandler(lControl_DataBinding);
container.Controls.Add(combo);
combo.AutoPostBack =
true
;
combo.SelectedIndexChanged +=
new
RadComboBoxSelectedIndexChangedEventHandler(l_SelectedIndexChanged);
}
public
void
lControl_DataBinding(
object
sender, EventArgs e)
{
RadComboBox l = (RadComboBox)sender;
GridFilteringItem container = (GridFilteringItem)l.NamingContainer;
l.DataTextField = colname;
l.DataValueField = colname;
dt = GetDataTable(
"SELECT distinct Country FROM Customers"
);
l.DataSource = dt;
}
void
l_SelectedIndexChanged(
object
sender, RadComboBoxSelectedIndexChangedEventArgs e)
{
RadComboBox combo = sender
as
RadComboBox;
string
filterExpression;
filterExpression =
"([Country] LIKE '"
+ e.Value +
"')"
;
radgrid.MasterTableView.FilterExpression = filterExpression;
radgrid.MasterTableView.Rebind();
}
}
protected
void
RadGrid1_NeedDataSource(
object
source, GridNeedDataSourceEventArgs e)
{
dt = GetDataTable(
"SELECT CompanyName, ContactName, Country FROM Customers"
);
this
.RadGrid1.DataSource = dt;
}
public
static
DataTable GetDataTable(
string
query)
{
string
ConnString = ConfigurationManager.ConnectionStrings[
"Northwind_newConnectionString3"
].ConnectionString;
SqlConnection conn =
new
SqlConnection(ConnString);
SqlDataAdapter adapter =
new
SqlDataAdapter();
adapter.SelectCommand =
new
SqlCommand(query, conn);
DataTable myDataTable =
new
DataTable();
conn.Open();
try
{
adapter.Fill(myDataTable);
}
finally
{
conn.Close();
}
return
myDataTable;
}
Thanks,
Princy
0
Naga
Top achievements
Rank 1
answered on 25 Sep 2013, 11:22 AM
I already tried this sample,but not working.
In my scenario,Radgrid i added in design,I need to create column with filetr template with combobox.Butselected changed event is not firing,RadComboItemDataBound event is firing.
0
Naga
Top achievements
Rank 1
answered on 25 Sep 2013, 11:49 AM
This below code i used to creating custom column
CustomFilteringColumn boundColumn = new CustomFilteringColumn();
boundColumn.DataField = dtpeople.Columns[i].ColumnName;
boundColumn.HeaderText = dtpeople.Columns[i].Caption;
boundColumn.UniqueName = dtpeople.Columns[i].ColumnName;
radGridViewUsers.MasterTableView.Columns.Add(boundColumn);
public class CustomFilteringColumn1 : GridBoundColumn
{
protected override void SetupFilterControls(TableCell cell)
{
base.SetupFilterControls(cell);
cell.Controls.RemoveAt(0);
RadComboBox RadCombo = new Telerik.Web.UI.RadComboBox();
RadCombo.ID = this.DataField;
RadCombo.AppendDataBoundItems = true;
RadCombo.AllowCustomText = true;
RadCombo.CheckBoxes = true;
//RadCombo.AutoPostBack = true;
RadCombo.EnableCheckAllItemsCheckBox = true;
RadCombo.CheckedItemsTexts.Equals("DisplayAllInInput");
RadCombo.MarkFirstMatch = true;
RadCombo.HighlightTemplatedItems = true;
RadCombo.EmptyMessage = "All";
RadCombo.NoWrap = false;
RadCombo.CssClass = "target-users-popup-dropdown";
RadCombo.DropDownCssClass = "target-users-popup-dropdown-1";
RadCombo.Localization.AllItemsCheckedString = "All";
RadCombo.Localization.CheckAllString = "All";
RadCombo.SelectedIndexChanged += new RadComboBoxSelectedIndexChangedEventHandler(RadCombo_SelectedIndexChanged);
RadCombo.PreRender += new EventHandler(RadCombo_PreRender);
RadCombo.ItemDataBound += new RadComboBoxItemEventHandler(RadCombo_ItemDataBound);
RadCombo.DataValueField = this.DataField;
RadCombo.DataTextField = this.DataField;
cell.Controls.AddAt(0, RadCombo);
cell.Controls.RemoveAt(1);
}
void RadCombo_ItemDataBound(object sender, RadComboBoxItemEventArgs e)
{
if (e.Item.Text == "")
{
e.Item.Text = "<<
Empty
>>";
}
}
void RadCombo_PreRender(object sender, EventArgs e)
{
// throw new NotImplementedException();
}
void RadCombo_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
{
// throw new NotImplementedException();
((GridFilteringItem)(((RadComboBox)sender).Parent.Parent)).FireCommandEvent("Filter", new Pair());
}
}
0
Naga
Top achievements
Rank 1
answered on 25 Sep 2013, 11:51 AM
This below code is used to creating columns,but combobox selected changed event not firing
CustomFilteringColumn boundColumn = new CustomFilteringColumn();
boundColumn.DataField = dtpeople.Columns[i].ColumnName;
boundColumn.HeaderText = dtpeople.Columns[i].Caption;
boundColumn.UniqueName = dtpeople.Columns[i].ColumnName;
radGridViewUsers.MasterTableView.Columns.Add(boundColumn);
public class CustomFilteringColumn1 : GridBoundColumn
{
protected override void SetupFilterControls(TableCell cell)
{
base.SetupFilterControls(cell);
cell.Controls.RemoveAt(0);
RadComboBox RadCombo = new Telerik.Web.UI.RadComboBox();
RadCombo.ID = this.DataField;
RadCombo.AppendDataBoundItems = true;
RadCombo.AllowCustomText = true;
RadCombo.CheckBoxes = true;
//RadCombo.AutoPostBack = true;
RadCombo.EnableCheckAllItemsCheckBox = true;
RadCombo.CheckedItemsTexts.Equals("DisplayAllInInput");
RadCombo.MarkFirstMatch = true;
RadCombo.HighlightTemplatedItems = true;
RadCombo.EmptyMessage = "All";
RadCombo.NoWrap = false;
RadCombo.CssClass = "target-users-popup-dropdown";
RadCombo.DropDownCssClass = "target-users-popup-dropdown-1";
RadCombo.Localization.AllItemsCheckedString = "All";
RadCombo.Localization.CheckAllString = "All";
RadCombo.SelectedIndexChanged += new RadComboBoxSelectedIndexChangedEventHandler(RadCombo_SelectedIndexChanged);
RadCombo.PreRender += new EventHandler(RadCombo_PreRender);
RadCombo.ItemDataBound += new RadComboBoxItemEventHandler(RadCombo_ItemDataBound);
RadCombo.DataValueField = this.DataField;
RadCombo.DataTextField = this.DataField;
cell.Controls.AddAt(0, RadCombo);
cell.Controls.RemoveAt(1);
}
void RadCombo_ItemDataBound(object sender, RadComboBoxItemEventArgs e)
{
if (e.Item.Text == "")
{
e.Item.Text = "<<
Empty
>>";
}
}
void RadCombo_PreRender(object sender, EventArgs e)
{
// throw new NotImplementedException();
}
void RadCombo_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
{
// throw new NotImplementedException();
((GridFilteringItem)(((RadComboBox)sender).Parent.Parent)).FireCommandEvent("Filter", new Pair());
}
}
0
Naga
Top achievements
Rank 1
answered on 26 Sep 2013, 02:19 AM
Thanks a lot,this reply very much helpful to me.If i creating radgrid dynamically its working fine.But I want to create dynamically column only.
My problem is filtering time automatically columns creating.
My problem is filtering time automatically columns creating.
0
Princy
Top achievements
Rank 2
answered on 26 Sep 2013, 05:44 AM
Hi Naga,
When creating template columns programmatically, the grid must be generated completely in the code-behind using the Page_Init event.
Since you are creating only the column dynamically,you are facing the issue of columns being created again.So please create your grid in the code behind.
C#:
Thanks,
Princy
When creating template columns programmatically, the grid must be generated completely in the code-behind using the Page_Init event.
Since you are creating only the column dynamically,you are facing the issue of columns being created again.So please create your grid in the code behind.
C#:
RadGrid RadGrid1;
private
void
Page_Init(
object
sender, System.EventArgs e)
{
RadGrid1 =
new
RadGrid();
RadGrid1.ID =
"RadGrid1"
;
RadGrid1.AutoGenerateColumns =
false
;
RadGrid1.AllowPaging =
true
;
RadGrid1.AllowSorting =
true
;
RadGrid1.AllowFilteringByColumn =
true
;
RadGrid1.EnableLinqExpressions =
false
;
RadGrid1.PagerStyle.AlwaysVisible =
true
;
RadGrid1.NeedDataSource +=
new
GridNeedDataSourceEventHandler(RadGrid1_NeedDataSource);
string
ColumnName =
"Country"
;
GridBoundColumn templateColumn;
templateColumn =
new
GridBoundColumn();
templateColumn.FilterTemplate =
new
MyTemplate(ColumnName, RadGrid1);
RadGrid1.MasterTableView.Columns.Add(templateColumn);
templateColumn.DataField = ColumnName;
templateColumn.HeaderText = ColumnName;
templateColumn.UniqueName = ColumnName;
GridBoundColumn boundColumn;
boundColumn =
new
GridBoundColumn();
RadGrid1.MasterTableView.Columns.Add(boundColumn);
boundColumn.DataField =
"CompanyName"
;
boundColumn.HeaderText =
"CompanyName"
;
boundColumn =
new
GridBoundColumn();
RadGrid1.MasterTableView.Columns.Add(boundColumn);
boundColumn.DataField =
"ContactName"
;
boundColumn.HeaderText =
"Contact Name"
;
PlaceHolder1.Controls.Add(RadGrid1);
}
Thanks,
Princy
0
Naga
Top achievements
Rank 1
answered on 26 Sep 2013, 05:59 AM
I tried same.Its working fine.Thank you for giving reply.