DataTable似乎丢失了数据

时间:2018-02-02 14:42:34

标签: c# asp.net datatable webforms

当我想要添加列时,我是否覆盖了数据表?我知道如果我在_FinishButton()事件中写入输出窗口,我的结果就在那里,但是当我在pushdatatos()方法中写入输出时它是空的。我将Datatable desclared作为类变量。

我在这里编码的错误是什么?

DataTable dtResult = new DataTable();

protected void FinishBtn_Click(object sender, EventArgs e)
{
    pushdatatosql();
}

protected void Wizard1_FinishButtonClick(object sender, WizardNavigationEventArgs e)
{
    DataRow dr = null;
    dtResult.Columns.Add(new DataColumn("mainevent", typeof(string)));
    dtResult.Columns.Add(new DataColumn("secondevent", typeof(string)));

    foreach (GridViewRow gr in grdOther.Rows)
    {
        dr = dtResult.NewRow();
        TextBox box1 = (TextBox)gr.Cells[1].FindControl("txtmainevent");
        TextBox box2 = (TextBox)gr.Cells[2].FindControl("txtse");

        dr["mainevent"] = box1.Text;
        dr["secondevent"] = box2.Text;

        dtResult.Rows.Add(dr);
    }
}


protected void pushdatatosql()
{
    foreach (DataRow dataRow in dtResult.Rows)
    {
        foreach (var item in dataRow.ItemArray)
        {
            System.Diagnostics.Debug.WriteLine(item);
        }
    }

    using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLString"].ConnectionString))
    {
        connection.Open();
        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
        {
            foreach (DataColumn c in dtResult.Columns)
                bulkCopy.ColumnMappings.Add(c.ColumnName, c.ColumnName);

            bulkCopy.DestinationTableName = "TestInsertTable";
                bulkCopy.WriteToServer(dtResult);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您引用的dtResult类变量只会持续与请求一样长。因此,对于您在页面中创建的每个回发,将创建此类的新实例,并创建该类成员。在Webforms中,“Unload事件在页面完全呈现,发送到客户端并准备好被丢弃后引发。” MSDN。此时,您的类变量及其保存的任何值都将被销毁。

要解决此问题,您可以尝试将值存储在视图状态中。哪个persists across requests