none
アクセスのテーブル内のセル選択について(1つだけ選択しているのですが、全て選択されてしまいます)  RRS feed

  • 質問

  • http://social.msdn.microsoft.com/Forums/ja-JP/vbgeneralja/thread/f8916c04-7805-4a31-a874-53c5b7666683

    先月上記URLにて質問をさせて頂きました。

    宛名印刷プログラムを作成しておりますが、敬称の表示だけがうまくできません。アドバイスをお願いします。 ラジオボタンを止めて敬称mdbを作成しました。フォームから立ち上げ、敬称mdbに接続します。フォーム3のボタンをクリックし、フォーム6を立ち上げます。フォーム6内のボタンをクリックし、敬称mdbの敬称Tの内容をデータグリッドビューで表示させます。セルをダブルクリックし、フォーム3に戻り印刷枚数を確定させクリスタルレポートでプレビュー表示させます。クリスタルレポートでは、フィールドエクスプローラ内のデータベースフィールドの敬称Tの敬称をドラッグして表示させています。敬称は、御中、様、殿の3つがあります。以下ですと御中をダブルクリックしているのに、プレビューでは御中、様、殿がプレビューで表示されてしまいます。ダブルクリックした敬称が表示されるのではなく、敬称Tにある敬称(3つ)が表示されてしまいます。

    選択した敬称のみがプレビューで表示されるようにするにはどうすればよいでしょうか?

    Public Class Form6

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            '敬称
            DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
            DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells

            Dim OLEDBCon As OleDb.OleDbConnection = _
                    New OleDb.OleDbConnection
            Dim OLEDA As OleDb.OleDbDataAdapter
            Dim OLEDS As DataSet = New DataSet("TABLEDATA")
            Dim strSQL As String

            OLEDBCon.ConnectionString = _
            "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & Form1.TextBox2.Text & ";" & _
            "Persist Security Info=False"

            strSQL = "select * FROM 敬称T "

            OLEDA = New OleDb.OleDbDataAdapter(strSQL, OLEDBCon)

            Try
                OLEDA.Fill(OLEDS, "敬称T")
                Me.DataGridView1.DataSource = OLEDS.Tables("敬称T")
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try

        End Sub

        Private Sub CellDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellDoubleClick

            Dim dgr As System.Windows.Forms.DataGridViewRow = Me.DataGridView1.CurrentRow
            DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
            DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells

            Form3.Show()
            Form3.Activate()

             Form3.TextBox10.Text = Me.DataGridView1.SelectedRows(0).Cells(0).Value
            Form3.TextBox3.Focus()

        End Sub

    敬称Tの内容です

    敬称                                                                           御中                                                                         様                                                                         殿

    宜しくお願いします。


    2013年2月14日 5:53

すべての返信

  • Hoshinaです
    こんにちは

    この内容を見る限りですが,何をしたくて,現状どうなっているかが良く分からないので,投稿しずらいと思います。

    いくつか,疑問を書き出してみます。
    ・なぜ,2つのFormが必要なのでしょう?
    敬称を操作する機能を,Form3に追加したほうが簡単ではありませんか

    ・Form3とForm6との間で,どのように敬称を受け渡しているかが分かりません
    上記の,Form3.TextBox10.Text=Me.DataGridView1.SelectedRows(0).Cells(0).Value で行っていると考えているようでしたら,それは間違いです。
    Form3のTextBox10には,正しく敬称の文字列が表示されているかもしれません。しかしそれは,画面の表示だけです。
    Crystal Reportsに渡しているDataTableの行に敬称を正しく設定しない限り,選択した敬称はCrystal Reportsには渡っていません。現在は,検索したすべての敬称3つが,そのままCrystal Reportsに渡っているので,3つがそのままプレビューされていると思います。

    ここで助言です。
    前回,trapemiyaさんの投稿内容が現在のとももとさんの問題にピッタリしていないかもしれません。しかしながら,前回のtrapemiyaさんの投稿内容を納得できるまでやってみてから,今回のとももとさんの問題に立ち返ると,新しい展開があると思います。

    以下は,私の予想。
    前回,trapemiyaさんは敬称を3つの固定文字列としていました。その部分を,データベースから検索した値に基づいて,動的に対応するように変更すればよいのではないかと考えています。

    それでは


    2013年2月15日 0:25
  • 全体の処理が見えないので外しているかもしれませんが、以下が気になりました。

    >クリスタルレポートでは、フィールドエクスプローラ内のデータベースフィールドの敬称Tの敬称をドラッグして表示させています。

    これだと3つ印刷されて当然だと思います。敬称Tの敬称をドラッグするのではなく、あくまで印刷用に用意したデータテーブルの敬称をドラッグして下さい。

    >Form3.Show()

    CellDoubleClickイベントハンドラ内で実行しているForm3.Show()ですが、これだと既に開いているForm3と違うもう一つのForm3が開かれませんか? VBには既定のインスタンス(暗黙のインスタンス)という仕組みがあります。確認していないので私の杞憂であれば良いのですが・・・


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2013年2月15日 0:31
    モデレータ
  • Hoshinaさん

    回答ありがとうございます

    >3つの固定文字列としていました。その部分を,データベースから検索した値に基づいて,動的に対応するように変更すればよいのではないかと のことですが、動的に対応するように変更するにはどうすればよいでしょうか?参考になる情報等ありましたら

    お願いします


    2013年2月15日 3:41
  • trapemiyaさん

    回答ありがとうございます

    敬称Tの敬称をドラッグするのではなく、あくまで印刷用に用意したデータテーブルの敬称をドラッグして下さい との事ですが

    クリスタルレポート内にはデータテーブルをドラッグできる項目等見つかりません。どうすればよいでしょうか?

    2013年2月15日 3:46
  • 敬称Tの敬称をドラッグするのではなく、あくまで印刷用に用意したデータテーブルの敬称をドラッグして下さい との事ですが

    クリスタルレポート内にはデータテーブルをドラッグできる項目等見つかりません。どうすればよいでしょうか?

    敬称の列を含む宛名のデータテーブルを予めVisaul Studoで作成しておきます。データテーブルを作成するにはデータセットが必要です。もし、データセットが未だ全く無ければ、ソリューションエクスプローラでプロジェクトを右クリックし、「追加」 → 「新しい項目」 → 「データ」 → 「データセット」でデータセットを追加します。そして、そのデータセット内で右クリックして、データテーブルを作成します。(お勧めはテーブルアダプターを作成することですが・・・)
    こうやってデータテーブルが追加されれば、それをクリスタルレポートのデザイナで使用することができます。

    ところで現在は宛名の印刷は出来ているのでしょうか? できているのであれば、そこに敬称を含めることができるはずです。この場合、上記で述べたデータテーブルを予め作成することは不要になります。ただ、お勧めはやはり上記の方法になります。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2013年2月15日 4:51
    モデレータ
  • Hoshinaです
    こんにちは

    私の予想は,以下の仮定に基づいています。この仮定が正しいかどうかは,とももとさんしか分かりませんので,適切な判断のもとプログラムを作成してください。

    仮定:
    前回のtrapemiyaさんの投稿内容で,原則適切なプログラムになるに違いない。但し,ComboBoxに表示する文字列は固定ではなく,データベースの検索結果から動的に作成するようにすればよい。
    前回のtrapemiyaさんのプログラムの方針は,以下のものです。
    ・データベースから検索した結果に,敬称と枚数のデフォルト値を返すようにする
    ・検索結果をDataGridViewに表示し,
    ・1行ごとに,枚数は自由に編集し,敬称は固定文字列のComboBoxから選択する
    ・その後,印刷専用のDataTableを作成して,印刷する

    そのうえで,とももとさんの質問にある,データベースの検索結果から動的にComboBoxの内容を作成する方法です。
    「DataGridView ComboBox」をキーワードにして検索しますと,多くのページが該当します。
    この中から,とももとさんが分かりやすいと思う内容を参考にされては,どうでしょうか?

    こうした情報は,フォーラムで投稿があるのを待つよりも,ご自身で検索された方が効率的と思います。

    それでは,ご健闘ください

    2013年2月15日 5:18