C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 56 を表示中)
■31889 / )  Re[8]: BindingSourceでフラグを立てる方法
□投稿者/ 魔界の仮面弁士 (978回)-(2009/01/29(Thu) 18:56:36)
2009/01/29(Thu) 19:07:55 編集(投稿者)
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;
    }

返信 編集キー/


管理者用

- Child Tree -