■No31888 (たこやき さん) に返信
> myDS ds = (myDS)myTBLBindingSource.DataSource;
> DataTable dt = (DataTable)ds.myTBL;
> for (int i = 0; i < dt.Rows.Count; i++)
> dt.Rows[i]["fg"] = True;
型付 DataSet をお使いなら、
myDS ds = (myDS)myTBLBindingSource.DataSource;
foreach (myDS.myTBLRow row in ds.myTBL)
{
row.fg = true;
}
の方が良いかと。
> 残念なことに、Filterを掛けた状態で先のソースを実行すると、
> 全てのデータにフラグが立てられます。(表示外のデータにも)
Filter は BindingSource 側にかけられているので、それを使わねば始まりません。
(あるいは、同じフィルタを適用した DataView を使うと言う手もありますが…)
元質問のように、for + Position で移動すると、カーソル位置が変わってしまうので、
foreach で列挙するようにします。たとえば、こんな感じ。
foreach (DataRowView rowView in myTBLBindingSource)
{
myDS.myTBLRow row = (myDS.myTBLRow)rowView.Row;
row.fg = true;
}
なお、もしも元質問のように Position で移動するのであれば、
最後に BindingSource.EndEdit() を呼ぶようにしてください。
そうしないと、最終行のデータ反映が遅れてしまう可能性があります。
> BindingSource.GetEnumerator()を用いてできないものだろうかと
> 試みてみたのですが、どうもうまく行きません。
IEnumerator eBS = myTBLBindingSource.GetEnumerator();
while (eBS.MoveNext())
{
myDS.myTBLRow row = (myDS.myTBLRow)((DataRowView)eBS.Current).Row;
row.fg = true;
}