- PR -

DataGridViewについて

1
投稿者投稿内容
C#初心者
会議室デビュー日: 2008/11/13
投稿数: 11
投稿日時: 2009-02-03 15:09
開発言語:VC#2005

いつも参考にさせてもらってます。
また分からない事があったので質問させて下さい。

datasetを使いDataGridViewにデータを表示させています。

SqlDataAdapter da = new SqlDataAdapter(selectStr, connStr);
DataSet ds = new DataSet();
da.Fill(ds, "tblKihon");

bindingSource1.DataSource = ds;
bindingSource1.DataMember = "tblKihon";
dgvUketuke.DataSource = bindingSource1;
------------------------------------------------------------------

表示させているデータを、別に配置しているテキストボックスにも表示させるには
どうしたらいいのでしょうか?
色々と調べたのですが、結果に至っていません。

textBox1.DataBindings.Add("Text", ds.Tables["tblKihon"], "ID");
textBox2.DataBindings.Add("Text", ds.Tables["tblKihon"], "確認");
textBox3.DataBindings.Add("Text", ds.Tables["tblKihon"], "特記");

このようにDataBindingsを使えば表示させる事は可能なのですが、
選択行を変えたらそれに伴ってテキストボックスの内容もその行に対応したデータを
表示させたいと思っています(下矢印移動、マウスで行選択)
「選択行が変わった」時のイベントもどれを使っていいのかが分かっていません・・。
(selectionmodeを「FullRowSelect」にしています)


誠にすいませんが、知恵を貸してください。
宜しくお願い致します。
_________________
まさる
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 59
お住まい・勤務地: 越後の中ほど
投稿日時: 2009-02-03 16:13
まず、TextBoxへのDataBindはBindingSouce経由で行うようにしましょう。
フォームデザイナのプロパティエディタからできますので。

その後、BindingSourceのPositionプロパティに、DataGridViewの選択行を設定してやればうまくいくのではないかと思います。

BindingSource.Positionプロパティ
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.bindingsource.position(VS.80).aspx

DataGridViewの選択行が変更されたことを感知するイベントは、

DataGridView イベント
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.datagridview_events(VS.80).aspx

この辺を眺めてそれっぽいのを使ってください。

#CurrentCellChangedあたりかな?
_________________
まさるblog

[ メッセージ編集済み 編集者: まさる 編集日時 2009-02-03 16:16 ]
C#初心者
会議室デビュー日: 2008/11/13
投稿数: 11
投稿日時: 2009-02-03 16:32
まさる様回答ありがとうございます。
感謝です。

まだ勉強し初めで、丁寧な回答頂いたのですが、まだ分からない所です・・。

----------------------------------------------------------------------
まず、TextBoxへのDataBindはBindingSouce経由で行うようにしましょう。
フォームデザイナのプロパティエディタからできますので。
----------------------------------------------------------------------
この部分ですが、これはTextBoxのプロパティから「DataBindings」の部分を設定するのでしょうか?
詳細の所をクリックすると、『フォーマットと詳細バインド』の画面が表示されます。
何を設定するのかが分からない状況です。

誠にすいませんが、もう少し教えていただけないでしょうか?
宜しくお願い致します。

_________________
まさる
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 59
お住まい・勤務地: 越後の中ほど
投稿日時: 2009-02-03 17:59
引用:

C#初心者さんの書き込み (2009-02-03 16:32) より:
まさる様回答ありがとうございます。
感謝です。

まだ勉強し初めで、丁寧な回答頂いたのですが、まだ分からない所です・・。

----------------------------------------------------------------------
まず、TextBoxへのDataBindはBindingSouce経由で行うようにしましょう。
フォームデザイナのプロパティエディタからできますので。
----------------------------------------------------------------------
この部分ですが、これはTextBoxのプロパティから「DataBindings」の部分を設定するのでしょうか?
詳細の所をクリックすると、『フォーマットと詳細バインド』の画面が表示されます。
何を設定するのかが分からない状況です。

誠にすいませんが、もう少し教えていただけないでしょうか?
宜しくお願い致します。





あ・・・型付データセットを使っているわけではなかったのですね。
じゃあひとまずデザイナから設定するというところは忘れてください。

代わりにコードでBindingSource経由でデータバインドを設定する方法です。

textBox1.DataBindings.Addメソッドの引数に、System.Windows.Forms.Bindingクラスのインスタンスを渡してやる形になります。

具体的には、

コード:
textBox1.DataBindings.Add(new System.Windows.Forms.Binding("Text", bindingSource1, "ID"));


といった感じです。

Bindingクラスのコンストラクタについては以下を参照してください。

http://msdn.microsoft.com/ja-jp/library/system.windows.forms.binding.binding(VS.80).aspx

なお、デザイナでDataBindを設定する方法については、

http://msdn.microsoft.com/ja-jp/library/h974h4y2(VS.80).aspx



http://www.microsoft.com/japan/msdn/thisweek/300x10/phase2/cursor/cs.aspx

を参考にしてください。
_________________
まさるblog
C#初心者
会議室デビュー日: 2008/11/13
投稿数: 11
投稿日時: 2009-02-03 18:23
まさる様
早速のお返事ありがとうございます。

引用:
あ・・・型付データセットを使っているわけではなかったのですね。
じゃあひとまずデザイナから設定するというところは忘れてください。


説明不足で申し訳有りませんでした。
なにぶんまだまだ勉強不足でして・・。

引用:
代わりにコードでBindingSource経由でデータバインドを設定する方法です。

textBox1.DataBindings.Addメソッドの引数に、System.Windows.Forms.Bindingクラスのインスタンスを渡してやる形になります。

具体的には、

コード:

textBox1.DataBindings.Add(new System.Windows.Forms.Binding("Text", bindingSource1, "ID"));


といった感じです。


この通りにコードを追加したのですが、エラーがでてしまったので私が最初に書いた、

引用:
textBox1.DataBindings.Add("Text", ds.Tables["tblKihon"], "ID");


コードの中の「ds.Tables["tblKihon"]」を「bindingSource1」に変更したら
上手く行きました!
選択行が変更されたイベントを使用しないでも正しくできました。
カーソルで行変更したら、その行に対応したデータがtextboxに表示されました。
イベントを使用しなくてもできるのですね。


ご丁寧に回答ありがとうございました。
また機会があれば宜しくお願い致します。

1

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