我有一个如下所示的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
但它不存在。
答案 0 :(得分:5)
DataRow
有indexer你可以使用:
foreach(DataRow row in myDataSet.Tables[0].Rows)
Console.WriteLine("I'm in Column B: " + row["D"]);
您可以通过该字段的name或ordinal-index访问它。如果您的引用为DataColumn
,则可以使用third overload,并在找到列后由其他人使用{{3}}。如果您不想“搜索”该列(虽然努力可以忽略不计),请使用:
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"));
答案 1 :(得分: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();
}