uncategorized

C# 使用For和Foreach讀取Datatable每筆資料對照寫法

早期各種程式語法針對迴圈寫法,總是用for來實作,這東西真是好用且還歷久不衰,不過,到了開始有Foreach之後,很多迴圈寫法都會改用Foreach實作,畢竟,Foreach算是好物之一。但是,因為長時間習慣用for語法,要一時改變還真不簡單,所以,趁現在趕快紀錄一下避免忘記

  1. 採用For迴圈方式讀Datatable,其中邏輯是要判斷不是第一筆要處理的相關邏輯程式
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    for (int i = 0; i < _dt.Rows.Count; i++)
    {
    if (strReportID != _dt.Rows[i]["s"].ToString())
    {
    if (i != 0)
    {
    dr["R"] = sb.ToString();
    dt.Rows.Add(dr);
    sb = new StringBuilder();
    dr = dt.NewRow();
    }
    strReportID = _dt.Rows[i]["s"].ToString();
    dr["ss"] = _dt.Rows[i]["ss"].ToString();
    sb.Append(_dt.Rows[i]["Name"] + "<br />");
    }
    else
    {
    sb.Append(_dt.Rows[i]["Name"] + "<br />");
    }
    }
    dr["R"] = sb.ToString();
    dt.Rows.Add(dr);

2.用Foreach寫法後,原本判斷是否為第一筆的邏輯,就要改用boolen方式去判斷。且原本是 _dt.Rows[i]的方式就可以省略,改用Datarow物件代替

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
bool bFirst = false;
foreach (DataRow od in _dt.Rows)
{
if (strReportID != od["s"].ToString())
{
if(!bFirst)
{
dr["R"] = sb.ToString();
dt.Rows.Add(dr);
sb = new StringBuilder();
dr = dt.NewRow();
bFirst = true;
}
strReportID = od["s"].ToString();
dr["ss"] = od["ss"].ToString();
sb.Append(od["Name"] + "<br />");
}
else
{
sb.Append(od["Name"] + "<br />");
}
}
dr["R"] = sb.ToString();
dt.Rows.Add(dr);