Обновлять поле со списком автоматически, когда первое поле со списком получает какое-либо значение - PullRequest
4 голосов
/ 20 августа 2010

У меня есть два поля со списком.Я вставляю одно значение в первое поле со списком, и теперь я хочу, чтобы мое второе поле со списком обновляло свое значение согласно первому.Как мне это сделать?

Ответы [ 4 ]

9 голосов
/ 20 августа 2010

Обработайте событие SelectedIndexChanged для первого ComboBox, затем обновите второе поле со списком на основе значения SelectedItem для первого ComboBox.

Быстрый пример (без обработки ошибок при извлечении SelectedItem):

public partial class Form1 : Form
{
    private string[] comboBox1Range = new[] { "A", "B", "C", "D" };
    private string[] comboBox2RangeA = new[] { "A1", "A2", "A3", "A4" };
    private string[] comboBox2RangeB = new[] { "B1", "B2", "B3", "B4" };
    private string[] comboBox2RangeC = new[] { "C1", "C2", "C3", "C4" };
    private string[] comboBox2RangeD = new[] { "D1", "D2", "D3", "D4" };

    public Form1()
    {
        InitializeComponent();
        comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged;
        comboBox1.Items.AddRange(comboBox1Range);
    }

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        string selectedValue = comboBox1.SelectedItem as string;

        switch (selectedValue)
        {
            case "A":
                comboBox2.Items.Clear();
                comboBox2.Items.AddRange(comboBox2RangeA);
                break;
            case "B":
                comboBox2.Items.Clear();
                comboBox2.Items.AddRange(comboBox2RangeB);
                break;
            case "C":
                comboBox2.Items.Clear();
                comboBox2.Items.AddRange(comboBox2RangeC);
                break;
            case "D":
                comboBox2.Items.Clear();
                comboBox2.Items.AddRange(comboBox2RangeD);
                break;
        }
    }
}
2 голосов
/ 20 августа 2010

Подпишитесь на событие изменения первого поля со списком и введите второе:

combobox1.SelectedIndexChanged+= new EventHandler(ListBox1_SelectedIndexChanged);

private combobox1_SelectedIndexChanged(object sender, EventArgs e)
{
    // do stuff with combobox2
}

или

combobox1.SelectedValueChanged += new EventHandler(ListBox1_SelectedValueChanged);

private combobox1_SelectedValueChanged(object sender, EventArgs e)
{
    // do stuff with combobox2
}

Население:

combobox2.Items.Add(new object());
combobox2.Items.Add(new ListItem("caption", "value"));
// etc

Найдите существующий элемент:

var index = combobox2.FindStringExact(combobox1.SelectedText);
if (index != -1)
    comobox2.SelectedItem = combobox2.Items[index];
0 голосов
/ 23 марта 2016

Я хочу выбрать Ders этот cmbDers, а затем cmbKonu обновить связанный SQL, как этот Country-City. Но я получаю несоответствие типа данных. В чем проблема?

Форма загрузки OleDbDataAdapter adp = new OleDbDataAdapter («выбрать * из Ders», baglanti); DataTable dt = new DataTable (); baglanti.Open (); adp.Fill (дт); cmbDers.DataSource = dt; cmbDers.DisplayMember = "DersAd"; cmbDers.ValueMember = "DersID"; baglanti.Close ();

private void cmbDers_SelectedIndexChanged(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    OleDbDataAdapter adp = new OleDbDataAdapter ("select * from Konu where DersID = '" +cmbDers.SelectedItem+"'",baglanti);   
    adp.Fill(dt);
    cmbKonu.DataSource = dt;
    cmbKonu.DisplayMember = "KonuAd";
    cmbKonu.ValueMem`enter code here`ber = "KonuID";
    baglanti.Close();`enter code here`
0 голосов
/ 03 декабря 2010

Пример кода, Winform с двумя comboBox, привязанными к двум таблицам в наборе данных.Таблица "lstCountries" список текущих стран Таблица "lstState" список всех штатов / провинций для всех стран.

Таблица lstCountries (Int32 CountryID, строка CountryName) Таблица lstStates (Int32 StateID, Int32 CountryID, строка StateName)

В этом коде я заполняю cboState, основываясь на значении, выбранном cboCountry, в то время как обе комбинации объединяются с таблицами данных, извлеченными из базы данных.

//  Load data from database (not shown)
// _dataSet.Tables["lstCountries"] datasource for cboCountry
// _dataSet.Tables["lstStates"] datasource for cboState
//  
// cboCountry - comboDropDown - List on countries 
// cboState  = comboDropDown  - List of states

// Use boolean bloading to prevent setting datasource for cboState when cboCountry is intially loaded.

    void cboCountry_SelectedIndexChanged(object sender, EventArgs e)
    {
        ComboBox cbo = (sender as ComboBox);
        if (cbo.SelectedIndex > -1 && !bloading)
        {
            Int32 countryID = Convert.ToInt32(((System.Data.DataRowView)(cbo.SelectedItem)).Row.ItemArray[0].ToString());

            cboState.Text = "";
            DataView view = _dataSet.Tables["lstStates"].DefaultView;
            view.RowFilter = string.Format("CountryID={0}", countryID);
            DataTable table = view.ToTable();
            cboState.DataSource = table;
            cboState.SelectedIndex = -1;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...