none
comboboxにdisplaymemberが表示されない RRS feed

  • 質問

  •     Private Sub fmGoods_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Dim sql As String = "SELECT * FROM T分類マスタ"
            Dim dt As New DataTable
            Dim db As New DBBox(cnstr)
            If Not db.getdatafromdb(dt, sql) Then
                Exit Sub
            End If
            With ComboBox1
                .DataSource = dt
                .ValueMember = "分類ID"
                .DisplayMember = "分類Tマスタ"
            End With
        End Sub

    この様にコードを記入したのですが、実行をクリックしてもconbobox1にはなにも表示されないのですが、どのような原因がありますか?。


    sqlを使う場合、comboboxにはsql文がないとテーブルがあってもDisplayMemberに文字が表示されないのでしょうか?。
    2015年2月19日 1:00

回答

  • 今回の失敗は、どうも文字が一つ多かったことに起因していたようでした。デバッグでは問題はなかったようですが、とりあえず結果が出たので良しとしたいと思います。
    • 回答としてマーク bentensama 2015年3月1日 5:43
    2015年3月1日 5:43

すべての返信

  • まずブレークポイントをメソッド先頭にでも設定してからデバッグ実行し、1行ずつステップ実行してみてください。

    どこかで例外が出るなどしてメソッドの最後まで実行されていないということはありませんか?

    • 回答の候補に設定 星 睦美 2015年2月26日 0:13
    2015年2月19日 1:04
  •         If Not db.getdatafromdb(dt, sql) Then
                Exit Sub
            End If

    Exit Sub してるのではと思います。
    2015年2月19日 1:14
  • こんにちは。

    私が知らないだけだったら大変申し訳ないのですが、
    DBBoxというのは何かをラップしたクラスでしょうか。(SQLServer用に用意されている?)

    まずはブレークポイントを作成しデバッグ実行で以下を確認してみては如何でしょう。

    • 変数dtにレコードが存在しているか。
    • 変数dtに「分類ID」と「分類Tマスタ」のカラムが存在するか
    2015年2月19日 1:16
    モデレータ
  • ラップという意味があまりよくわからないのですが、コードは以下になっています。

    Imports System.Data.SqlClient
    Public Class DBBox
        Private _connectionstring As String
        Sub New(ByVal connectionstring As String)
            _connectionstring = connectionstring
        End Sub

    お分かりになることがあればお願いします。

    カラムはあります。

    2015年2月24日 19:47
  • こんにちは。

    getdatafromdbの実装も掲載頂けたほうが回答が得やすいでしょう。

    基本的に以下の可能性があります。

    1. データ取得時にdb.getdatafromdbのReturn値がFalseになっており、呼び元でExit Subされてしまう。
    2. db.getdatafromdbのメソッド内で引数dtをNewしており、かつByRefではなくByValで引数定義されている。
    3. 「.DataSource = dt」時点でdtに「分類ID」と「分類Tマスタ」というColumnが存在しない

    2と3については実行時に例外が発生しそうな気もするので、
    aviatorさんがおっしゃっているようにおそらく1でしょうか。

    2015年2月24日 21:01
    モデレータ
  • 自分の思い通りに動かない場合、1つ1つのコードが思い通りに動いているかを確認することが基本です。ご質問内容は、実現の仕方がわからないというより、思った通りに動かないといった内容ですので、まずご自分でコードの動作を確認してみて下さい。このコードの動作の確認をデバッグと言います。
    Hongliangさんが書かれているように、まずはデバッグ実行してみて下さい。その上で、わからないところがあれば再度ご質問下さい。そうすれば、回答者もより的確に回答を導けるようになります。残念ながら、現在ご提供いただいている情報だけでは、どこに問題があるのかわかりません。極端な話、T分類マスタが空かもしません。よって、具体的な回答が付きにくい状況です。
    以上、ご理解のほど、よろしくお願いいたします。

    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    • 回答の候補に設定 星 睦美 2015年2月26日 0:13
    2015年2月25日 7:38
  •  Public Function getdatafromDB(ByVal DataTable As DataTable, ByVal strSQL As String) As Boolean
            Dim da As New SqlDataAdapter(strSQL, _connectionstring)
            Try
                da.Fill(DataTable)
                Return True
            Catch ex As Exception
                Return False
            End Try
        End Function

    getdatafromdbの実装とは上記のものでしょうか?。

    2015年2月25日 20:30
  • デバッグをすると、特に問題はないのですが、combobox1にリストが表示されません。sqlには初心者でほとんどわからずやっております。添付した画像から何かわかりますか?。

    2015年2月26日 5:59
  • ComboBox1のDataSourceに渡しているdtに、きちんと値が入っていることをデバッグで確認されてみましたでしょうか?
    何も表示されないのであれば、まず疑うのはDataSourceに渡しているもの(オブジェクト)です。

     With ComboBox1
                .DataSource = dt

    おそらく、dtは空なんだと思います。空になる理由は複数ありますが、今回のケースはプログラミングの知識がないと難しいかもしれません。とりあえず、以下を読んでみて下さい。

    ByVal と ByRef
    http://homepage1.nifty.com/CavalierLab/lab/vb/byvalbyref.html


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2015年2月26日 6:25
  • 今回の失敗は、どうも文字が一つ多かったことに起因していたようでした。デバッグでは問題はなかったようですが、とりあえず結果が出たので良しとしたいと思います。
    • 回答としてマーク bentensama 2015年3月1日 5:43
    2015年3月1日 5:43