How can i add multiple drop down lists, from different datatables as the datasource, using the following code?
Currently i have a dropdown lists for "DurationType", but lets say i wanted to add a dropdown list for "Description" and "Size", how would i be able to do that since i already have code that generates one.
invoicer.cs
default.aspx.cs
Currently i have a dropdown lists for "DurationType", but lets say i wanted to add a dropdown list for "Description" and "Size", how would i be able to do that since i already have code that generates one.
invoicer.cs
public class invoicer{ public class MyTemplate : ITemplate { private string colname; protected Label lControl; public MyTemplate(string cName) { colname = cName; } public void InstantiateIn(System.Web.UI.Control container) { lControl = new Label(); lControl.ID = "Label-DurationType"; lControl.DataBinding += new EventHandler(lControl_DataBinding); container.Controls.Add(lControl); } public void lControl_DataBinding(object sender, EventArgs e) { Label l = (Label)sender; GridDataItem container = (GridDataItem)l.NamingContainer; l.Text = ((DataRowView)container.DataItem)[colname].ToString() + "<br />"; } } public class MyEditTemplate : IBindableTemplate { public void InstantiateIn(Control container) { GridEditableItem item = ((GridEditableItem)(container.NamingContainer)); DropDownList drop = new DropDownList(); drop.ID = "DurationType-DDL"; drop.DataSource = (DataTable)GetTableForDropDown(); drop.DataTextField = "DurationType"; drop.DataValueField = "DurationType"; container.Controls.Add(drop); } public System.Collections.Specialized.IOrderedDictionary ExtractValues(System.Web.UI.Control container) { OrderedDictionary od = new OrderedDictionary(); od.Add("DurationType", ((DropDownList)(((GridDataItem)(container)).FindControl("DurationType-DDL"))).DataValueField); return od; } } void grid_NeedDataSource(object sender, GridNeedDataSourceEventArgs e) { RadGrid grid = (RadGrid)sender; string id = grid.ID; DataTable current = (DataTable)HttpContext.Current.Session[int.Parse(id.Split(new string[] {"RadGrid"},StringSplitOptions.RemoveEmptyEntries)[0])]; grid.DataSource = current; } protected void grid_ItemDataBound(object sender, Telerik.Web.UI.GridItemEventArgs e) { if (e.Item is GridEditableItem && e.Item.IsInEditMode) { GridEditableItem editItem = (GridEditableItem)e.Item; DropDownList ddl = (DropDownList)editItem.FindControl("DurationType-DDL"); ddl.DataSource = (DataTable)GetTableForDropDown(); ddl.DataTextField = "DurationType"; ddl.DataValueField = "DurationType"; ddl.SelectedIndex = editItem.ItemIndex; ddl.SelectedValue = DataBinder.Eval(editItem.DataItem, "DurationType").ToString(); // To get the selected value } } public void DefineGridStructure(int i, PlaceHolder ph,Boolean bl) { RadGrid grid = new RadGrid(); grid.ID = "RadGrid" + i.ToString(); grid.Visible = bl; grid.NeedDataSource += new GridNeedDataSourceEventHandler(grid_NeedDataSource); grid.AutoGenerateEditColumn = true; grid.AutoGenerateDeleteColumn = true; grid.AllowAutomaticInserts = false; grid.Width = Unit.Percentage(100); grid.PageSize = 15; grid.AllowPaging = true; grid.AllowFilteringByColumn = false; grid.PagerStyle.Mode = GridPagerMode.NextPrevAndNumeric; grid.AutoGenerateColumns = false; grid.MasterTableView.Width = Unit.Percentage(100); grid.MasterTableView.CommandItemDisplay = GridCommandItemDisplay.TopAndBottom; grid.AllowAutomaticDeletes = false; grid.AllowAutomaticUpdates = false; grid.ItemDataBound += new GridItemEventHandler(grid_ItemDataBound); grid.InsertCommand += grid_InsertCommand; grid.DeleteCommand += grid_DeleteCommand; grid.UpdateCommand += grid_UpdateCommand; grid.MasterTableView.DataKeyNames = new string[] { "RowNumber" }; GridBoundColumn boundColumn = new GridBoundColumn(); boundColumn.DataField = "RowNumber"; boundColumn.HeaderText = "RowNumber"; boundColumn.ReadOnly = true; grid.MasterTableView.Columns.Add(boundColumn); boundColumn = new GridBoundColumn(); boundColumn.DataField = "Size"; boundColumn.HeaderText = "Size"; grid.MasterTableView.Columns.Add(boundColumn); boundColumn = new GridBoundColumn(); boundColumn.DataField = "Description"; boundColumn.HeaderText = "Description"; grid.MasterTableView.Columns.Add(boundColumn); boundColumn = new GridBoundColumn(); boundColumn.DataField = "Quantity"; boundColumn.HeaderText = "Quantity"; grid.MasterTableView.Columns.Add(boundColumn); boundColumn = new GridBoundColumn(); boundColumn.DataField = "Unit"; boundColumn.HeaderText = "Unit"; grid.MasterTableView.Columns.Add(boundColumn); boundColumn = new GridBoundColumn(); boundColumn.DataField = "Duration"; boundColumn.HeaderText = "Duration"; grid.MasterTableView.Columns.Add(boundColumn); GridTemplateColumn objGridTemplateColumn = new GridTemplateColumn(); objGridTemplateColumn.HeaderText = "DurationType"; objGridTemplateColumn.DataField = "DurationType"; objGridTemplateColumn.ItemTemplate = new MyTemplate("DurationType"); objGridTemplateColumn.EditItemTemplate = new MyEditTemplate(); grid.MasterTableView.Columns.Add(objGridTemplateColumn); boundColumn = new GridBoundColumn(); boundColumn.DataField = "Amount"; boundColumn.HeaderText = "Amount"; grid.MasterTableView.Columns.Add(boundColumn); grid.MasterTableView.EditMode = GridEditMode.InPlace; LinkButton lb = new LinkButton(); lb.ID = "Show-Grid-" + i.ToString(); lb.Text = "Show Grid " + i.ToString(); lb.Click += new EventHandler(ShowGrid); LinkButton lbd = new LinkButton(); lbd.ID = "Delete-Grid-" + i.ToString(); lbd.Text = "Delete Grid " + i.ToString(); lbd.Click += (sender, e) => DeleteGrid(sender, e, ph); Label lbl = new Label(); lbl.ID = "Break-" + i.ToString(); lbl.Text = "<br>"; ph.Controls.Add(lb); ph.Controls.Add(lbd); ph.Controls.Add(grid); ph.Controls.Add(lbl); } public void DeleteGrid(object sender, EventArgs e, PlaceHolder ph) { LinkButton gridLink = (LinkButton)sender; String gridNum = gridLink.ID.ToString().Split('-').Last(); System.Web.UI.Page currentPage; currentPage = (System.Web.UI.Page)System.Web.HttpContext.Current.Handler; RadGrid grid = (RadGrid)currentPage.FindControl("RadGrid" + gridNum); Label lbl = (Label)currentPage.FindControl("Break-" + gridNum); LinkButton lbd = (LinkButton)currentPage.FindControl("Delete-Grid-" + gridNum); LinkButton lb = (LinkButton)currentPage.FindControl("Show-Grid-" + gridNum); ph.Controls.Remove(grid); ph.Controls.Remove(lbl); ph.Controls.Remove(lb); ph.Controls.Remove(lbd); int next = Convert.ToInt32(GetSession()); next = next - 1; HttpContext.Current.Session.Add("Tables", next); HttpContext.Current.Session.Remove(gridNum); ph.Controls.Clear(); loopGrids(ph); } public void loopGrids(PlaceHolder ph) { System.Web.UI.Page currentPage; currentPage = (System.Web.UI.Page)System.Web.HttpContext.Current.Handler; string ctrlname = currentPage.Request.Params.Get("__EVENTTARGET"); for (int i = 1; i <= (int)HttpContext.Current.Session["Tables"]; i++) { if (i == (int)HttpContext.Current.Session["Tables"]) { if (ctrlname == "Button1") { DefineGridStructure(i, ph, false); } else { DefineGridStructure(i, ph, true); } } else { DefineGridStructure(i, ph, false); } } } public void ShowGrid(object sender, EventArgs e) { LinkButton gridLink = (LinkButton)sender; String gridNum = gridLink.ID.ToString().Split('-').Last(); System.Web.UI.Page currentPage; currentPage = (System.Web.UI.Page)System.Web.HttpContext.Current.Handler; HttpContext.Current.Response.Write("Current gridnum: " + gridNum); RadGrid grid = (RadGrid)currentPage.FindControl("RadGrid" + gridNum); if (grid.Visible) { grid.Visible = false; } else { grid.Visible = true; } } public void grid_UpdateCommand(object sender, GridCommandEventArgs e) { GridEditableItem editItem = e.Item as GridEditableItem; Hashtable newValues = new Hashtable(); newValues["RowNumber"] = (editItem["RowNumber"].Controls[0] as TextBox).Text; newValues["Size"] = (editItem["Size"].Controls[0] as TextBox).Text; newValues["Description"] = (editItem["Description"].Controls[0] as TextBox).Text; newValues["Quantity"] = (editItem["Quantity"].Controls[0] as TextBox).Text; newValues["Unit"] = (editItem["Unit"].Controls[0] as TextBox).Text; newValues["Duration"] = (editItem["Duration"].Controls[0] as TextBox).Text; newValues["DurationType"] = (editItem.FindControl("DurationType-DDL") as DropDownList).SelectedValue; newValues["Amount"] = (editItem["Amount"].Controls[0] as TextBox).Text; DataTable dtCurrentTable = (DataTable)HttpContext.Current.Session[int.Parse(editItem.OwnerGridID.Split(new string[] { "RadGrid" }, StringSplitOptions.RemoveEmptyEntries)[0])]; foreach (DictionaryEntry entry in newValues) { dtCurrentTable.Rows[e.Item.ItemIndex][entry.Key.ToString()] = entry.Value; } SaveTable(editItem.OwnerGridID); } public void grid_DeleteCommand(object sender, GridCommandEventArgs e) { GridDataItem item = e.Item as GridDataItem; DataTable dt = (DataTable)HttpContext.Current.Session[int.Parse(item.OwnerGridID.Split(new string[] { "RadGrid" }, StringSplitOptions.RemoveEmptyEntries)[0])]; dt.Rows.Remove(dt.Rows[item.ItemIndex]); ResetRowID(dt); SaveTable(item.OwnerGridID); } public void grid_InsertCommand(object sender, GridCommandEventArgs e) { GridEditableItem editedItem = e.Item as GridEditableItem; GridEditManager editMan = editedItem.EditManager; //Set new values Hashtable newValues = new Hashtable(); //The GridTableView will fill the values from all editable columns in the hash DataTable dtCurrentTable = (DataTable)HttpContext.Current.Session[int.Parse(editedItem.OwnerGridID.Split(new string[] { "RadGrid" }, StringSplitOptions.RemoveEmptyEntries)[0])]; DataRow dr = null; int count = dtCurrentTable.Rows.Count; count++; dr = dtCurrentTable.NewRow(); dr["RowNumber"] = count; newValues["RowNumber"] = count; newValues["Size"] = (editedItem["Size"].Controls[0] as TextBox).Text; newValues["Description"] = (editedItem["Description"].Controls[0] as TextBox).Text; newValues["Quantity"] = (editedItem["Quantity"].Controls[0] as TextBox).Text; newValues["Unit"] = (editedItem["Unit"].Controls[0] as TextBox).Text; newValues["Duration"] = (editedItem["Duration"].Controls[0] as TextBox).Text; newValues["DurationType"] = (editedItem.FindControl("DurationType-DDL") as DropDownList).SelectedValue; newValues["Amount"] = (editedItem["Amount"].Controls[0] as TextBox).Text; foreach (DictionaryEntry entry in newValues) { dr[entry.Key.ToString()] = entry.Value; } dtCurrentTable.Rows.Add(dr); SaveTable(editedItem.OwnerGridID); } public string GetSession() { string SID = HttpContext.Current.Session["Tables"].ToString(); return SID; } public void SaveTable(string id) { DataTable dtCurrentTable = (DataTable)HttpContext.Current.Session[int.Parse(id.Split(new string[] { "RadGrid" }, StringSplitOptions.RemoveEmptyEntries)[0])]; HttpContext.Current.Session.Add(id.Split(new string[] { "RadGrid" }, StringSplitOptions.RemoveEmptyEntries)[0], dtCurrentTable); } public DataTable GetTable() { // // Here we create a DataTable with a few columns. // // Create Datatable to store all colums DataTable dt = new DataTable(); DataRow dr = null; dt.Columns.Add(new DataColumn("RowNumber", typeof(string))); dt.Columns.Add(new DataColumn("Size", typeof(string))); dt.Columns.Add(new DataColumn("Description", typeof(string))); dt.Columns.Add(new DataColumn("Quantity", typeof(string))); dt.Columns.Add(new DataColumn("Unit", typeof(string))); dt.Columns.Add(new DataColumn("Duration", typeof(string))); dt.Columns.Add(new DataColumn("DurationType", typeof(string))); dt.Columns.Add(new DataColumn("Amount", typeof(string))); dr = dt.NewRow(); dr["RowNumber"] = 1; dr["Size"] = string.Empty; dr["Description"] = string.Empty; dr["Quantity"] = string.Empty; dr["Unit"] = string.Empty; dr["Duration"] = string.Empty; dr["DurationType"] = string.Empty; dr["Amount"] = string.Empty; dt.Rows.Add(dr); dr = dt.NewRow(); dr["RowNumber"] = 2; dr["Size"] = string.Empty; dr["Description"] = string.Empty; dr["Quantity"] = string.Empty; dr["Unit"] = string.Empty; dr["Duration"] = string.Empty; dr["DurationType"] = string.Empty; dr["Amount"] = string.Empty; dt.Rows.Add(dr); dr = dt.NewRow(); dr["RowNumber"] = 3; dr["Size"] = string.Empty; dr["Description"] = string.Empty; dr["Quantity"] = string.Empty; dr["Unit"] = string.Empty; dr["Duration"] = string.Empty; dr["DurationType"] = string.Empty; dr["Amount"] = string.Empty; dt.Rows.Add(dr); dr = dt.NewRow(); dr["RowNumber"] = 4; dr["Size"] = string.Empty; dr["Description"] = string.Empty; dr["Quantity"] = string.Empty; dr["Unit"] = string.Empty; dr["Duration"] = string.Empty; dr["DurationType"] = string.Empty; dr["Amount"] = string.Empty; dt.Rows.Add(dr); dr = dt.NewRow(); dr["RowNumber"] = 5; dr["Size"] = string.Empty; dr["Description"] = string.Empty; dr["Quantity"] = string.Empty; dr["Unit"] = string.Empty; dr["Duration"] = string.Empty; dr["DurationType"] = string.Empty; dr["Amount"] = string.Empty; dt.Rows.Add(dr); return dt; } static DataTable GetTableForDropDown() { // // Here we create a DataTable with a few columns. // // Create Datatable to store all colums DataTable dt = new DataTable(); DataRow dr = null; dt.Columns.Add(new DataColumn("DurationType", typeof(string))); dr = dt.NewRow(); dr["DurationType"] = "Hours"; dt.Rows.Add(dr); dr = dt.NewRow(); dr["DurationType"] = "Days"; dt.Rows.Add(dr); dr = dt.NewRow(); dr["DurationType"] = "Weeks"; dt.Rows.Add(dr); dr = dt.NewRow(); dr["DurationType"] = "Months"; dt.Rows.Add(dr); return dt; } private void ResetRowID(DataTable dt) { int rowNumber = 1; if (dt.Rows.Count > 0) { foreach (DataRow row in dt.Rows) { row[0] = rowNumber; rowNumber++; } } }}default.aspx.cs
public partial class _Default : System.Web.UI.Page{ invoicer inv = new invoicer(); protected void Page_Load(object sender, EventArgs e) { } protected void Page_Init(object sender, EventArgs e) { string ctrlname = this.Page.Request.Params.Get("__EVENTTARGET"); if (Session["Tables"] == null) { Session.Add("Tables", 1); DataTable dt = inv.GetTable(); Session.Add(Session["Tables"].ToString(), dt); inv.DefineGridStructure(1, PlaceHolder2, true); } if (IsPostBack) { int next = Convert.ToInt32(inv.GetSession()); PlaceHolder2.Controls.Clear(); inv.loopGrids(PlaceHolder2); if (ctrlname == "Button1") { next = next + 1; Session.Add("Tables",next); Response.Write("Button getSession: " + inv.GetSession()); DataTable dt = inv.GetTable(); Session.Add(Session["Tables"].ToString(), dt); inv.DefineGridStructure(next, PlaceHolder2,true); } } } protected void Button1_Click(object sender, EventArgs e) { } }