2016-12-21 11 views
1

コンボボックスに値のない空の行を追加したいとします。これは、ユーザがコンボボックスから何かを選択して、それを選択解除したい場合です。私はすでにDELETEをクリックし、選択したインデックスを-1に設定できることを既に指摘しているので、空の行がなければこれは必須です。ユーザーはコンボボックスの上部にある空の行を必要とします。このようにコンボボックスをロードしています....データバインドされたコンボボックスに空の行を追加する際の問題

sql="Select ID, Name from TblReference" 

Dim da As New SqlDataAdapter(Sql, conn) 
Dim ds As New DataSet 

da.Fill(ds, "Dk") 

ここで余分な行を追加しようとしています!これは以前@Plutonixによって私に提供されました。私はこれを動作させることができません。

Dim dr As DataRow = ds.Tables("Dk").NewRow 
ds.Tables("Dk").Rows.InsertAt(dr, 0) 

If ds.Tables("Dk").Rows.Count > 0 Then 
    With c 
     .DataSource = ds.Tables("Dk") 
     .ValueMember = "ID" 
     .DisplayMember = "Name" 
     .SelectedIndex = -1 
    End With 
End If 

この場合、C - はこの関数に渡すコンボボックスの名前です。私は複数のコンボボックスに同じ機能を使用しているので、私はそれが必要なのです。

ERRORは言う:

型のオブジェクトをキャストすることができません 'System.Data.DataRow' 'SystemIconvertible' を入力します。

+0

新しい行には、ユーザーの「(選択)」、「(なし)」のようなデータはありませんが、それ以外の場合はどうすれば動作しますか?再編集:いくつかの偽のデータを追加する - Idはうまくいくはず - データテーブルはスマートで、各列に許されるものを知ることができます – Plutonix

+0

@plutonix - 上記のエラーが出ます。いいえ、基本的にはアイテムの束がドロップダウンしていて、空の行が必要です。それが私の質問です。 – BobSki

+0

'ds.Tables(" Dk ")の代わりに' ds.Tables( "Dk")Rows.Add(dr、0) 'を実行していませんか?Rows.InsertAt(dr、0)'? – Mark

答えて

1

INT32れるIDカラム 予想タイプにsystem.data.datarow格納することができなかった新しい行がDataTableに加えは、DBから読み出されたデータ・ルールに準拠しなければなりません。あなたのケースでは、IDが有効Int32なければならないことを知っていますが、あなたの行の任意のデータを提供しませんでした:、おそらくより良い、

Dim dr = dtSample.NewRow 
dr("Id") = -1 
dr("Descr") = "(Blank)" 
dtSample.Rows.InsertAt(dr, 0) 

cboE.DataSource = dtSample 
cboE.DisplayMember = "Descr" 
cboE.ValueMember = "Id" 

enter image description here


もう一つの方法は、LETのSQLです偽の行を追加します。 MySQLでは、それは次のようになります。

SELECT -1 As Id, '(Pick One)' As Descr UNION ALL SELECT Id, Descr FROM TABLE_NAME 

Nameは、多くの場合、予約語、Descrは、説明の目的のために使用されているので。

+0

は魅力的に機能します! – BobSki

+0

私はデータを設定しないと "Unable to cast of type ..."という結果になるとは思わない"メッセージ - おそらく、AllowDBNullがfalseだった場合、' NoNullAllowedException'のようなものです(ただし、カラムがデータベース内でヌル可能でなくても、データアダプタからカラムを取得することができませんでしたが、すべての列にデフォルトのNULLを使用すると私には当てはまります) – Mark

+0

@Mark真実を伝えるために、私はDataAdapterに「Int32とId」の部分だけを気付かなかったのですが、データテーブルが少なくともPKであった場合、ヌル値は理にかなっています。 – Plutonix

関連する問題