数据表值不能被访问(即使定义表架构是不存在的) [英] DataTable values cannot be accessed (even defined Table schema is not there)

查看:138
本文介绍了数据表值不能被访问(即使定义表架构是不存在的)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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 SampleTable

Why 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆