Как установить точный элемент выпадающего списка, который соответствует данной строке? - PullRequest
0 голосов
/ 31 октября 2018

Я работаю над приложением Windows Form, где мне нужно отредактировать данную запись. Эта запись также содержит выпадающий список. Я хочу разрешить пользователю редактировать элемент раскрывающегося списка вместе с остальной частью записи.

Я запросил требуемый элемент раскрывающегося списка из базы данных, который пользователь должен отредактировать, и назначил его для строковой переменной, как показано ниже:

DataTable dtMName = Products.SelectByManufacturerId(manufacturerId);
               if (dtMName.Rows.Count > 0)
               {
                   foreach (DataRow item in dtMName.Rows)
                   {
                       string manufacturerName = item[0].ToString();
                   }  
               }

Теперь в цикле foreach (поскольку в строке возвращаемых данных есть только одно имя производителя, которое пользователь будет редактировать позже), я хочу выбрать элемент раскрывающегося списка, который соответствует string manufacturerName.

Пока я пробовал следующий код, но не повезло.

childEditProduct.cmbManufacturer.SelectedIndex = childEditProduct.cmbManufacturer.FindString(manufacturerName);

Есть ли проблема с этим подходом при выборе соответствующего элемента раскрывающегося списка? или есть какой-нибудь эффективный способ, который может помочь в моем случае? Любая помощь будет высоко оценена!

Ответы [ 5 ]

0 голосов
/ 02 ноября 2018

Когда я загружал выпадающий список производителя в моем событии загрузки childForm, используя следующую функцию:

private void LoadManufacturers()
    {
        cmbManufacturer.Items.Clear();
        DataTable dtManufacturers = DataAccess.Select("select manufacturername from tblmanufacturer order by manufacturername asc");
        foreach (DataRow dr in dtManufacturers.Rows)
        {
            cmbManufacturer.Items.Add(dr[0].ToString());
        }
        //cmbManufacturer.SelectedIndex = 0;
    }

При загрузке производителей по событию загрузки страницы я также указывал выбранный индекс в раскрывающемся списке, используя код cmbManufacturer.SelectedIndex = 0;, который я закомментировал позже.

После этого я затем пересчитываю (повторно запрашиваю) выбранного производителя (который пользователь хочет обновить) в событии загрузки в раскрывающемся списке следующим образом:

private void frmChildEditProduct_Load(object sender, EventArgs e)
    {
        LoadManufacturers(); // Calling the loadManufacturers function to load all the manufacturers to the dropdown list.

        string manufacturerID = lblManufacturerId.Text;

        DataTable dtMName = Products.SelectByManufacturerId(manufacturerID);
                if (dtMName.Rows.Count > 0)
                {
                    foreach (DataRow manufacturer in dtMName.Rows)
                    {
                        string manufacturerName = manufacturer[0].ToString();
                        cmbManufacturer.SelectedIndex = Convert.ToInt32(cmbManufacturer.FindStringExact(manufacturerName));
                    }
                }
     }

И моя проблема была решена. Спасибо за поддержку, которую я получил на Stackoverflow.

0 голосов
/ 02 ноября 2018

Если ваши элементы являются строками, попробуйте вместо этого использовать Combobox.SelectedItem:

childEditProduct.cmbManufacturer.SelectedItem = manufacturerName;

Документация MSDN

0 голосов
/ 31 октября 2018

Я не знаю, что именно вы хотите здесь сделать, но вы можете назначить свой комбинированный список для элемента, подобного этому:

childEditProduct.cmbManufacturer.SelectedIndex = 
    childEditProduct.cmbManufacturer.Items.Cast<string>().ToList()
        .FindIndex(x => x == manufacturerName);
0 голосов
/ 01 ноября 2018
//use combobox and just set SelectedText
 ComboBox.SelectedText = manufacturerName;
0 голосов
/ 31 октября 2018

Вы можете использовать ComboBox по-другому. Как и использование его DataSource и Id (int) вместо имен (string). Пример: как связать список со списком? (WinForms) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...