이 행은 행을 추가하려고 할 때 이미 다른 테이블 오류에 속합니까? 이미 속합니다.

일부 행이있는 DataTable이 있고 select를 사용하여 행을 필터링하여 DataRows 컬렉션을 가져 와서 foreach를 사용하여 반복하여 다른 DataTable에 추가하지만 “이 행은 이미 속합니다. 다른 테이블에 ” 코드는 다음과 같습니다.

DataTable dt = (DataTable)Session["dtAllOrders"];
DataTable dtSpecificOrders = new DataTable();

DataRow[] orderRows = dt.Select("CustomerID = 2");

foreach (DataRow dr in orderRows)
{
    dtSpecificOrders.Rows.Add(dr); //Error thrown here.
}


답변

먼저 Row값 을 사용하여 새 것을 만들어야합니다 dr. A는 DataRow단 하나에 속할 수 있습니다 DataTable.

Add값 배열을 사용 하는 것을 사용할 수도 있습니다 .

myTable.Rows.Add(dr.ItemArray)

또는 아마도 더 나을 것입니다 :

// This works because the row was added to the original table.
myTable.ImportRow(dr);

// The following won't work. No data will be added or exception thrown.
var drFail = dt.NewRow()
drFail["CustomerID"] = "[Your data here]";
// dt.Rows.Add(row); // Uncomment for import to succeed.
myTable.ImportRow(drFail);

답변

이 시도:

DataTable dt = (DataTable)Session["dtAllOrders"];
DataTable dtSpecificOrders = dt.Clone();

DataRow[] orderRows = dt.Select("CustomerID = 2");

foreach (DataRow dr in orderRows)
{
    dtSpecificOrders.ImportRow(dr);
}

답변

yourTable.ImportRow(dataRow);

복사하는 행이 같지 않기 때문입니다 TableName.

예를 들어 다음을 시도하십시오.

Table1.TableName = "Table1";
Table2.TableName = "Table2";

답변

foreach (DataRow dr in dtSpecificOrders.rows)
{
   dtSpecificOrders.Rows.Add(dr.ItemArray);
}

답변

이것은 가장 깨끗하고 / 빠른 / 가장 쉬운 / 가장 우아한 솔루션은 아니지만 비슷한 시나리오에서 작업을 수행하기 위해 만든 무차별 대입입니다.

DataTable dt = (DataTable)Session["dtAllOrders"];
DataTable dtSpecificOrders = new DataTable();

// Create new DataColumns for dtSpecificOrders that are the same as in "dt"
DataColumn dcID = new DataColumn("ID", typeof(int));
DataColumn dcName = new DataColumn("Name", typeof(string));
dtSpecificOrders.Columns.Add(dtID);
dtSpecificOrders.Columns.Add(dcName);

DataRow[] orderRows = dt.Select("CustomerID = 2");

foreach (DataRow dr in orderRows)
{
    DataRow myRow = dtSpecificOrders.NewRow();  // <-- create a brand-new row
    myRow[dcID] = int.Parse(dr["ID"]);
    myRow[dcName] = dr["Name"].ToString();
    dtSpecificOrders.Rows.Add(myRow);   // <-- this will add the new row
}

DataColumns의 이름은 원래 테이블의 이름과 일치해야 작동합니다. 방금 “ID”와 “Name”을 예로 사용했습니다.


답변

왜 그냥 사용하지 않습니까 CopyToDataTable

DataTable dt = (DataTable)Session["dtAllOrders"];
DataTable dtSpecificOrders = new DataTable();

DataTable orderRows = dt.Select("CustomerID = 2").CopyToDataTable();

답변

열에 ID를 부여하고 고유하게 이름을 지정할 수 있습니다.