2012-12-11 20 views
8

asp.netのDataTableで特定の行を取得し、このDataTableの最初の列に移動する場合は、の値の列に移動します。私のデータテーブルdt1は、DBクエリを介して読み込まれ、検索する値は別のDBからの別のクエリを経由しているため、dt1 select時に検索する値がわかりません。DataTableの行をDataTableの最初の位置に移動する方法

// I use this variable to search into 
// DataTable 
string valueToSearch = "some value"; 

だから私は列column1の私のDataTableに値some valueを検索する必要があります。行全体を最初の位置に移動します。

ありがとうございます。

+0

どのようにこのDataTableの人口がある

私はあなたのデータベースの何も知らないので、ここではこれを行うための一般的な方法は何ですか? –

+0

@WonkotheSaneを介してデータベースベースのクエリを実行します。私は文字列の値を持つ 'column1'を持っています。 – anmarti

答えて

22

我々は前行データのクローンを作成する必要があります:

  DataRow[] dr = dtable.Select("column1 ='" + valueToSearch +"'"); 
      DataRow newRow = dtable.NewRow(); 
      // We "clone" the row 
      newRow.ItemArray = dr[0].ItemArray; 
      // We remove the old and insert the new 
      ds.Tables[0].Rows.Remove(dr[0]); 
      ds.Tables[0].Rows.InsertAt(newRow, 0); 
+0

輝かしい解決策 –

0

この

DataRow[] dr = dtEmp.Select("column1 ='" + valueToSearch +"'"); 
myDataTable.Rows.InsertAt(dr[0], 0); 
+0

既にこのデータテーブルに属しているため挿入できませんので、前もって削除する必要があります。 – anmarti

+1

これを見てください。あなたは行を削除して、それが動作すれば再度挿入する必要はありません。 http://www.codeproject.com/Tips/312545/A-method-to-move-rows-within-a-DataTable –

0

を試みるよりも列が検索値のための1つのレコードのみを持っている場合は、この上のパフォーマンスをテストする必要がありますが、これを行うための一つの方法は、クエリ自体です。一番上にある行を最初に取得し、それを残りの行と結合します。

SELECT Column1, Column2, Column3 
FROM MyTable 
WHERE Column1 = 'some value' 

UNION 

SELECT Column1, Column2, Column3 
FROM MyTable 
WHERE Column1 <> 'some value' 
+0

データテーブルのソースと検索する値が異なるため、私はそれを行うことができませんが、クエリ時に検索する価値はわかりません。 – anmarti

+0

その場合、詳細を記入するために質問を編集する必要があります。データテーブルにはどのようにデータが埋め込まれていますか(バインディングを含む)、フィルタとしてどのような値が入力されたかなどです。現在、皆さんの設計ではすべてが推測されています。 –

関連する問題