Hi guys,
Having some trouble with my grid. It's in a web control, dynamically built in Page_Init(). The page loads fine the first time, but on postback I get an exception that there is already a control called 'tbTemplateControl' That name belongs to one of my GridTemplateColumns, FacilityColumn. Here's the code in my codebehind
And here are my template column classes:
I apologize for the length, but I think that's everything you need to use in a test project.
So I'm creating the grid in Page_Init(), databinding in NeedDataSource(). What else can I try?
Thanks,
Brad
Having some trouble with my grid. It's in a web control, dynamically built in Page_Init(). The page loads fine the first time, but on postback I get an exception that there is already a control called 'tbTemplateControl' That name belongs to one of my GridTemplateColumns, FacilityColumn. Here's the code in my codebehind
RadGrid rgFacilities;protected void Page_Load(object sender, EventArgs e){ rgFacilities = (RadGrid)PlaceHolder1.FindControl("rgFacilities"); RadAjaxManagerProxy1.AjaxSettings.AddAjaxSetting(rgFacilities, rgFacilities);}protected void Page_Init(object sender, EventArgs e){ CreateGrid();}void rgFacilities_NeedDataSource(object source, GridNeedDataSourceEventArgs e){ rgFacilities.DataSource = table;}DataTable _table;private DataTable table{ get { if (_table == null) { CreateTable(); } return _table; } set { _table = value; }}public Dictionary<string, decimal> totals;private void CreateGrid(){ rgFacilities = new RadGrid(); rgFacilities.ID = "rgFacilities"; rgFacilities.AutoGenerateColumns=false; rgFacilities.ShowFooter=true; rgFacilities.Width=750; rgFacilities.NeedDataSource += new GridNeedDataSourceEventHandler(rgFacilities_NeedDataSource); rgFacilities.AllowMultiRowEdit=true; rgFacilities.MasterTableView.TableLayout = GridTableLayout.Auto; rgFacilities.MasterTableView.EditMode = GridEditMode.InPlace; rgFacilities.ClientSettings.Scrolling.FrozenColumnsCount=1; rgFacilities.ClientSettings.Scrolling.AllowScroll=true; rgFacilities.ClientSettings.Scrolling.SaveScrollPosition=true; rgFacilities.ClientSettings.Scrolling.UseStaticHeaders = true; totals = new Dictionary<string,decimal>(); FundColumn column = new FundColumn(); rgFacilities.MasterTableView.Columns.Clear(); rgFacilities.MasterTableView.Columns.Add(column); for (int i = 1; i < table.Columns.Count; i++) { decimal total = new decimal(); for (int j = 0; j < table.Rows.Count; j++) { if (table.Rows[j][i] is decimal) { total += (decimal)table.Rows[j][i]; } } FacilityColumn col = new FacilityColumn(total,false); totals[col.UniqueName] = total; //col.Aggregate = GridAggregateFunction.Sum; //col.FooterAggregateFormatString = "{0:C}"; col.DataField = table.Columns[i].ColumnName; col.HeaderText = table.Columns[i].ColumnName; rgFacilities.MasterTableView.Columns.Add(col); total = 0; } for (int i = 0; i < table.Rows.Count && i < rgFacilities.PageSize; i++) { rgFacilities.EditIndexes.Add(i); } this.PlaceHolder1.Controls.Clear(); this.PlaceHolder1.Controls.Add(rgFacilities);}private void CreateTable(){ table = new DataTable(); table.Columns.Add(new DataColumn("Fund", typeof(string))); table.Columns.Add(new DataColumn("Facility1", typeof(decimal))); table.Columns.Add(new DataColumn("Facility2", typeof(decimal))); table.Columns.Add(new DataColumn("Facility3", typeof(decimal))); table.Columns.Add(new DataColumn("Facility4", typeof(decimal))); table.Columns.Add(new DataColumn("Facility5", typeof(decimal))); table.Columns.Add(new DataColumn("Facility6", typeof(decimal))); table.Columns.Add(new DataColumn("Facility7", typeof(decimal))); table.Columns.Add(new DataColumn("Facility8", typeof(decimal))); table.Columns.Add(new DataColumn("Facility9", typeof(decimal))); table.Columns.Add(new DataColumn("Facility10", typeof(decimal))); table.Columns.Add(new DataColumn("Facility11", typeof(decimal))); table.Columns.Add(new DataColumn("Facility12", typeof(decimal))); table.Columns.Add(new DataColumn("Facility13", typeof(decimal))); table.Columns.Add(new DataColumn("Facility14", typeof(decimal))); table.Columns.Add(new DataColumn("Facility15", typeof(decimal))); DataRow row1 = table.NewRow(); DataRow row2 = table.NewRow(); DataRow row3 = table.NewRow(); DataRow row4 = table.NewRow(); DataRow row5 = table.NewRow(); DataRow row6 = table.NewRow(); DataRow row7 = table.NewRow(); DataRow row8 = table.NewRow(); DataRow row9 = table.NewRow(); DataRow row10 = table.NewRow(); DataRow row11 = table.NewRow(); DataRow row12 = table.NewRow(); DataRow row13 = table.NewRow(); DataRow row14 = table.NewRow(); DataRow row15 = table.NewRow(); DataRow row16 = table.NewRow(); DataRow row17 = table.NewRow(); DataRow row18 = table.NewRow(); DataRow row19 = table.NewRow(); DataRow row20 = table.NewRow(); row1["Fund"] = "Fund1"; row2["Fund"] = "Fund2"; row3["Fund"] = "Fund3"; row4["Fund"] = "Fund4"; row5["Fund"] = "Fund5"; row6["Fund"] = "Fund6"; row7["Fund"] = "Fund7"; row8["Fund"] = "Fund8"; row9["Fund"] = "Fund9"; row10["Fund"] = "Fund10"; row11["Fund"] = "Fund11"; row12["Fund"] = "Fund12"; row13["Fund"] = "Fund13"; row14["Fund"] = "Fund14"; row15["Fund"] = "Fund15"; row16["Fund"] = "Fund16"; row17["Fund"] = "Fund17"; row18["Fund"] = "Fund19"; row19["Fund"] = "Fund19"; row20["Fund"] = "Fund20"; row1[1] = 0.0d; row1[2] = 0.0d; row1[3] = 0.0d; row1[4] = 2.0d; row1[5] = 2.0d; row1[6] = 0.0d; row1[7] = 0.0d; row1[8] = 0.0d; row1[9] = 2.0d; row1[10] = 2.0d; row1[11] = 0.0d; row1[12] = 0.0d; row1[13] = 0.0d; row1[14] = 2.0d; row1[15] = 2.0d; row2[1] = 1.0d; row2[2] = 1.0d; row2[3] = 1.0d; row2[4] = 1.0d; row2[5] = 1.0d; row2[6] = 1.0d; row2[7] = 1.0d; row2[8] = 1.0d; row2[9] = 1.0d; row2[10] = 1.0d; row2[11] = 1.0d; row2[12] = 1.0d; row2[13] = 1.0d; row2[14] = 1.0d; row2[15] = 1.0d; row3[1] = 0.4d; row3[2] = 0.5d; row3[3] = 0.6d; row3[4] = 0.7d; row3[5] = 0.8d; row3[6] = 0.4d; row3[7] = 0.5d; row3[8] = 0.6d; row3[9] = 0.7d; row3[10] = 0.8d; row3[11] = 0.4d; row3[12] = 0.5d; row3[13] = 0.6d; row3[14] = 0.7d; row3[15] = 0.8d; row4[1] = 3.0d; row4[2] = 4.0d; row4[3] = 5.0d; row4[4] = 6.0d; row4[5] = 7.0d; row4[6] = 3.0d; row4[7] = 4.0d; row4[8] = 5.0d; row4[9] = 6.0d; row4[10] = 7.0d; row4[11] = 3.0d; row4[12] = 4.0d; row4[13] = 5.0d; row4[14] = 6.0d; row4[15] = 7.0d; row5[1] = 1.0d; row5[2] = 2.0d; row5[3] = 3.0d; row5[4] = 4.0d; row5[5] = 5.0d; row5[6] = 1.0d; row5[7] = 2.0d; row5[8] = 3.0d; row5[9] = 4.0d; row5[10] = 5.0d; row5[11] = 1.0d; row5[12] = 2.0d; row5[13] = 3.0d; row5[14] = 4.0d; row5[15] = 5.0d; table.Rows.Add(row1); table.Rows.Add(row2); table.Rows.Add(row3); table.Rows.Add(row4); table.Rows.Add(row5); table.Rows.Add(row6); table.Rows.Add(row7); table.Rows.Add(row8); table.Rows.Add(row9); table.Rows.Add(row10); table.Rows.Add(row11); table.Rows.Add(row12); table.Rows.Add(row13); table.Rows.Add(row14); table.Rows.Add(row15); table.Rows.Add(row16); table.Rows.Add(row17); table.Rows.Add(row18); table.Rows.Add(row19); table.Rows.Add(row20);}And here are my template column classes:
public class FacilityColumn : GridTemplateColumn { public FacilityColumn() : this(0, false) { } public FacilityColumn(decimal total, bool zeroAllocation) : base() { //this.UniqueName = RandomString(10, true); HeaderTemplate = new FacilityHeaderTemplate(this); ItemTemplate = new FacilityItemTemplate(this); EditItemTemplate = new FacilityEditItemTemplate(this); FooterTemplate = new FacilityFooterTemplate(this, total, zeroAllocation); } } public class FacilityEditItemTemplate : ITemplate, IBindableTemplate { private FacilityColumn _col; OrderedDictionary _changes; private OrderedDictionary Changes { get { if (_changes == null) _changes = new OrderedDictionary(); return _changes; } } public FacilityEditItemTemplate(FacilityColumn col) { _col = col; } public void InstantiateIn(Control container) { TextBox tb = new TextBox(); tb.ID = "tb" + _col.UniqueName; tb.DataBinding += new EventHandler(tb_DataBinding); tb.TextChanged += new EventHandler(tb_TextChanged); tb.Width = Unit.Pixel(120); container.Controls.Add(tb); } void tb_TextChanged(object sender, EventArgs e) { Changes.Add("Fund|" + _col.UniqueName, (sender as TextBox).Text); } void tb_DataBinding(object sender, EventArgs e) { TextBox tb = (sender as TextBox); GridDataItem container = (GridDataItem)tb.NamingContainer; tb.Text = ((DataRowView)container.DataItem)[_col.DataField].ToString(); } public IOrderedDictionary ExtractValues(Control container) { return Changes; } } public class FacilityHeaderTemplate : ITemplate { private FacilityColumn _col; public FacilityHeaderTemplate(FacilityColumn col) : base() { _col = col; } public void InstantiateIn(Control container) { Label lbl = new Label(); lbl.DataBinding += new EventHandler(lbl_DataBinding); container.Controls.Add(lbl); } void lbl_DataBinding(object sender, EventArgs e) { (sender as Label).Text = _col.HeaderText; } } public class FacilityItemTemplate : ITemplate { private FacilityColumn _col; public FacilityItemTemplate(FacilityColumn col) { _col = col; } public void InstantiateIn(Control container) { Label lbl = new Label(); lbl.DataBinding += new EventHandler(lbl_DataBinding); container.Controls.Add(lbl); } void lbl_DataBinding(object sender, EventArgs e) { Label lbl = (sender as Label); GridDataItem container = (GridDataItem)lbl.NamingContainer; string val = ((DataRowView)container.DataItem)[_col.DataField].ToString(); if (String.IsNullOrEmpty(val)) val = " "; lbl.Text = string.Format("{0:C}", val); } } public class FacilityFooterTemplate:ITemplate { FacilityColumn _col; decimal _total; bool _zeroAllocation; public FacilityFooterTemplate(FacilityColumn col, decimal total, bool zeroAllocation) { _col = col; _total = total; _zeroAllocation = zeroAllocation; } #region ITemplate Members public void InstantiateIn(Control container) { Label label = new Label(); RadioButtonList radioList = new RadioButtonList(); label.ID = _col.UniqueName + "-total"; label.Text = _total.ToString("C"); radioList.ID = _col.UniqueName + "-zero"; radioList.Items.Add(new ListItem("yes", "1")); radioList.Items.Add(new ListItem("no", "0")); radioList.AutoPostBack = true; if (_zeroAllocation) radioList.SelectedIndex = 0; else radioList.SelectedIndex = 1; radioList.RepeatDirection = RepeatDirection.Horizontal; radioList.SelectedIndexChanged += new EventHandler(radioList_SelectedIndexChanged); container.Controls.Add(label); container.Controls.Add(radioList); } void radioList_SelectedIndexChanged(object sender, EventArgs e) { } #endregion } private class ReadOnlyTemplate : ITemplate, IBindableTemplate { protected Label label; private string colname; public ReadOnlyTemplate(string cName) { colname = cName; } #region ITemplate Members public void InstantiateIn(Control container) { label = new Label(); label.ID = "templateColumnLabel"; label.DataBinding += label_DataBinding; container.Controls.Add(label); } void label_DataBinding(object sender, EventArgs e) { Label label = (Label)sender; GridDataItem container = (GridDataItem)label.NamingContainer; label.Text = (string)((DataRowView)container.DataItem)[colname]; } #endregion #region IBindableTemplate Members OrderedDictionary _changes; private OrderedDictionary Changes { get { if (_changes == null) _changes = new OrderedDictionary(); return _changes; } } public System.Collections.Specialized.IOrderedDictionary ExtractValues(Control container) { return Changes; } #endregion } }I apologize for the length, but I think that's everything you need to use in a test project.
So I'm creating the grid in Page_Init(), databinding in NeedDataSource(). What else can I try?
Thanks,
Brad