我想在运行时制作堆积面积图。我想点击按钮时添加数据点。
但是收到错误“此行已属于另一个表”。
以下是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();
}
答案 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等特定方法中)应解决问题