将一个DataTable中的数据按条件复制到另一个DataTable中的时候
出现“该行已经属于另一个表”的错误
以下为转载内容:
dtReturn.Rows.Add(dt.Rows[0].ItemArray); //--这是正确的, 关键是加上这一个ItemArray
private DataTable GetAllSons(string MemberID)
{
DataTable dtReturn =new DataTable();
string sql = " select * from view_MemberInfo where RecommenderID=" + MemberID;
if (btnSearch.CommandName.Equals("search") && !string.IsNullOrEmpty(txtKeyword.Text))
{
sql += " and Name='" + txtKeyword.Text.Trim() + "'";
}
sql = sql + " Order by AddDate Desc";
DataTable dt = MEMBER.CreateDataTable(sql);
dtReturn = dt.Clone();
if(btnSearch.CommandName.Equals("search") && !string.IsNullOrEmpty(txtKeyword.Text))
{
if(dt.Rows.Count> 0)
{
//dtReturn.Rows.Add(dt.Rows[0]); //--出现“该行已经属于另一个表”的错误
dtReturn.Rows.Add(dt.Rows[0].ItemArray); //--这是正确的
}
}
else
{
foreach (DataRow row in dt.Rows)
{
GetOneRow(dtReturn, row);
}
}
return dtReturn;
}
以下为本人自己的解决方法:
其实导致这个问题的根本不在ItemArray的转换,而在于将源表复制到目标表后,NEW的行对象本身不从属于目标表,即
DataTable newDatatable = datatable.Copy();
DataRow dataRow = newDatatable.NewRow();
这样写就不会出错了,dataRow是属性newDatatable的对象