C# 无法访问DataTable值(即使没有定义的表架构)

C# 无法访问DataTable值(即使没有定义的表架构),c#,asp.net,gridview,datatable,C#,Asp.net,Gridview,Datatable,ASP.Net: <asp:GridView id ="sampleGridView" AutoGenerateEditButton ="True" OnRowEditing ="sampleGridView_RowEditing" OnRowCancelingEdit ="sampleGridView_RowCancelingEdit" OnRowUpdating ="sampleGridView_RowUpdating" runat ="server"></asp:Grid

ASP.Net:

<asp:GridView id ="sampleGridView" AutoGenerateEditButton ="True" OnRowEditing ="sampleGridView_RowEditing" OnRowCancelingEdit ="sampleGridView_RowCancelingEdit" OnRowUpdating ="sampleGridView_RowUpdating" runat ="server"></asp:GridView>
我试着用下面的代码注释掉上面生成代码的错误

Response.Write(dt.Columns.Count+" "+dt.TableName);
输出为:
0可抽样


为什么无法访问datatable值?

我认为您应该尝试使用以下方式在表中添加行:

  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();
for(int i=0;i
当您手动填充页面的成员时,如果需要在回发之间保留,您需要对每个请求执行此操作。这通常是使用会话状态完成的

比如说

    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

    }
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!IsPostBack){
PopulateGridView();
}
其他的
{
dt=(DataTable)会话[“YourDatatable”];//从会话中检索它
sampleGridView.DataSource=dt;
sampleGridView.DataBind();
}
}
私有void PopulateGridView()
{
添加(“名称”,类型(字符串));
dt.Columns.Add(“Desgnation”,typeof(string));
添加(“城市”,类型(字符串));
for(int i=0;i
这是一个猜测,因为您的源代码不完整。您是否记得调用PopulateGridView或从某个位置获取数据表,例如postbacksdatatable上的会话变量不是会话变量。它是类的成员变量问题不在于Add()方法的语法。问题是datatable对象中既没有列也没有行(表示没有数据)。请尝试在datatable对象中声明为受保护的,而不是私有的。然后查看发生了什么?
  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();
    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

    }