数据表值不能被访问(即使定义表架构是不存在的) [英] DataTable values cannot be accessed (even defined Table schema is not there)
问题描述
ASP.Net:
< ASP:GridView控件ID =sampleGridViewAutoGenerateEditButton属性=真OnRowEditing =sampleGridView_RowEditingOnRowCancelingEdit =sampleGridView_RowCancelingEditOnRowUpdating =sampleGridView_RowUpdating=服务器>&LT ; / ASP:GridView的>
code背后:
公共部分类_Default:System.Web.UI.Page
{
私人DataTable的DT =新的DataTable(SampleTable); 保护无效的Page_Load(对象发件人,EventArgs的发送)
{
如果(!的IsPostBack){
PopulateGridView();
}
}
私人无效PopulateGridView()
{
dt.Columns.Add(名,typeof运算(字符串));
dt.Columns.Add(Desgnation,typeof运算(字符串));
dt.Columns.Add(城市,typeof运算(字符串));
的for(int i = 0; I< src.GetLength(0);我++)
{
dt.Rows.Add(源[I,0],SRC [I,1],SRC [Ⅰ,2]);
}
sampleGridView.DataSource = DT;
sampleGridView.DataBind(); }
保护无效sampleGridView_RowUpdating(对象发件人,GridViewUpdateEventArgs E)
{
GridViewRow行= sampleGridView.Rows [e.RowIndex]
//Response.Write(src[1,0]++ dt.Rows [0] [0]);
dt.Rows [row.DataItemIndex] [名称] =((文本框)(row.Cells [1] .Controls [0]))文本。
dt.Rows [row.DataItemIndex] [Desgnation] =((文本框)(row.Cells [1] .Controls [0]))文本。
dt.Rows [row.DataItemIndex] [城市] =((文本框)(row.Cells [3] .Controls [0]))文本。
}
}
System.IndexOutOfRangeException:没有排在位置{行号}说2.在sampleGridView_RowUpdating错误在该行
块引用>dt.Rows [row.DataItemIndex] [名称] =((文本框)(row.Cells [1] .Controls [0]))文本。
我试着以下code注释掉上面的错误生成code
的Response.Write(dt.Columns.Count ++ dt.TableName);
输出为:结果
0 SampleTable为什么数据表中的值不能被访问?
解决方案当你手动填充你需要,如果你需要它回发之间坚持在每次请求做一个页面的成员。这是使用会话状态经常做。
例如
保护无效的Page_Load(对象发件人,EventArgs的发送)
{
如果(!的IsPostBack){
PopulateGridView();
}
其他
{
DT =(数据表)会议[YourDatatable]; //从会话检索
sampleGridView.DataSource = DT;
sampleGridView.DataBind();
}
}
私人无效PopulateGridView()
{
dt.Columns.Add(名,typeof运算(字符串));
dt.Columns.Add(Desgnation,typeof运算(字符串));
dt.Columns.Add(城市,typeof运算(字符串));
的for(int i = 0; I< src.GetLength(0);我++)
{
dt.Rows.Add(源[I,0],SRC [I,1],SRC [Ⅰ,2]);
}
sampleGridView.DataSource = DT;
sampleGridView.DataBind(); 会话[YourDatatable] = DT; //保存起来以备以后 }ASP.Net:
<asp:GridView id ="sampleGridView" AutoGenerateEditButton ="True" OnRowEditing ="sampleGridView_RowEditing" OnRowCancelingEdit ="sampleGridView_RowCancelingEdit" OnRowUpdating ="sampleGridView_RowUpdating" runat ="server"></asp:GridView>
Code Behind:
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. is the error in sampleGridView_RowUpdating at the line
dt.Rows[row.DataItemIndex]["Name"] = ((TextBox)(row.Cells[1].Controls[0])).Text;
I tried following code commenting out the above error generating code
Response.Write(dt.Columns.Count+" "+dt.TableName);
Output is :
0 SampleTableWhy datatable values cant be accessed ?
解决方案When you manually populate a page's members you need to do on every request if you need it to persist between postbacks. This is often done using session state.
For example
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 }
这篇关于数据表值不能被访问(即使定义表架构是不存在的)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!