2

次のような DataSet があります。

| A | B | C | D | E | F | G | H | I | ... |   Z  |
--------------------------------------------------
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ... |  26  |
|11 |22 |33 |44 |55 |66 |77 |88 |99 | ... | 2626 |
|111|222|333|444|555|666|777|888|999| ... |262626|

は関係ありません。たくさんのコラムがあります。

特定の列のすべての行を調べたいと思います。
すべての列を通過しなくても可能ですか? 今私が考えることができるのはこれだけだからです(列Dのすべての行が必要だとしましょう)

C#

foreach(DataRow row in myDataSet.Tables(0).Rows)
   if(row.Column == myDataSet.Tables(0).Columns("D"))
      MessageBox.Show("I'm in Column B");

VB

For Each row As DataRow In myDataSet.Tables(0).Rows
If row.Column Is myDataSet.Tables(0).Columns("D") Then
MessageBox.Show("I'm in Column B")
End If
Next

しかし、これはすべての列をループします。のようなコレクションを使いたいのです
myDataSet.Tables(0).Columns("D").Rowsが、存在しません。

4

2 に答える 2

5

DataRow使用できるインデクサーがあります。

foreach(DataRow row in myDataSet.Tables[0].Rows)
    Console.WriteLine("I'm in Column B: " + row["D"]);

フィールドの名前または序数インデックスを介してアクセスできます。3 番目のオーバーロードDataColumnは、参照があり、列が見つかった後に他のユーザーによって使用される場合に使用できます 。列を「検索」したくない場合 (労力はごくわずかですが)、これを使用します。

DataColumn col = myDataSet.Tables[0].Columns["D"];
foreach(DataRow row in myDataSet.Tables[0].Rows)
        Console.WriteLine("I'm in Column B: " + row[col]);

ただし、たとえば、この列のすべての値を合計する場合は、Linq を使用することもできます。

int dTotal = myDataSet.Tables[0].AsEnumerable().Sum(r => r.Field<int>("D"));
于 2013-05-06T14:13:10.390 に答える
2

架空のグリッドでは、行を垂直にスクロールし、列に水平にアクセスします

foreach(DataRow row in myDataSet.Tables(0).Rows)
{
   // At this point the row iterator point to a row 
   // where all the values in the schema columns are available
   // Indexing with the column name will result in related value 
   MessageBox.Show(row["D"].ToString();
}
于 2013-05-06T14:14:06.800 に答える