3

2 つのコンボボックスがあり、それぞれが次のように同じ DataTable にバインドされています。

    channelTypeCB.DataSource = SynergyData.ds.Tables["ChannelTypes"];
    channelTypeCB.DisplayMember = "channelType";
    channelTypeCB.ValueMember = "channelTypeID";
    channelTypeCB.BindingContext = new BindingContext();

    newSKChanTypeCB.DataSource = SynergyData.ds.Tables["ChannelTypes"];
    newSKChanTypeCB.DisplayMember = "channelType";
    newSKChanTypeCB.ValueMember = "channelTypeID";
    newSKChanTypeCB.BindingContext = new BindingContext();

ボタンをクリックしてレコードをデータベースに挿入するときに、channelType.SelectedValue... を使用すると、間違った値が返されます。ComboBox ソート (デザイン ビューのコントロールのプロパティで設定) の使用と関係があると感じています。誰かがこの問題に遭遇しましたか?

これは、C# を使用して winforms アプリケーション用にプログラムされています。

編集:

たとえば、私の Datatable には次のような値が格納されます。

channelType    channelTypeID
Web             2
Mailer          3
Catalog         4

これはコンボボックスでソートされ、最初の項目 (ソートすると「カタログ」になります) を選択すると、SelectedValue は 2 を返し、2 番目の項目を選択すると 3 を返します...リターン 4

4

5 に答える 5

5

MSDN ComboBox.Sorted

多分これが関係してる

データ バインド コントロールで Sorted プロパティを設定しようとすると、ArgumentException が発生します。基になるデータ モデルを使用してデータを並べ替える必要があります。

(ただし、エラーは発生しませんでした)

したがって、ComboBox.sort を使用する代わりに、DataTable の DefaultView を並べ替えています。

SynergyData.ds.Tables["ChannelTypes"].DefaultView.Sort = "channelType";

これが最善の方法であるとは確信していませんが、機能し、selectedValue が正しいものを返すようになりました

于 2009-10-03T03:16:29.130 に答える
1

newSKChanTypeCB.SelectedValueを参照する必要がある場合は、コードでchannelTypeCB.SelectedValueを参照している可能性があります(これは、純粋にコントロール名に基づく全体的な推測です)。

于 2009-10-03T02:44:52.797 に答える
1

私はこれを別の方法で行います。BindingSourceそれぞれがあなたに基づいて2つの別々のを作成し、次に各コントロールを作成したばかりのそれぞれにDataSetバインドします。DataSourceBindingSource

于 2009-10-03T02:55:28.660 に答える
0

これは .net の既知の問題です。

.net 5 で修正するには、これに賛成票を投じてください: http://connect.microsoft.com/VisualStudio/feedback/details/542353/combobox-selectedvalue-returns-incorrect-data-when-sorted-is-true

于 2011-09-07T12:59:26.913 に答える
0

データは DataTable から取得されるため、問題は ComboBox の Sorted プロパティです。

Sorted プロパティが使用されている場合、ComboBox は DisplayMember のみを整理し、DataTable を直接変更できないため、別のデータを無視します。例:

ソートなしの DataSource としての DataTable からのデータ

channelType   channelTypeID  ComboBoxDisplayMember    ComboboxValueMember
Web            2              Web                       2
Mailer         3              Mailer                    3
Catalog        4              Catalog                   4

ソートされたプロパティを使用

channelType   channelTypeID  ComboBoxDisplayMemberSorted   ComboboxValueMember
Web            2              Catalog                       2
Mailer         3              Mailer                        3
Catalog        4              Web                           4

この問題は、クエリの最後に追加するデータベースで解決できます: "ORDER BY FieldName" http://technet.microsoft.com/en-us/library/ms188385.aspx

于 2013-12-10T15:45:57.243 に答える