2012-01-09 43 views
0

私はこれをしたい: DataTable内のADO.NET DataRowを別のDataRowで更新する方法

public void UpdateDataRowsToDataTable(string tableName, List<DataRow> rows) 
    { 
     foreach (DataRow row in rows) 
     { 
      // this method does not exist!! 
      _dataSet.Tables[tableName].Rows.Update(row); 
     } 
    } 

は、私は(多分、主キーにより)行を検索し、更新がDataTableの行に行を変更する方法を必要としています。

私が知っている唯一の可能性は、Select(またはFind)を使用して、すべての列を反復して新しい値を与えることです。これは真実ではないことを私に教えてください!

答えて

3

を使用している場合データ表。このような場合は、findメソッドを使用して、提案した方法で手動で更新するか、別のテーブルに新しい行を追加してマージします(2つのデータテーブルをマージするためのオプションがあります)。しかし、マージは、フードの下で同じことを行うだけです(つまり、主キーで検索して列を更新する)。ただ行を交換し、修正datarow.SetModified()

+0

ありがとう!私は全く疑問を認めない。それは私がやりたかったのはおそらく馬鹿だったからです。私の質問にも答えました。 –

1

それとも、古いものを削除して、新しいものを追加することができます...

+0

2つの理由で何も解決しないでしょう:最初に:まだそれを見つける基準を作る必要があります。それはデータベースに書き戻されたときに間違った行ステータスを持つことになります。 –

+0

新しい行がデータテーブルに存在しない場合は、それらを見つけるための基準を提供する必要があります。マジックはありません(マージは主キーに基づいています)。また、行のステータスを 'row.SetModified()'に設定すると、行を保存した後に問題を解決できます。 –

+0

@mike:thaks。状態の部分はOKですが、「マージはプライマリキーに基づいてそれらを見つけるでしょう」という意味ですか?私はあなたの答えから今理解しています。そう答える必要はありません。 –

0

あなたはあなたのDataTableが同じであれば、それを行うためにボクシングを使用することができます。

DestDataset.DestDataTable newChildRecords = 
(DestDataset.DestDataTable)_dataset.Tables[tableName].GetChanges(DataRowState.Added); 
0

質問はあなたが一つのテーブルからの行のグループを持っているし、別の同等の行を更新したいように聞こえる非常に明確ではないが、あなたがデータアダプター...

foreach (DataRow row in rows) 
{ 
    Row.BeginEdit();   
    //Do your stuff   
    Row.EndEdit(); 
} 
dataAdapter.Update(_dataSet, "yourTable"); 
0

別のオプションにそのステータスを設定することです

もう一つの方法は、DataRowインスタンスを更新するItemArrayプロパティを使用することです。唯一のことは、適切な行を選択する必要があることです。また、modification reflected in the DataTableを持つために、要素の代わりにItemArray全体を変更する必要があることに注意してください。

foreach (DataRow row in rows) 
{ 
    // Select the row 
    var rows = _dataSet.Tables[tableName].Select(string.Format("Table_ID = {0}", row["Table_ID"])); 

    // Update the row 
    if (0 < rows.Length) 
     rows[0].ItemArray = (object[])row.ItemArray.Clone(); 
} 

にかかわらず、あなたがたDataRowを更新するために選んだ道の、あなたが拡張メソッドに全体を置くことができます。

関連する問題