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.