【问题标题】:How to display an item from comboBox to a list Box如何将组合框中的项目显示到列表框
【发布时间】:2015-12-16 07:33:41
【问题描述】:

我正在开发一个window form 应用程序。我有一个comboBox 和一个listBox。在我的组合框中,我有 5 个项目,我想将我从组合框中选择的相应项目显示到列表框。

假设如果我选择第 1 项,它将显示第 1 项。如果我选​​择第 2 项,它将显示第 2 项,第 1 项将消失,反之亦然。到目前为止,我已经尝试过这段代码

listBox1.Items.Add(name)

这个ListBox add statment将新的item添加到listBox中,比如item1,item2,item3等等,这不是我想要的。

代码。

using System.IO;
using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("Hello, World!");

           private void loadComboBox()
        {
            myConn = new SqlConnection("Server = localhost; Initial Catalog= dbName; Trusted_Connection = True");

            try
            {
                myConn.Open();
                string query = "select * from Application_Detail";

                myCommand = new SqlCommand(query, myConn);

                //myCommand.ExecuteNonQuery();
                //reading the value from the query
                SqlDataReader dr = myCommand.ExecuteReader();
                //Reading all the value one by one
                while (dr.Read())
                {
                    //column is 1 in Application_Detail Data
                    string name = dr.GetString(1);
                    applicationComboBox.Items.Add(name);
                }
                myConn.Close();
            }catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void fill_checkListBox()
        {
            myConn = new SqlConnection("Server = localhost; Initial Catalog= dbName; Trusted_Connection = True");

            try
            {
                myConn.Open();

                int index = applicationComboBox.SelectedIndex + 1;
                string query = " SELECT td.chineseName, ad.applicationId, aud.applicationId, ad.applicationName FROM[AppUser_Detail] as aud LEFT OUTER JOIN[Teacher_Detail] as td ON aud.teacherId = td.teacherId LEFT OUTER JOIN[Application_Detail] as ad ON aud.applicationId = ad.applicationId LEFT OUTER JOIN[Class_Detail] as cd ON aud.classId = cd.classId where aud.applicationId = '" + index + "' AND NOT(td.teacherId IS NULL AND cd.classId IS NULL)";
                myCommand = new SqlCommand(query, myConn);

                SqlDataReader dr = myCommand.ExecuteReader();

                //Reading all the value one by one
                while (dr.Read())
                {
                    //column is 1 in Application_Detail Data



                        //string value = applicationComboBox.GetItemText(applicationComboBox.Items[i]);
                        string name = dr.GetString(0);

teacherCheckListBox.Items.Clear();\更新了这行teacherCheckListBox.Items.Add(name);

                }
                //teacherCheckListBox.DataSource = dt;
                myConn.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}

有什么想法吗?

【问题讨论】:

  • 您是否希望您的列表框一次只显示一个从组合框中选择的项目?并且组合框最多有 4 个项目,因为 1 将被移动到列表框?
  • 是这样的。你知道pc中的大部分comboBox吗?它只显示您从组合框中选择的项目。

标签: c# winforms combobox listbox


【解决方案1】:
   public Form1()
        {
            InitializeComponent();
            List<string> items = new List<string>();
            items.Add("sachin");
            items.Add("dravid");
            items.Add("ganguly");
            cmbSample.DataSource = items;
        }

        private void cmbSample_SelectedValueChanged(object sender, EventArgs e)
        {
            lstSample.Items.Clear();
            lstSample.Items.Add(cmbSample.SelectedItem);
            lstSample.SelectedItem = cmbSample.SelectedItem;
        }

【讨论】:

  • @DragonBorn ... 那么在这种情况下,您不需要清除列表.. 删除行 lstSample.Items.Clear(); 并且剩余的代码将每次添加新项目。
【解决方案2】:

您可以使用以下代码清除列表框并仅插入一项。

private void cmbSample_SelectedValueChanged(object sender, EventArgs e)
{
    lstSample.Items.Clear();
    lstSample.Items.Add(cmbSample.SelectedItem);
    lstSample.SelectedItem = cmbSample.SelectedItem;
}

但是这里lstSample.Items.Clear(); 会清除列表框中的任何内容。如果你不想这样,那么你可以避免这一行并继续其余两行,这将在现有列表框中插入一个新项目并选择新添加的项目。

private void cmbSample_SelectedValueChanged(object sender, EventArgs e)
{
    lstSample.Items.Add(cmbSample.SelectedItem);
    lstSample.SelectedItem = cmbSample.SelectedItem;
}

【讨论】:

  • 嘿,amnesh,现在情况不同了。如果我绑定到 sql 数据服务器并有类似 while(sqlReader.Read()){ string name sqlReader.GetString(0); comboCheckListBox.Items.Add(name); }GetString(0) 的内容,说我有一个数据库表,我想在其中获取第 0 列(第 1 列)的字符串并显示文本。它有办法我可以做到吗?这是因为如您所见,选中的列表框添加了一个名称,我选择了一个组合框项目。
  • 我不确定这是否有意义
  • @DragonBorn 这对我来说没有多大意义......你需要更清楚一点
  • 嗨 Amnesh,我已经更新了我的代码。现在每次我单击我的组合框时,它都会向选中的列表框添加一个名称。因此,如果我从组合框中选择项目 1,它会显示 name1。如果我在组合框中选择 item2,它会显示 name1 和 name2。如果我选择 item3,它会显示 name1、name2、name3。如果我返回并再次选择 item1,它会显示 name1、name2、name3、name1。这不是我想要的。
  • @DragonBorn 你的实际用例是什么?
猜你喜欢
  • 2015-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多