向数据表中添加新行时会出现错误

时间:2017-01-11 10:40:57

标签: c# asp.net infragistics

我想在运行时制作堆积面积图。我想点击按钮时添加数据点。

但是收到错误“此行已属于另一个表”。

以下是Simple Project的完整代码;

DataRow drIBM, drMSN, drMCN;
DataTable chartData = new DataTable();
Random r = new Random();
int count = 0;

protected void Page_Load(object sender, EventArgs e)
{
    chartData.Columns.Add("Series Label", typeof(string));

    for (int i = 0; i < 10; i++)
    {
        chartData.Columns.Add("DP_" + i.ToString(), typeof(int)); // Addind Datapoints as a Columns
    }

    drIBM = chartData.NewRow();
    drMSN = chartData.NewRow();
    drMCN = chartData.NewRow();

    drIBM["Series Label"] = "IBM";
    drMSN["Series Label"] = "MSN";
    drMCN["Series Label"] = "MCN";

    if (Session["chartData"] == null)
    {
        Session["chartData"] = chartData;
    }

}

protected void Button1_Click(object sender, EventArgs e)
{
    count++;

    chartData = Session["chartData"] as DataTable;

    drIBM[count] = r.Next(1, 10); // Datarow[Column Index] getting random number
    drMSN[count] = r.Next(1, 10);
    drMCN[count] = r.Next(1, 10);

    chartData.Rows.Add(drIBM); // In this part I am getting above error.
    chartData.Rows.Add(drMSN);
    chartData.Rows.Add(drMCN);

    Session["chartData"] = chartData;
    UltraChart1.DataSource = Session["chartData"];
    UltraChart1.DataBind();
}

2 个答案:

答案 0 :(得分:0)

我对DataRow课程的内部运作并不十分熟悉,但我猜它在您致电chartData

时会引用chartData.NewRow();

Button1_Click()中,您要将此引用替换为Session对象中保存的对象。尽管语义上与chartData相同,但DataRow认为这是一个不同的对象,因此会引发异常。

考虑到chartData似乎是一个类变量,我不确定你为什么要打扰Session。尝试删除以下行,看看是否有效:

chartData = Session["chartData"] as DataTable;

答案 1 :(得分:0)

您已全局声明了Row变量。如果你将这些变量的范围更改为local,即从顶部删除这些DataRow变量的声明,并在方法中再次声明它们(例如声明DataRow drIBM,drMSN,drMCN;在Page_Load和Button_Click1等特定方法中)应解决问题