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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.34574 の関連記事表示

<< 0 >>
■34574  DataGridViewの行インデックス取得
□投稿者/ ryouma -(2009/04/01(Wed) 20:10:44)

    分類:[.NET 全般] 

    初めて質問させていただきます。

    DataGridView/DataTableについての質問なのですが…

    DataTableにてあるDataRowを特定しそのDataRowに紐づいているDataGridViewのRowIndexに該当するものを
    取得したいと考えております。

    検索してみても、DataGridView→DataTableに該当するDataRowの取得方法はよく出てくるのですが、
    逆のDataRow→DataGridViewのRowIndex取得方法についてはあまり記載されていません。
    (理解できていないだけなのかもですが…)

    どなたかご存知の方がいらっしゃりましたらご教授お願いします。
親記事 /過去ログ60より / 関連記事表示
削除チェック/

■34576  Re[1]: DataGridViewの行インデックス取得
□投稿者/ 魔界の仮面弁士 -(2009/04/01(Wed) 21:06:33)
    No34574 (ryouma さん) に返信
    > 検索してみても、DataGridView→DataTableに該当するDataRowの取得方法はよく出てくるのですが、

    それは例えば、こういうコードの事でしょうか?

    《C#》
    DataRow row = ((DataRowView)dataGridView1.Rows[行].DataBoundItem).Row;

    《VB (Option Strict Off)》
    Dim row As DataRow = DataGridView1.Rows(行).DataBoundItem.Row

    《VB (Option Strict On)》
    Dim row As DataRow = DirectCast(DataGridView1.Rows(行).DataBoundItem, DataRowView).Row


    > 逆のDataRow→DataGridViewのRowIndex取得方法についてはあまり記載されていません。

    DataGridView は、自身の DataSource に何が割り当てられているかを知っていますが、
    DataTable は、自分がどのクラスの DataSource に割り当てられているのかを把握できません。
    (一つの DataTable を、複数の DataGridView に割り当てることもできますし)


    ですから、DataGridView → DataRow という探し方はできたとしても、
    DataTable → DataGridViewRow という探し方はできません。
記事No.34574 のレス /過去ログ60より / 関連記事表示
削除チェック/

■34577  Re[2]: DataGridViewの行インデックス取得
□投稿者/ ryouma -(2009/04/01(Wed) 21:27:45)
    ありがとうございます。

    > それは例えば、こういうコードの事でしょうか?
    >
    > 《C#》
    > DataRow row = ((DataRowView)dataGridView1.Rows[行].DataBoundItem).Row;
    >
    > 《VB (Option Strict Off)》
    > Dim row As DataRow = DataGridView1.Rows(行).DataBoundItem.Row
    >
    > 《VB (Option Strict On)》
    > Dim row As DataRow = DirectCast(DataGridView1.Rows(行).DataBoundItem, DataRowView).Row

    そうです。
    実際私もこのようにDataRowを取得しています。

    >
    >>逆のDataRow→DataGridViewのRowIndex取得方法についてはあまり記載されていません。
    >
    > DataGridView は、自身の DataSource に何が割り当てられているかを知っていますが、
    > DataTable は、自分がどのクラスの DataSource に割り当てられているのかを把握できません。
    > (一つの DataTable を、複数の DataGridView に割り当てることもできますし)
    >
    >
    > ですから、DataGridView → DataRow という探し方はできたとしても、
    > DataTable → DataGridViewRow という探し方はできません。

    そうでしたか…
    勉強不足でスミマセン…

    ただ、DataTable.DefaultView(DataView)に保持している順序はDataGridViewでの表示順と同じだと
    認識しているのですが…
    そこから辿っていくすべがあるのかと思いまして…
    例えば
    DataTable.DefaultViewから現在作業中のDataRowに対応するDataRowViewが特定できないかと…
    今試行錯誤しているのですが…

     DataTable dtbl = (DataTable)grid.DataSource;
     DataRow drow = dtbl.Rows[xx]; // 作業している行です…
     
     int index = 0;
     foreach(DataRowView drv in dtbl.DefaultView){
      if(drv.Row == drow){
       break;
      }
      index++;
     }

     これで一応表示上の行インデックスは取得できたのですが…
     なんだかスマートじゃないとおもいまして…

    実際現在作業しているDataRowに該当するグリッド上のインデックスを取得するには
    どのようにするのがよいのかご存知でしたら教えていただけないでしょうか。
    よろしくお願いします。
記事No.34574 のレス /過去ログ60より / 関連記事表示
削除チェック/

■34581  Re[3]: DataGridViewの行インデックス取得
□投稿者/ 魔界の仮面弁士 -(2009/04/01(Wed) 22:34:00)
    2009/04/02(Thu) 11:13:28 編集(投稿者)

    No34577 (ryouma さん) に返信
    > ただ、DataTable.DefaultView(DataView)に保持している順序はDataGridViewでの表示順と同じだと
    > 認識しているのですが…

    たとえば、
     dataGridView1.DataSource = new DataView(tbl1);
     dataGridView2.DataSource = tbl1;
     dataGridView3.DataSource = new BindingSource(tbl1, "");
    の場合、dataGridView1 の順序は、tbl1.DefaultView.Sort ではありませんよね。

    (tbl1 側は、.DefaultView を使っているのか、new DataView を使っているのか把握できません)


    なお、DataGridView の行のバインド先の行が、tbl1.DefaultView 上にあるという保証はありません。
    何故なら、DataGridView.AllowUserToAddRows = true の場合、最下行に「新規行」があるわけですが、
    入力中の新規行が指す DataRow は、まだ DataTable にさえ登録されていない状態ですから。


    ただし、「現在のカーソル行」に限定した話であれば、中継役となる BindingManagerBase から
    取得できる可能性はありますけれどね。BindingSource や Form.BindingContext[o] の Position プロパティなど。
記事No.34574 のレス /過去ログ60より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -