3

次の形式のデータを含むデータテーブルがあります: このデータテーブルに dt1 という名前を付けましょう

ColumnA       ColumnB        ColumnC
-------------------------------------
President     Manager        President
                             Manager

上記のデータテーブルのデータは、Web フォームのチェックリストとして機関選択の目的で選択するために提供されます。チェックリストの項目がチェックされ、ボタン クリックが発生すると、以下に示すように、チェックされた項目を別のデータ テーブルに挿入します。このデータ テーブルに dt2 という名前を付けます。

 ----------
  Manager
  President
  Manager

ここで、dt2 のデータ項目が発生する dt1 (最初のデータテーブル) から列名を取得する必要があります。たとえば、このシナリオでは、別のデータテーブル (dt3 など) への必要な出力は次のようになります。

--------
ColumnB
ColumnC
ColumnC

このデータテーブル (dt3) には、dt2 (チェックリストからチェックされたテキストを含む) に dt1 の「ColumnB」の下にあるデータ項目「Manager」があるため、「ColummB」が含まれています。dt2 には dt1 の「ColumnC」の下にある「President」と「Manager」が含まれているため、「ColumnC」は 2 回出現します。

dt1 と dt2 の値を比較して dt3 に追加できるように、効率的なループ (できれば dt1 の coulmnwise) が必要です。dt1 にはデータベースからのデータが含まれ、dt2 にはフォームからの値がチェックされているため、dt1 と dt2 のデータ項目は固定されていないことに注意してください。最後に、dt3 の行数は dt2 の行数と等しくなる必要があります (または) dt3 を作成する代わりに、新しい列を dt2 に追加できます (同じ行数を維持します)。

4

1 に答える 1

1

アイデアは、データテーブルの各行と列をループすることです。
次に、2 番目のデータ テーブル値をループします
。値が一致する場合は、列名を選択します。

以下は、あなたができることのアイデアです

 DataTable dt1;
 DataTable dt2;
 DataTable dt3;
 string[] ar=new string....

 foreach (DataRow dr in dt1.Rows)
 {
      foreach (DataColumn clm in dt1.Columns)
      {
          //loop through each value of the other table
          foreach(DataRow drow in dt2.Rows)
          {
               string value = drow[0].ToString();
               if(value==clm)
               {
                    //add the column name into a array
                     DataRow row = dt3.NewRow();
                     row[0]=clm.ColumnName;
                     dt3.Rows.Add(row);
                     break;
               } 
          }
      }
 }
于 2013-04-23T04:18:12.153 に答える