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)
{
}
}