- PR -

【DataGrid】複数行を選択したとき選択した行数を取得

投稿者投稿内容
ダイコク
会議室デビュー日: 2006/03/04
投稿数: 8
お住まい・勤務地: 北海道
投稿日時: 2006-03-10 11:41
いつもお世話になっております。
質問させて頂きます。

開発環境:VS.NET 2003
開発言語:C#

件名の通りDataGridにて複数の行を選択した場合の
選択した行数を取得する方法を調べております。

最終的に実装したい機能は
複数行選択し、削除ボタンを押すことで
選択した行を削除する機能です。

デバックでDataGrid内を見てみると
選択した行を保持しているメンバ(numSelectedRows)
がいるようですが非公開メンバのようで取得できませんでした。
他に何か方法はありませんでしょうか。
もしご存知の方いらっしゃいましたら
どうかご教授願います。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-10 12:39
引用:

ダイコクさんの書き込み (2006-03-10 11:41) より:

デバックでDataGrid内を見てみると
選択した行を保持しているメンバ(numSelectedRows)
がいるようですが非公開メンバのようで取得できませんでした。
他に何か方法はありませんでしょうか。


取得する方法はあります。

コード:

    System.Type dataGridType = (this.dataGrid1).GetType();

    object o = dataGridType.InvokeMember(
        "numSelectedRows",
        System.Reflection.BindingFlags.NonPublic |
        System.Reflection.BindingFlags.Instance  |
        System.Reflection.BindingFlags.GetField,
        null,
        this.dataGrid1,
        null
    );

    if (o != null) {
        MessageBox.Show(o.ToString());
    }


が、これだけでは解決できないように思えます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ダイコク
会議室デビュー日: 2006/03/04
投稿数: 8
お住まい・勤務地: 北海道
投稿日時: 2006-03-13 14:26
じゃんぬねっとさん>
度々返答ありがとうございます。
教えて頂いた方法を試してみました。

そこで1点問題ありまして
再度質問させて頂きました。

InvokeMemberメソッド実行時に
下記の例外エラーが発生しています。
****************************************************************************
フィールド BoardThicknessAnalyzesSystem.MyDataGrid.RowPluralSelect
が見つかりません。****************************************************************************

上記のMyDataGridというのはDataGridを意味しています。
実は私が使用しているDataGridは
選択行の色替えをアプリ側で制御出来るように
DataGridを継承したMyDataGridなるものを製作して
使用しています。
このことが原因となっているかと思いましたが
違うようでした。

またInvokeMemberの第一パラメータに
通常アクセスできるメンバの名称を指定してみましたが
同様の例外エラーが発生してしまいます。

色々値を変更してみましたが
未だ進展がありません。
どうかご教授願います。

ダイコク
会議室デビュー日: 2006/03/04
投稿数: 8
お住まい・勤務地: 北海道
投稿日時: 2006-03-13 14:29
一部、掲載文が誤っていました。
すいません。
出ているのは下記の例外エラーメッセージです。

****************************************************************************
フィールド BoardThicknessAnalyzesSystem.MyDataGrid.numSelectedRows
が見つかりません。****************************************************************************

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-13 15:10
私の環境では取得できますよ。> System.Windows.Forms.DataGrid さんの numSelectedRows
どのようなコードを書かれていますか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ダイコク
会議室デビュー日: 2006/03/04
投稿数: 8
お住まい・勤務地: 北海道
投稿日時: 2006-03-13 17:17
>私の環境では取得できますよ。> System.Windows.Forms.DataGrid さんの
>numSelectedRows
>どのようなコードを書かれていますか?

そのままカットアンドペーストしているのですが・・・。
環境の違いとしか言いようが無いのでしょうか。
詳しくエラーメッセージを書きますと以下になります。
***************************************************
'System.MissingFieldException' のハンドルされていない例外が mscorlib.dll で発生しました。
追加情報 : 見つからないメンバにアクセスしようとしました。
***************************************************
と例外発生します。

何度やっても出てしまいます。
じゃんぬねっとさんは環境はどのような状態でしょうか?
環境は一番最初の書込みで少し乗せていますが
開発環境:VS.NET 2003
OS:XP Pro SP2
です。



Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-03-13 17:33
そりゃ派生クラスは基底クラスのプライベートフィールドの情報は持ってないでしょうね。
(this.dataGrid1).GetType()
ではなく、
typeof(DataGrid)
でやってください。

// GetType を訂正。
// VB いじってたらすぐこれだ(^^;

[ メッセージ編集済み 編集者: Hongliang 編集日時 2006-03-13 17:34 ]
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2006-03-13 17:35
DataGridで選択されている行を取得する
http://dobon.net/vb/dotnet/datagrid/selectedrows.html

スキルアップ/キャリアアップ(JOB@IT)