By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,740 Members | 790 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,740 IT Pros & Developers. It's quick & easy.

edit , update dynamically datagrid

P: n/a
hello

my question is :
i define dynamic columns to datagrid , 4 columns are databound and 1
columne is "edit template column" and only this col editable ,
i define function for update when pressing on button the datagrid not
define
and body of function recognize the object i think is becuase view
state
but i don't know how to solv it
(when i press on edit bottun it work perfectly )

thanks

private bool DynamicColumnAdded
{
get
{
object b = ViewState["DynamicColumnAdded"];
return (b == null) ? false : true;
}
set
{
ViewState["DynamicColumnAdded"] = value;
}
}

protected override void LoadViewState(object savedState)
{

base.LoadViewState(savedState);
if (DynamicColumnAdded)
{
this.GenerateDataGrid();
}
}
private void GenerateDataGrid()
{
//the edit col i define on html page
//bound col shift name
BoundColumn sTName = new BoundColumn();
sTName.DataField = "ShiftTeamName";
sTName.HeaderText = "Shift Team Name";
sTName.ItemStyle.Width = new Unit(150);
sTName.ReadOnly=true;
dgCounter.Columns.Add(sTName);

//Part Name col
BoundColumn pName = new BoundColumn();
pName.DataField = "PartName";
pName.HeaderText = "Part Name";
pName.ItemStyle.Width = new Unit(150);
pName.ReadOnly=true;
dgCounter.Columns.Add(pName);

//Start_Date col
BoundColumn sDate = new BoundColumn();
sDate.DataField = "Start_Date";
sDate.HeaderText = "From";
sDate.ItemStyle.Width = new Unit(150);
sDate.ReadOnly=true;
dgCounter.Columns.Add(sDate);

//End_Date col
BoundColumn eDate = new BoundColumn();
eDate.DataField = "End_Date";
eDate.HeaderText = "To";
eDate.ItemStyle.Width = new Unit(100);
eDate.ReadOnly=true;
dgCounter.Columns.Add(eDate);

//editable col
TemplateColumn tc = new TemplateColumn();
tc.HeaderText= "Quantity";
tc.ItemTemplate = new
DataGridTemplate(ListItemType.Item,"Quantity");
tc.EditItemTemplate = new DataGridTemplate(ListItemType.EditItem,
"Quantity");

dgCounter.Columns.Add(tc);

}
public void dgCounter_UpdateCommand(Object s,DataGridCommandEventArgs
e)
{

TextBox qauntity =
(TextBox)e.Item.Cells[5].FindControl("txtQuantity") ;

int qnt =Convert.ToInt32(qauntity.Text);
string sTime = e.Item.Cells[3].Text;
string eTime = e.Item.Cells[4].Text;
int ioCounterId = Convert.ToInt32(cboCntId.SelectedValue);

DateTime startTime = DateTime.Parse(sTime);
DateTime endTime = DateTime.Parse(eTime);

MCItems upItem = new MCItems(startTime,endTime,qnt,ioCounterId);
ManualCountLogicLayer updateLogic = new
ManualCountLogicLayer();

updateLogic.UpdateAndInsertCounterDetails(upItem);

dgCounter.EditItemIndex = -1;
GetTheDetails();
FillDataGrid();
}
And the template class

public class DataGridTemplate : ITemplate
{
ListItemType templateType;
string columnName;

public DataGridTemplate(ListItemType type, string colname)
{
templateType = type;
columnName = colname;
}

public void InstantiateIn(System.Web.UI.Control container)
{
Literal lc = new Literal();
switch(templateType)
{
case ListItemType.Header:
lc.Text = "<B>" + columnName + "</B>";
container.Controls.Add(lc);
break;
case ListItemType.Item:
Label lbl = new Label();
lbl.DataBinding += new EventHandler(DataGrid_DataBinding);
container.Controls.Add(lbl);
break;
case ListItemType.EditItem:
TextBox tb = new TextBox();
tb.ID = "txtQuantity";
tb.DataBinding += new EventHandler(DataGridText_DataBinding);
container.Controls.Add(tb);
break;
case ListItemType.Footer:
lc.Text = "<I>" + columnName + "</I>";
container.Controls.Add(lc);
break;
}

}
private void DataGrid_DataBinding(object sender,System.EventArgs e)
{
Label lbl;
lbl = (Label) sender;
DataGridItem container = (DataGridItem) lbl.NamingContainer;
lbl.Text += DataBinder.Eval(container.DataItem, "Quantity");

}
private void DataGridText_DataBinding(object sender,System.EventArgs
e)
{
TextBox tb ;
tb = (TextBox) sender;
DataGridItem container = (DataGridItem) tb.NamingContainer;
tb.Text += DataBinder.Eval(container.DataItem , "Quantity");

}
Nov 18 '05 #1
Share this question for a faster answer!
Share on Google+

This discussion thread is closed

Replies have been disabled for this discussion.