Заполнение ComboBox с использованием списка в C# - PullRequest
0 голосов
/ 09 июля 2020

У меня есть код, который считывает информацию из базы данных и назначает ее списку

class YaziciBilgiler
        {
            public string yaziciAdi;
         
        public List<YaziciBilgiler> YaziciSec()
            {
    
             con.Open();
            OracleCommand cmd = new OracleCommand("SELECT PRINTER_NAME FROM LABEL_PRINTER ");
                DataSet dataset = new DataSet();
                cmd.Connection = con;
                cmd.CommandType = CommandType.Text;
                using (OracleDataAdapter dataAdapter = new OracleDataAdapter())
                {
                    dataAdapter.SelectCommand = cmd;
                    dataAdapter.Fill(dataset);
                }
                 
             var yazici=dataset.Tables[0].AsEnumerable().Select(datarow=>new YaziciBilgiler
                    {
                    yaziciAdi = datarow.Field<string>("PRINTER_NAME")
                }).ToList();
    
            
                con.Close(); 
                return yazici;
    }
    }
}

Затем вызывайте информацию в списке принтеров из формы

  List<YaziciBilgiler>yazici;
            yazici=yb.YaziciSec();
            foreach (var item in yazici)
            {
                cbYazici.Items.Add(item);
            }

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

введите описание изображения здесь

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Вы можете попробовать это:

cbYazici.Items.Add(item.yaziciAdi)
1 голос
/ 09 июля 2020

Основная c проблема с вашим кодом заключается в том, что вы создали список, полный объектов типа YaziciBilgiler с одним строковым членом yaziciAdi

Combo не знает, как это отображать, это не так. 'Не знаю, как получить свойство yaziciAdi и показать его, и вы не сказали ему, поэтому единственное, что он может сделать при столкновении с неизвестным объектом, - это вызвать ToString () для него, чтобы получить строку и отобразить эту строку

Так как вы не переопределили ToString, он выполняет свое действие по умолчанию, а именно сообщает имя класса. Это означает, что ваша комбинация заполнена повторяющимися словами YaziciBilgiler

У вас есть несколько вариантов:

  • переопределить ToString, чтобы он возвращал свойство yaziciAdi
  • сделать свой код который добавляет элементы внутри l oop, добавьте свойство yaziciAdi вместо всего объекта: cbYazici.Items.Add(item.yaziciAdi);
  • вместо этого измените член yaziciAdi на свойство. привяжите поле со списком к списку или к таблице данных - обсуждение этого находится в комментариях к вопросу. Я не использую WPF, но читаю вокруг, я думаю, что код может быть примерно таким:
   cbYazici.SetBinding(
   ItemsControl.ItemsSourceProperty, 
   new Binding { Source = yazici });
    cbYazici.DisplayMemberPath = "yaziciAdi";

Или используйте эквивалент в XAML (если программный код не может их установить; я ' Я не знаю, может это или нет, и любой опытный WPF-ребята не стесняйтесь редактировать этот ответ, если я ошибаюсь)

Примечание: для привязки свойства yaziciAdi ДОЛЖНО быть свойством, а не полем

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