- - PR -
DataGridの列からテキストボックスへ。
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-02-28 13:22
はじめまして。初投稿です。
VB.NETを使用しての開発なのですが、DataGridに表示される列を選択して 同フォーム上のテキストボックスにそれぞれの値を飛ばす。 という方法で行き詰っています。 とても初歩的なものかと思いますが、どなたかご教授ください。 処理としては・・・ ・フォームオンロードでDataGridにDBのリストを一括で表示 ↓ ・DataGrid内の列を選択 ↓ ・選択列の値がテキストボックスに代入される。 というものです。 なお、列選択後にボタンによる処理をはさむことも考えていますが、 できれば列選択時にテキストボックスに表示されるようにしたいです。 よろしくお願いします。 | ||||
|
投稿日時: 2003-02-28 18:05
すいません。質問の仕方に誤りがありました。
追記しますのでよろしくお願いします。 DataGridに配置されるオブジェクトはどれもTextBoxColumオブジェクトです。 DataSetにテーブル内容を入れて、DataViewと連結しています。 ただし、数あるオブジェクトのうち、実際に表示されるのは2つだけです。 他のオブジェクトは幅を0に設定して見えないようにしています。 で、DataGridの左端でカレントレコードを選択する部分があるかと思いますが、 その部分をクリックした場合に同じフォーム内に設置したオブジェクト分のテキストボックスで 選ばれたレコードのオブジェクトを全て参照するようなものを作りたいのです。 VB自体が入門者なもので、何かと無茶な質問なのかもしれませんが、参考になるサイトなどでもかまいませんので、どなたか助言お願いします。 | ||||
|
投稿日時: 2003-02-28 20:10
MouseDownのHitTest メソッドを利用できます。
このような感じでしょうか。 >他のオブジェクトは幅を0に設定して見えないようにしています。 幅を0にしても矢印かTABで見えないセルに移りますよ。 | ||||
|
投稿日時: 2003-02-28 20:46
解答していただいて本当にありがとうございます。
上げてもらったコードの通りにやってみましたが、以下の部分でエラーが出ました。 txtboxA.text = datagrid1.Item(hti.row,0) txtboxB.text = datagrid1.Item(hti.row,1) エラー内容 Option Strict On で'SystemObject'から'String'への暗黙的な変換はできません。 本当にわからないことだらけですいません。 また、自分の頭では関数や引数を使ってやるものだと思っていたのですが それは見当違いになってくるのでしょうか? | ||||
|
投稿日時: 2003-02-28 21:46
>また、自分の頭では関数や引数を使ってやるものだと思っていたのですが
>それは見当違いになってくるのでしょうか? 関数や引数とはどんなイメージで言われていますでしょうか? txtboxA.text = datagrid1.Item(hti.row,0).tostring | ||||
|
投稿日時: 2003-03-01 15:34
たびたびの返答ありがとうございます。
>関数や引数とはどんなイメージで言われていますでしょうか? 自分のイメージでは、DataGrid内の欲しい値を関数に放り込み、それをTextBoxに呼び出す。といったものを想像していたのですが・・・。 あと、「If hti = DataGrid.HitTestType.RowHeader」の部分なんですが、 演算子'='は、型'System.Windows.Forms.DataGrid.HitTestInfo'および'System.Windows.Form.DataGrid.HitTestType'に対して定義されてません。 というエラーが返ってきましたが、どのように解決すればいいのでしょうか? | ||||
|
投稿日時: 2003-03-01 21:15
少し発想を変えてみてはいかがでしょうか。つまり、TextBoxもDataGridも同じ「データソース」からのデータを「表示するだけ」なのですから、表示されているものを流用して別の形態の表示を作るのではなく、同じデータソースに対して異なる表示方法をするという考え方はどうでしょうか。
そう考えると、アプリケーションで管理しなければならないのは、1) データの表示方法、2) データソースの現在行の管理、3) 現在行の更新時に表示を更新する仕組み、の3点になります。1はDataGridとTextBoxということでいいでしょう。2と3については、Windows Formsが持つデータ連結の機能を使えば、コーディングする必要はありません。 そういうわけで、次のようなコードでお望みの機能が実現できていると思います。
| ||||
|
投稿日時: 2003-03-02 09:14
NothingBut.NETFXさんの回答も、発想の転換という点でとても参考になるものだと 思うのですが、たまたまこの件に似たパターンのコーディングをしたことがありま したので、記述します。 Togさんの書かれているMouseDownを使ったものですが、Togさんのサンプルは 抜粋を行われているようで足りない部分があります。そのため、自分のサンプルは 書いたままをそのまま記述しましたので(笑)、適宜置き直してください。 Private Sub Tgrid_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Tgrid.MouseDown Dim myGrid As DataGrid = CType(sender, DataGrid) Dim hti As System.Windows.Forms.DataGrid.HitTestInfo = myGrid.HitTest(e.X, e.Y) Dim TID As String = "-1" Select Case hti.Type Case System.Windows.Forms.DataGrid.HitTestType.Cell TID = myGrid.Item(hti.Row, 0) myGrid.Select(hti.Row) Case System.Windows.Forms.DataGrid.HitTestType.RowHeader TID = myGrid.Item(hti.Row, 0) End Select If Not TID = "-1" Then TView.RowFilter = "得意先ID='" & TID & "'" Tanview.RowFilter = "担当者ID=" & TView(0)("担当者ID") TXTAN.Text = Tanview(0)("担当者名") End If End Sub −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− 一度、Senderから拾ってきたオブジェクトを仮のデータグリッドに繋げている ところが問題なんだろうと思います。 _________________ -------------------------------------- ネットビルド 小田原貴樹 odahara@netbuiuld.jp -------------------------------------- |