如何设置与给定字符串匹配的精确下拉列表项?

时间:2018-10-31 19:16:57

标签: c# winforms dropdown

我正在使用Windows窗体应用程序,在其中必须编辑给定记录。该记录还包含一个下拉列表。我想做的是允许用户编辑下拉列表项以及其他记录。

我已经从数据库中查询了用户必须编辑的所需下拉列表项,并将其分配给字符串变量,如下所示:

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 :(得分:1)

如果您的项目是字符串,请尝试改用Combobox.SelectedItem:

if true

Use randomly generated IDs instead.

答案 1 :(得分:0)

您可能希望以不同的方式使用ComboBox。 就像使用其DataSource和Id(int)而不是名称(字符串)一样。 例如:how to bind a list to a combobox? (Winforms)

答案 2 :(得分:0)

我不知道您要在这里做什么,但是您可以将组合框分配给以下项目:

childEditProduct.cmbManufacturer.SelectedIndex = 
    childEditProduct.cmbManufacturer.Items.Cast<string>().ToList()
        .FindIndex(x => x == manufacturerName);

答案 3 :(得分:0)

//use combobox and just set SelectedText
 ComboBox.SelectedText = manufacturerName;

答案 4 :(得分:0)

在我使用以下功能在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的支持。