private bool storetods() //store the data to dataset
{
DataTable dt = ds.Tables["AirSampleSyncData"]; try
{
foreach (DataRow d in dt.Rows) //finalmax是次序.在这里可以当成是固定值.
{
if (d["dataSerialId"].ToString() == finalmax.ToString())
{
d.Delete();
d.AcceptChanges();
}
}
//datatype是包含TextBox控件名称的数组.
//FindTextBox(object o,String tbName) o是容器的引用,tbName是所要获取引用的TextBox的名称.
foreach (String tbName in datatype)
{
TextBox tb = FindTextBox(dataInput,tbName);
if (tb.Text != "") //如果TextBox内容为空则不插入数据到DataSet的表AirSampleSyncData中.
{
DataRow dr = dt.NewRow();
dr["dataType"] = tbName;
dr["dataValue"] = tb.Text;
dr["dataSerialId"] = finalmax.ToString();
dr["taskId"] = parent.GetTaskId();
dt.Rows.Add(dr);
}
}
dt.AcceptChanges();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
return false;
}
finally
{
;
} return true;
}问题是这样的.当第一次调用的时候,因为表dt中没有符合finalmax的内容.所以下面部分中的删除操作就不会执行.代码运行没有问题,if (d["dataSerialId"].ToString() == finalmax.ToString())
{
d.Delete();
d.AcceptChanges();
}下面的这部分也将数据插入DataSet的表中的操作也没有问题foreach (String tbName in datatype)
{
TextBox tb = FindTextBox(dataInput,tbName);
if (tb.Text != "") //如果TextBox内容为空则不插入数据到DataSet的表AirSampleSyncData中.
{
DataRow dr = dt.NewRow();
dr["dataType"] = tbName;
dr["dataValue"] = tb.Text;
dr["dataSerialId"] = finalmax.ToString();
dr["taskId"] = parent.GetTaskId();
dt.Rows.Add(dr);
}
}
dt.AcceptChanges();
但当第二次再运行这个函数的时候,因为Dataset中的AirSampleSyncData中已经存在符合finalmax的行.这样就会执行删除操作.当是一执行就是会报错.我也不知道是在执行删除的时候发出的错还是在插入新的数据的时候出了错.显示InvalidOperationException.
我不知道什么原因.高手帮忙一下.
{
DataTable dt = ds.Tables["AirSampleSyncData"]; try
{
foreach (DataRow d in dt.Rows) //finalmax是次序.在这里可以当成是固定值.
{
if (d["dataSerialId"].ToString() == finalmax.ToString())
{
d.Delete();
d.AcceptChanges();
}
}
//datatype是包含TextBox控件名称的数组.
//FindTextBox(object o,String tbName) o是容器的引用,tbName是所要获取引用的TextBox的名称.
foreach (String tbName in datatype)
{
TextBox tb = FindTextBox(dataInput,tbName);
if (tb.Text != "") //如果TextBox内容为空则不插入数据到DataSet的表AirSampleSyncData中.
{
DataRow dr = dt.NewRow();
dr["dataType"] = tbName;
dr["dataValue"] = tb.Text;
dr["dataSerialId"] = finalmax.ToString();
dr["taskId"] = parent.GetTaskId();
dt.Rows.Add(dr);
}
}
dt.AcceptChanges();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
return false;
}
finally
{
;
} return true;
}问题是这样的.当第一次调用的时候,因为表dt中没有符合finalmax的内容.所以下面部分中的删除操作就不会执行.代码运行没有问题,if (d["dataSerialId"].ToString() == finalmax.ToString())
{
d.Delete();
d.AcceptChanges();
}下面的这部分也将数据插入DataSet的表中的操作也没有问题foreach (String tbName in datatype)
{
TextBox tb = FindTextBox(dataInput,tbName);
if (tb.Text != "") //如果TextBox内容为空则不插入数据到DataSet的表AirSampleSyncData中.
{
DataRow dr = dt.NewRow();
dr["dataType"] = tbName;
dr["dataValue"] = tb.Text;
dr["dataSerialId"] = finalmax.ToString();
dr["taskId"] = parent.GetTaskId();
dt.Rows.Add(dr);
}
}
dt.AcceptChanges();
但当第二次再运行这个函数的时候,因为Dataset中的AirSampleSyncData中已经存在符合finalmax的行.这样就会执行删除操作.当是一执行就是会报错.我也不知道是在执行删除的时候发出的错还是在插入新的数据的时候出了错.显示InvalidOperationException.
我不知道什么原因.高手帮忙一下.
另外判断一个字符串是否为空,最好使用string.isnullorempty();
{
d.Delete();
}
dt.AcceptChanges();// 会把RowState为deleted的删除掉
{
if (d["dataSerialId"].ToString() == finalmax.ToString())
{
d.Delete();
// d.AcceptChanges();去掉这行
}
}
dt.AcceptChanges();//你在下面的程式中已经写了
等到最后循环完毕后再执行dt.AcceptChanges()让datatable接收先前对datatable的操作,就可以了.