コンボボックスのリスト外入力について


ぷりお  2006-08-05 01:43:50  No: 132644

お世話になります。

VB2005にて作成中です。

コンボボックスのリスト外入力時の内容を

テーブルに保存する方法をご指導下さい。

コンボボックスのリスト内容はDataSourceです。

データ事態はSQLサーバにあり、VB2005に接続しています。

希望する内容は、

コンボボックスでリストに無い場合に、

入力してテーブルに追加する(追加する際にダイアログを表示)

といった具合です。

リストがItemであれば、「Items.add」で追加できると思うのですが

リストがDataSourceの場合、どの様にコードを記入すれば良いか

ご指導下さい。

宜しくお願いします。


KG  2006-08-05 02:24:59  No: 132645

その入力されたデータがあるかどうか問い合せ(SQL)して無い場合、
Insert文を投げてあげればよいのでは?

こういう処理はしたことないのですが、やるならValidateかな?|=_=;

#自信なし


ぷりお  2006-08-05 03:22:08  No: 132646

KG様

ご助言ありがとうございます。

一度、調べて確認したいと思います。


ぷりお  2006-08-07 23:03:05  No: 132647

本やインターネットで調べたのですが、わかりませんでした。

dim dr as sampledataset.食べ物row

dr=sampledataset.食べ物.select("果物"=me.品名combo.text)

上記の様なコードを記入しても、

「メンバではありません。」というエラーがでます。

SQLのデータを検索するコードを具体的にご教授願えないでしょうか?

一番初めに記載した内容になるのであれば、

どの様な感じでも構いません。

宜しくお願いします。


うなまな  2006-08-07 23:47:58  No: 132648

コンボボックスのDataSourceにどのように設定していますか?
TableAdapterを利用しているのだと思うのですが・・・


ぷりお  2006-08-08 00:12:11  No: 132649

うなまな様

何度もありがとうございます。

コンボボックスのDataSouurceは、

データセットの中にあるストアドのBindingSourceが設定されています。

これが、いけないのでしょうか?


うなまな  2006-08-08 00:19:11  No: 132650

具体的なコードはどうなっているんでしょうか?
ノンコーディングで行われている場合、自動で生成されたクラスなどが
どのような動きをしているかが、分からなければ、やりたい事を実装する
のは難しいかなと・・・

>dr=sampledataset.食べ物.select("果物"=me.品名combo.text)
は、selectメソッドは実装されていますか?


ぷりお  2006-08-08 00:43:28  No: 132651

うなまな様

実は、先日ご指導頂いた「パラメータ付ストアドを実行するには」の

続きなのです。

パラメータ付ストアドをコンボボックスで表示させ選択する所まで

ご指導頂いたのですが、今回は

「このコンボボックスのリストに選択する内容が無い場合に

新しい内容を入力してリストに追加する」という事を行いたいのです。

下記に先日頂いたコードを記述します。

Using con As New SqlConnection("接続文字列")
    Using da As New SqlDataAdapter("q生活_食べ物", con)
        With da.SelectCommand
            .CommandType = Data.CommandType.StoredProcedure
            .Parameters.Add(New SqlParameter("@種類",Data.SqlDbType.VarChar)).Value = "果物"
        End With
        Using ds As New DataSet
            da.Fill(ds, "生活_食べ物")
            Me.コンボB.DataSource = ds.Tables("生活_食べ物").DefaultView
            Me.コンボB.DisplayMember = "食べ物名称"
            Me.コンボB.ValueMember = "食べ物コード"
        End Using
    End Using
End Using

dim dr as sampledataset.食べ物row    ←ここに入れてしまいました。

dr=sampledataset.食べ物.select("果物"=Me.コンボB.Text)

selectメソッドは実装されていませんでした。

提示しなければならないコードが間違っていましたら申し訳ありません。

宜しくお願いします。


うなまな  2006-08-08 01:01:06  No: 132652

コンボボックスのDataSourceを利用しなければならない理由はありますか?
というのは、コンボボックスに「食べ物名称」だけを表示しておけばいいの
であれば、Me.コンボB.Items.Addでアイテムを追加しておき、Validating
イベントで、コンボボックスのTextがアイテム外の場合の処理を行えば
簡単かと・・・


ぷりお  2006-08-08 01:36:23  No: 132653

うなまな様

DataSourceを利用しなければならない理由は特にありませんでした。

という事は、コンボボックスのプロパティにあるDataSourceは空白で良いのでしょうか?

Itemsに追加する場合は、先日ご指導頂いたコードで良いと思うのですが、

Validatingの使用方法がVBのヘルプや本に記載していないので、

申し訳ございませんがご指導お願い致します。


ぷりお  2006-08-08 01:41:35  No: 132654

VBのヘルプにValidatingイベントがありました。
申し訳ございませんでした。


うなまな  2006-08-08 01:47:42  No: 132655

>Validatingの使用方法がVBのヘルプや本に記載していないので
http://msdn2.microsoft.com/ja-JP/library/system.windows.forms.control.validating.aspx

Validatingはイベントです。このイベントの発生タイミングで、
コンボボックスのアイテムをチェックして、アイテム外ならデータを追加する
処理を行えばいいでしょう。
アイテム外か否かは、SelectedIndexプロパティで判断できますね。


ぷりお  2006-08-08 02:19:02  No: 132656

ありがとうございます。

頂いたご助言で一度挑戦したいと思います。

また、ご報告致します。


ぷりお  2006-08-23 20:24:20  No: 132657

だいぶ遅くなりましたが、現在ご指導を元に作成しています。

色々調べて下記のコードを入力しました。

Private Sub 得意先名combobox_validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles 得意先名ComboBox.Validating

        If ActiveControl.CausesValidation = False Then
            Exit Sub
        End If

        If Not Me.得意先名ComboBox.SelectedItem Then
            MsgBox("リスト外です。")
            e.Cancel = True
        End If

    End Sub

リストにない文字を入力した場合、「リスト外です。」と表示されます。

ただ、リストにあるものを選択した場合に、

「stringから型longへの変換は無効です。」

とエラーが出てしまいます。

コードがおかしいと思うのですが、どこがおかしいかが解りません。

ご指導お願いします。


特攻隊長まるるう  2006-08-30 18:34:16  No: 132658

> コードがおかしいと思うのですが、どこがおかしいかが解りません。
デバッグすればエラーの発生行で止まると思いますが?
まずはどの行で発生しているか特定してください。

> stringから型longへの変換は無効です。
次にエラーメッセージより、文字列から数値型への型変換が
失敗している事が分かりますので、どこで型変換が起こっているか
調べてください。

 # 暗黙の型変換を禁止した方がこういったエラーは少なくなります。
 # Option Strict On をヘルプで調べて利用してみてください。
 # ファイルごとにも設定できますし、プロジェクトのプロパティでも
 # 設定できます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加