DataTable values โ€‹โ€‹cannot be accessed (even a specific table schema is missing)

ASP.Net:

<asp:GridView id ="sampleGridView" AutoGenerateEditButton ="True" OnRowEditing ="sampleGridView_RowEditing" OnRowCancelingEdit ="sampleGridView_RowCancelingEdit" OnRowUpdating ="sampleGridView_RowUpdating" runat ="server"></asp:GridView> 

Code for:

 public partial class _Default : System.Web.UI.Page { private DataTable dt = new DataTable("SampleTable"); protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack){ PopulateGridView(); } } private void PopulateGridView() { dt.Columns.Add("Name", typeof(string)); dt.Columns.Add("Desgnation", typeof(string)); dt.Columns.Add("City", typeof(string)); for (int i = 0; i < src.GetLength(0); i++) { dt.Rows.Add(src[i, 0], src[i, 1], src[i, 2]); } sampleGridView.DataSource = dt; sampleGridView.DataBind(); } protected void sampleGridView_RowUpdating(object sender, GridViewUpdateEventArgs e) { GridViewRow row = sampleGridView.Rows[e.RowIndex]; //Response.Write(src[1,0]+" "+ dt.Rows[0][0]); dt.Rows[row.DataItemIndex]["Name"] = ((TextBox)(row.Cells[1].Controls[0])).Text; dt.Rows[row.DataItemIndex]["Desgnation"] = ((TextBox)(row.Cells[1].Controls[0])).Text; dt.Rows[row.DataItemIndex]["City"] = ((TextBox)(row.Cells[3].Controls[0])).Text; } } 

System.IndexOutOfRangeException: there is no row at position {Row Number} say 2. this is an error in sampleGridView_RowUpdating in the row

 dt.Rows[row.DataItemIndex]["Name"] = ((TextBox)(row.Cells[1].Controls[0])).Text; 

I tried the following code, commenting out the error code above

 Response.Write(dt.Columns.Count+" "+dt.TableName); 

Output:
0 SampleTable

Why is access to data impossible?

0
source share
2 answers

When you manually fill in the page members, you need to do for each request, if you need to keep it between postbacks. This is often done using session state.

for instance

  protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack){ PopulateGridView(); } else { dt = (DataTable)Session["YourDatatable"]; //retrieve it from session sampleGridView.DataSource = dt; sampleGridView.DataBind(); } } private void PopulateGridView() { dt.Columns.Add("Name", typeof(string)); dt.Columns.Add("Desgnation", typeof(string)); dt.Columns.Add("City", typeof(string)); for (int i = 0; i < src.GetLength(0); i++) { dt.Rows.Add(src[i, 0], src[i, 1], src[i, 2]); } sampleGridView.DataSource = dt; sampleGridView.DataBind(); Session["YourDatatable"] = dt; //Store it for later } 
+2
source

I think you should try adding a row to the table using this method:

  for (int i = 0; i < src.GetLength(0); i++) { DataRow dr = dt.NewRow(); dr[0] = src[i, 0]; dr[1] = src[i, 1]; dr[2] = src[i, 2]; dt.Rows.Add(dr); } sampleGridView.DataSource = dt; sampleGridView.DataBind(); 
0
source

All Articles