WinFormに2つのcomboBoxcb_Brand
とcb_Model
があります。
cb_Model
はブランドSelectに値を入力します。問題は、ブランドanyを選択し、そのブランドの下のanyモデルを選択した場合、cb_Model
は以前に選択したモデルの値を失うことはありません。例:ブランドAudiとモデルA3を選択し、ブランドフォードを選択した場合、cb_Model
をクリックしてモデルを選択すると、選択されたモデルとしてA3が表示されますが、リスト内の他のモデルはに属します。フォード。
私のコードは:
private void cb_Brand_SelectedIndexChanged(object sender, EventArgs e)
{
// Clear Current Data
cb_Model.Text = "";
cb_Model.Items.Clear();
CarModel _carmodel = new CarModel ();
// Get Selected Car Brnad
int CarBrandID = _carmodel .GetCarBrandID(cb_Brand.Text);
//Enable choice of Model
SortedList<int, Model> colM;
colM = Model.ReadModel(CarBrandID);
cb_Model.DisplayMember = "ModelText";
foreach (Model objM in colM.Values)
{
cb_Model.Items.Add(objM);
}
}
任意のアイデアをお願いします..ありがとう
理由を見つけることができませんが、一時的な修正で整理しました:
private void cb_Model_Click(object sender, EventArgs e)
{
cb_Model.Text = "";
}
どうもありがとう
このように手動でアイテムを追加する代わりに:
foreach (Model objM in colM.Values)
{
cb_Model.Items.Add(objM);
}
.NETに任せて、次のように置き換えてください。
cb_Model.DataSource = colMValues;
これにより、データがリストにバインドされ、データソースが設定されたときにコンボボックスアイテムが自動的に更新されます。
また、これらの行はもう必要ありません。
// Clear Current Data
cb_Model.Text = "";
cb_Model.Items.Clear();
リスト(およびその他のデータソース)をComboBoxにバインドする方法の詳細については、これをお読みください。
@ w69rdyは優れたソリューションを提案します。
Cb_Modelが変更しなかった理由value
は、値を変更したことがないためです。 cb_Model.Items.Clear()は、選択されたインデックスを変更しません。コンボボックスから削除されるのはアイテムだけです。
質問で提供されたコードサンプルを使用する:
// Clear Current Data
cb_Model.Text = "";
cb_Model.Items.Clear();
cb_Model.SelectedIndex = -1; // would effectively clear the previously selected value.
私は今同じ問題を抱えていました、そしてコンボボックスのResetTextメソッドは私のために問題を解決しました
これはうまくいくでしょう
combobox.ResetText();
私はあなたの例を試しました。私にとっては、本来あるべきように機能しました。 cb_model.SelectedTextを ""に設定するか、SelectedItemをnullに設定してみてください。
データソースのスコープをコンボボックスのロードの近くに保つことが私にとってはうまくいくことがわかりました。クラスレベルのスコープを持つデータテーブルがあり、クリアされませんでしたが、関数レベルのスコープに入れて、ロード後にクリアしました。これは機能しました。
私は同じ問題を抱えています
combobox1.SelectedIndex=-1
そしてそれは動作します。
同様の問題があります。cmb.resettextを試してみましたが、テキストはクリアされますが、値はクリアされません。ロードフォームには次のコードがあります。Dim cmd As New SqlCommand("SELECT stud_id,name FROM student_details WHERE stud_id NOT IN (SELECT stud_id FROM student_details WHERE hostel_id!=0)", sqlcont.Conn) Dim dr As SqlDataReader = cmd.ExecuteReader Dim dat As New DataTable Dim j As Integer For j = 0 To dat.Rows.Count - 1 dr.Read() Next dat.Load(dr) cmbstud.DisplayMember = "name" cmbstud.ValueMember = "stud_id" cmbstud.DataSource = New BindingSource(dat, Nothing) dr.Close()
btnhostelクリックイベントに次のコードがあります:frmallocateHostel_Load(Nothing、Nothing )これは、データセット、つまりコンボボックスを再読み込みしようとしました。cmbstud.resettextを使用すると、値ではなくテキストがクリアされます。