2016-07-11 2 views
3

Я добавил элементы в выпадающий список с помощью:Как добавить элементы списка combobox в список?

SqlDataReader sqlReader = sqlCmd.ExecuteReader(); 
while (sqlReader.Read()) 
{ 
    string name = sqlReader.GetString(0); 
    combobox1.Items.Add(name); 
} 
sqlReader.Close(); 
conn.Close(); 

Теперь я хочу, чтобы поместить эти значения в списке строк. Это возможно и как я могу это сделать?

+0

Declare и инициализировать список строк '' List и добавьте _NAME_ в этот список или перед добавлением его элементы ComboBox. – Steve

+1

Я хочу получить доступ к этим элементам из другой области (внутри обработчика событий) –

+0

Возможно, вам просто нужно создать экземпляр списка выше текущего метода, который вы находитесь в – Brendon

ответ

5

Просто вы можете сделать что-то вроде

string[] items = new string[combobox1.Items.Count]; 

for(int i = 0; i < combobox1.Items.Count; i++) 
    { 
     items[i] = combobox1.Items[i].ToString(); 
    } 

Или, если хотите создать список строк непосредственно из объекта чтения, чем

var itemList=new List<string>(); 
SqlDataReader sqlReader = sqlCmd.ExecuteReader(); 
       while (sqlReader.Read()) 
       { 

        string name = sqlReader.GetString(0); 
        combobox1.Items.Add(name); 
        itemList.Add(name); 
       } 
       sqlReader.Close(); 
       conn.Close(); 
      } 

Использование LINQ сделает вашу работу очень легко

var arr = combobox1.Items.Cast<Object>() 
     .Select(item => item.ToString()).ToArray(); 
2
private List<string> ComboBoxList = new List<string>(); 

Создайте это за пределами метода, в котором вы сейчас находитесь. Этот список позволит вам использовать его любым способом внутри класса.

private List<string> ComboBoxList; 

или попробуйте это вместо верхней части кода. Они оба работают.

SqlDataReader sqlReader = sqlCmd.ExecuteReader(); 
       while (sqlReader.Read()) 
      { 

       string name = sqlReader.GetString(0); 
       combobox1.Items.Add(name); 
       comboBoxList.Add(name); 
      } 
      sqlReader.Close(); 
      conn.Close(); 
     } 

Создайте новый список и добавьте каждое имя в список.

+0

'comboBoxList.Items.Add (name);' это неправильный способ добавить элемент в строку –

+0

Извините, это плохо. Спасибо – Brendon

0

Возможно, вы захотите:

List<String> cbList = new List<String>(); 

var lstItems= ComboBox1.Items.Cast<Object>() 
      .Select(item => item.ToString()).ToList(); 

cbList.Add(lstItems); 
+0

Есть ли способ разместить его в списке строк? –

+0

обновленный чек .. –

0

Вам действительно нужно разделить проблемы в своем коде, чтобы сделать его пригодным для обслуживания.

Если вы хотите связать список с списком, вы можете сделать это в XAML:

<ComboBox ItemsSource="{Binding MyList}" SelectedItem="{Binding CurrentItem}" /> 

Вы бы лучше сделать свойство ObservableCollection в вашей модели представления:

public ObservableCollection<string> MyList {get; private set;} 

и инициализировать это в конструкторе вашей точки зрения модели:

MyList = new ObservableCollection<string>(GetNames()); 

GetNames() здесь метод Whe повторно код SQL является инкапсулированным:

private List<string> GetNames() { 
    var myList = new List<string>(); 
    SqlDataReader sqlReader = sqlCmd.ExecuteReader(); 
    while (sqlReader.Read()) 
     { 
      string name = sqlReader.GetString(0); 
      myList.Add(name); 
     } 
    sqlReader.Close(); 
    conn.Close(); 

    return myList; 
} 
Смежные вопросы