如何将下拉框项目放入列表?

9

我使用以下方式向下拉框中添加了选项:

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

现在我想将这些值放入字符串列表中。这可能吗,如何做到?

声明并初始化一个字符串列表 List<string>,在将其添加到组合框项之前或之后将名称添加到此列表中。 - Steve
1
我想从不同的作用域(在事件处理程序内部)访问这些项。 - Little Programmer
这是可能的,你只需要在当前方法之上实例化List。 - Brendon
这将使其在课程的其余部分中易于访问(例如在我的答案中)。 - Brendon
5个回答

10

你可以简单地做类似这样的事情

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>();

在你当前的方法之外创建这个List。这个List可以让你在类中的任何方法中使用它。请保留HTML标签。
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();
        }

创建一个新的列表并将每个名称添加到列表中。

comboBoxList.Items.Add(name); 这不是在字符串中添加项目的正确方法。 - MANISH KUMAR CHOUDHARY
抱歉,那是我的错。谢谢。 - Brendon

1

我相信有更优雅的方法,但这个也可以

List<string> values = this.ComKeyType.Items
                      .Cast<object>()
                      .Select(x => x.ToString().Split('=')[1].Replace(" }", "").Trim())
                      .ToList();

0

你可能想要这个:

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

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

cbList.Add(lstItems); 

有没有一种方法可以将它放入字符串列表中? - Little Programmer

0
你真的需要在代码中分离关注点,以使其可维护。
如果要将列表绑定到组合框,可以在XAML中完成:
<ComboBox ItemsSource="{Binding MyList}" SelectedItem="{Binding CurrentItem}" />

你最好在你的视图模型中创建一个ObservableCollection属性:

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

并在您的视图模型构造函数中进行初始化:

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

GetNames() 这里是封装 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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接