Now am facing a difficutly .. i have put a Update buton since i have textboxes where user can change input in dynamic grid
I TRY To update on onclickevent
but am not able to access grid at all
grid.columns.count is alwazz null ..
i need to loop to get the dynamic ids ... but am not able to access to elements in dynamic grid .
protected void lnkUpdateAll_Click(object sender, EventArgs e)
{
for (int OuterCol = 1; OuterCol < gridCntrl.Columns.Count; OuterCol++) -->getting zero :(
{
GridTemplateColumn templateColumn = new GridTemplateColumn();
string templateColumnName = ds.Tables[0].Columns[OuterCol].ColumnName;
for (int inner = 0; inner < gridCntrl.Items.Count; inner++)
{
double total;
string id;
if (true)
{
id = (gridCntrl.Items[OuterCol].FindControl(templateColumnName) as RadNumericTextBox).Text.ToString();
total = double.Parse((gridCntrl.Items[OuterCol].FindControl(templateColumnName)as RadNumericTextBox).Value.ToString()); ;
}
}
9 Answers, 1 is accepted
Please make sure, You must have to add your grid creation code on page_init or page_load.
Note : please make sure your grid creation code not side is postback condition.
Thanks,
Jayesh Goyani
User first selects and click the button and den the grid is created .
Am creating my grid on button click
Like this
public void btn_onclick()
{
if(!postback)--> if i keep this my grid is not created any ideas as to how
{
grid created here
}
}
Can you please provide your code?
Thanks,
Jayesh Goyani
namespace proc.Admin
{
public partial class TotalSeatsMatrix : System.Web.UI.Page
{
RadGrid gridCntrl = new RadGrid();
protected void Page_Load(object sender, EventArgs e)
{
try
{
if (!IsPostBack)
{
}
}
protected void btnclick_OnClick(object sender, EventArgs e)
{
// if (!IsPostBack)
{
gridCntrl.AutoGenerateColumns = false;
DataSet ds = new DataSet();
BusinessLogic.TotalSeats result = new BusinessLogic.TotalSeats();
BusinessLogic.TotalSeatsEntity objcollection = new BusinessLogic.TotalSeatsEntity();
StringBuilder sb = new StringBuilder();
foreach (RadListBoxItem item in RadListBox1.SelectedItems)
{
sb.Append(item.Value + ",");
}
objcollection.meritBaseId = Convert.ToString(sb.ToString().TrimEnd(','));
objcollection.Course_Id = Convert.ToDecimal(drpCourse.SelectedValue);
ds = result.GetTotalSeats(objcollection);
gridCntrl.EnableViewState = false;
int colCnt = ds.Tables[0].Columns.Count;
int rowCnt = ds.Tables[0].Rows.Count;
GridBoundColumn boundColumn;
boundColumn = new GridBoundColumn();
gridCntrl.MasterTableView.Columns.Add(boundColumn);
gridCntrl.MasterTableView.ShowFooter = true;
boundColumn.DataField = ds.Tables[0].Columns[0].ColumnName;
boundColumn.HeaderText = ds.Tables[0].Columns[0].ColumnName;
gridCntrl.MasterTableView.EnableColumnsViewState = false;
for (int i = 1; i < colCnt; i++)
{
GridTemplateColumn templateColumn = new GridTemplateColumn();
string templateColumnName = ds.Tables[0].Columns[i].ColumnName;
templateColumn.FooterTemplate = new MyTemplate1(templateColumnName);
templateColumn.ItemTemplate = new MyTemplate(templateColumnName);
templateColumn.HeaderText = templateColumnName;
templateColumn.UniqueName = templateColumnName;
templateColumn.DataField = templateColumnName;
gridCntrl.MasterTableView.Columns.Add(templateColumn);
}
GridTemplateColumn templateTotal = new GridTemplateColumn();
string templateColTotalName = "Total";
templateTotal.ItemTemplate = new MyTemplateTotal(templateColTotalName);
templateTotal.FooterTemplate = new MyTemplate1(templateColTotalName);
templateTotal.HeaderText = templateColTotalName;
templateTotal.UniqueName = templateColTotalName;
gridCntrl.MasterTableView.Columns.Add(templateTotal);
gridCntrl.AllowPaging = true;
gridCntrl.PageSize = 20;
gridCntrl.Skin = "Outlook";
PlaceHolder1.Controls.Add(gridCntrl);
gridCntrl.DataSource = ds;
gridCntrl.DataBind();
}
}
private class MyTemplate : ITemplate
{
protected RadNumericTextBox textBox;
private string colname;
//public MyTemplate(string cName,string txtval)
public MyTemplate(string cName)
{
colname = cName;
//textval = txtval;
}
public void InstantiateIn(System.Web.UI.Control container)
{
textBox = new RadNumericTextBox();
textBox.ID = colname;
textBox.DataBinding += new EventHandler(boolValue_DataBinding);
container.Controls.Add(textBox);
}
void boolValue_DataBinding(object sender, EventArgs e)
{
RadNumericTextBox radbox = (RadNumericTextBox)sender;
GridDataItem container = (GridDataItem)radbox.NamingContainer;
radbox.Text = ((DataRowView)container.DataItem)[colname].ToString();
// radbox.Attributes.Add("OnBlur", "test(this);");
//
radbox.Attributes.Add("OnFocus", "Focus(this);");
radbox.Attributes.Add("OnBlur", "Blur(this);");
radbox.Attributes.Add("OnBlur", "BlurRow(this);");
radbox.Attributes.Add("OnFocus", "FocusRow(this);");
radbox.Attributes.Add("ontextchanged", "txtval_TextChanged");
}
}
private class MyTemplate1 : ITemplate
{
protected RadNumericTextBox textBox;
private string colname;
public MyTemplate1(string cName)
{
colname = cName;
}
public void InstantiateIn(System.Web.UI.Control container)
{
textBox = new RadNumericTextBox();
textBox.ID = colname;
textBox.ReadOnly = true;
textBox.Value = 0;
container.Controls.Add(textBox);
}
}
private class MyTemplateTotal : ITemplate
{
protected RadNumericTextBox textBox;
private string colname;
public MyTemplateTotal(string cName)
{
colname = cName;
}
public void InstantiateIn(System.Web.UI.Control container)
{
string str = "ctl";
int countrow = 11;
str = "ctl" + countrow.ToString();
try
{
textBox = new RadNumericTextBox();
textBox.ID = colname;
textBox.ReadOnly = true;
textBox.Value = 0;
container.Controls.Add(textBox);
countrow++;
str = "ctl" + countrow.ToString();
}
catch (Exception)
{
throw;
}
}
}
protected void lnkUpdateAll_Click(object sender, EventArgs e)
{
try
{
for (int OuterCol = 1; OuterCol < gridCntrl.Columns.Count; OuterCol++)
{
}
}
catch (Exception)
{
throw;
}
}
I want GRID access over here But not getting anyitems from NULL EXCEPTION ERROR
private void UpdateData()
{
for (int OuterCol = 1; OuterCol < gridCntrl.Columns.Count; OuterCol++)
{
for (int inner = 0; inner < gridCntrl.Items.Count; inner++)
{
double total;
string id;
if (true)
{
}
else if (gridCntrl.Items[OuterCol].ItemType == GridItemType.Footer)
{
}
}
}
}
}
}
you are adding grid creation code on button Click.
You Must have to add your page creation code in Page_load OR page_Init.
protected void Page_Load(object sender, EventArgs e) { if (!string.IsNullOrEmpty(Request.Params["__EVENTTARGET"])) { if (Request.Params["__EVENTTARGET"].ToString() == "btnclick" || Request.Params["__EVENTTARGET"].ToString() == "lnkUpdateAll") { // Grid Creation Code } } }After doing above step you are able to get columns in radgrid on button click event.
Thanks,
Jayesh Goyani
checked on debug also !
Please check below code snippet or Demo.
Its work correctly.
<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title> </head><body> <form id="form1" runat="server"> <div> <telerik:RadScriptManager ID="RadScriptManager1" runat="server"> </telerik:RadScriptManager> <asp:Button ID="Button1" runat="server" Text="Button" OnClick="btnclick_OnClick" UseSubmitBehavior="false" /> <asp:Button ID="Button2" runat="server" Text="Button" OnClick="lnkUpdateAll_Click" UseSubmitBehavior="false" /> </div> </form></body></html>public partial class forumpage : System.Web.UI.Page{ RadGrid gridCntrl = new RadGrid(); protected void Page_Init(object sender, EventArgs e) { if (!string.IsNullOrEmpty(Request.Params["__EVENTTARGET"])) { if (Request.Params["__EVENTTARGET"].ToString() == "Button1" || Request.Params["__EVENTTARGET"].ToString() == "Button2") { creategrid(); } } } protected void Page_Load(object sender, EventArgs e) { } protected void btnclick_OnClick(object sender, EventArgs e) { } protected void lnkUpdateAll_Click(object sender, EventArgs e) { //try //{ for (int OuterCol = 1; OuterCol < gridCntrl.Columns.Count; OuterCol++) { } //} //catch (Exception) //{ // throw; //} } public void creategrid() { DataTable dt = new DataTable(); dt.Columns.Add("ID", typeof(int)); dt.Columns.Add("Name", typeof(string)); dt.Rows.Add(1, "name1"); dt.Rows.Add(2, "name2"); gridCntrl.AutoGenerateColumns = false; GridBoundColumn boundColumn; boundColumn = new GridBoundColumn(); gridCntrl.MasterTableView.Columns.Add(boundColumn); gridCntrl.MasterTableView.ShowFooter = true; boundColumn.DataField = dt.Columns[0].ToString(); boundColumn.HeaderText = dt.Columns[0].ToString(); gridCntrl.MasterTableView.EnableColumnsViewState = false; for (int i = 1; i < dt.Columns.Count; i++) { GridTemplateColumn templateColumn = new GridTemplateColumn(); string templateColumnName = dt.Columns[i].ToString(); templateColumn.FooterTemplate = new MyTemplate1(templateColumnName); templateColumn.ItemTemplate = new MyTemplate(templateColumnName); templateColumn.HeaderText = templateColumnName; templateColumn.UniqueName = templateColumnName; templateColumn.DataField = templateColumnName; gridCntrl.MasterTableView.Columns.Add(templateColumn); } GridTemplateColumn templateTotal = new GridTemplateColumn(); string templateColTotalName = "Total"; templateTotal.ItemTemplate = new MyTemplateTotal(templateColTotalName); templateTotal.FooterTemplate = new MyTemplate1(templateColTotalName); templateTotal.HeaderText = templateColTotalName; templateTotal.UniqueName = templateColTotalName; gridCntrl.MasterTableView.Columns.Add(templateTotal); gridCntrl.AllowPaging = true; gridCntrl.PageSize = 20; gridCntrl.Skin = "Outlook"; this.form1.Controls.Add(gridCntrl); gridCntrl.DataSource = dt; gridCntrl.DataBind(); } private class MyTemplate : ITemplate { protected RadNumericTextBox textBox; private string colname; //public MyTemplate(string cName,string txtval) public MyTemplate(string cName) { colname = cName; //textval = txtval; } public void InstantiateIn(System.Web.UI.Control container) { textBox = new RadNumericTextBox(); textBox.ID = colname; textBox.DataBinding += new EventHandler(boolValue_DataBinding); container.Controls.Add(textBox); } void boolValue_DataBinding(object sender, EventArgs e) { RadNumericTextBox radbox = (RadNumericTextBox)sender; GridDataItem container = (GridDataItem)radbox.NamingContainer; radbox.Text = "0"; // radbox.Attributes.Add("OnBlur", "test(this);"); // radbox.Attributes.Add("OnFocus", "Focus(this);"); radbox.Attributes.Add("OnBlur", "Blur(this);"); radbox.Attributes.Add("OnBlur", "BlurRow(this);"); radbox.Attributes.Add("OnFocus", "FocusRow(this);"); radbox.Attributes.Add("ontextchanged", "txtval_TextChanged"); } } private class MyTemplate1 : ITemplate { protected RadNumericTextBox textBox; private string colname; public MyTemplate1(string cName) { colname = cName; } public void InstantiateIn(System.Web.UI.Control container) { textBox = new RadNumericTextBox(); textBox.ID = colname; textBox.ReadOnly = true; textBox.Value = 0; container.Controls.Add(textBox); } } private class MyTemplateTotal : ITemplate { protected RadNumericTextBox textBox; private string colname; public MyTemplateTotal(string cName) { colname = cName; } public void InstantiateIn(System.Web.UI.Control container) { string str = "ctl"; int countrow = 11; str = "ctl" + countrow.ToString(); try { textBox = new RadNumericTextBox(); textBox.ID = colname; textBox.ReadOnly = true; textBox.Value = 0; container.Controls.Add(textBox); countrow++; str = "ctl" + countrow.ToString(); } catch (Exception) { throw; } } } private void UpdateData() { for (int OuterCol = 1; OuterCol < gridCntrl.Columns.Count; OuterCol++) { for (int inner = 0; inner < gridCntrl.Items.Count; inner++) { double total; string id; if (true) { } else if (gridCntrl.Items[OuterCol].ItemType == GridItemType.Footer) { } } } }}Thanks,
Jayesh Goyani
can u tell me wat actually did u do?
i cant understand during update .. it calls the grid function and also gets the predefined ds with old values , but during display i can see the new values which i typed in radtext box ?? how come ?
Ur indeed MVP ! :)
LET ME know !
When we are add any control dynamically then we must have to add it on every time in Page_load or page_init.
in page initilaize event view state is generated for that control.
In your previously code
1. you are added grid in button1's click event - so it is not create proper viewstate
2. when you click on button2 you are not added grid again - so there is not any grid exists in your viewstate/code
Thanks,
Jayesh Goyani