如何使用 c# for Winforms 将新项目按钮添加到下拉列表 API

How to add a new item button to a dropdownlist using c# for Winforms API

我有一个下拉列表,我用从数据库中提取的数据集以编程方式填充它。

我喜欢做的是添加一个选项来充当按钮“”按钮。单击它时,用户将导航到另一个表单。

像这样 (点击drop-down菜单前的截图)

(显示按钮之类的选项的屏幕截图“”

这是我用来填充菜单的代码

private void InventoryAdd_Load(object sender, EventArgs e)
{
    InputDepartment.Items.Clear();
    InputVendors.Items.Clear();

    //populate the Departments menu
    dbConnetion db = new dbConnetion();

    string sql =  " SELECT departmentName, departmentID "
                + " FROM departments "
                + " WHERE status = 'active' ";

    InputDepartment.Items.Clear();
    var deptSource = new List<ComboItem>();

    deptSource.Add(new ComboItem { ID = -1, Text = "Select a Department" });
    deptSource.Add(new ComboItem { ID = 0, Text = " < Add New> " });

    foreach (var item in db.getData(sql, null, r => new ComboItem()
                                    {

                                        ID = Convert.ToInt32(r["departmentID"]),
                                        Text = r["departmentName"].ToString()
                                    })
    )
    {
        deptSource.Add(item);

    };

    InputDepartment.DataSource = deptSource;

}



//This generic class will help setting an id and a text for a comboItem
class ComboItem
{
    public int ID { get; set; }
    public string Text { get; set; }
    public string Val1 { get; set; }

    public override string ToString()
    {
        return Text;
    }
}

这是我的 getData 方法 //查询数据库

public IEnumerable<T> getData<T>(string query, List<MySqlParameter> pars, Func<IDataRecord, T> transform)
{
    using (var conn = new MySqlConnection(conn_string))
    using (var cmd = new MySqlCommand(query, conn))
    {
        if (pars != null)
        {
            foreach (MySqlParameter p in pars)
            {
                cmd.Parameters.Add(p);
            }
        }

        conn.Open();

        using (var rdr = cmd.ExecuteReader())
        {

            while (rdr.Read())
            {
                yield return transform(rdr);
            }
        }

        conn.Close();
    }
}

而不是

deptSource.Add(new ComboItem { ID = i.ID, Text = i.Text });

使用

deptSource.Add(i);

因为我已经是一个 ComboItem。另外,如果你的 getData returns IEnumerable,那可能会很昂贵,所以使用。

foreach (var i in db.getData(sql, null, r => new ComboItem()
    {
         ID = Convert.ToInt32(r["departmentID"]),
         Text = r["departmentName"].ToString()
     }).ToList()

或更简单:

deptSource.AddRange( db.getData(sql, null, r => new ComboItem()
    {
         ID = Convert.ToInt32(r["departmentID"]),
         Text = r["departmentName"].ToString()
     }) );

最后,您需要将事件连接到:

protected override void OnSelectedValueChanged( EventArgs e )

然后您可以检查新值是否为 0 并在其他地方执行您的新项目添加。

更新

我认为标准 ComboBox 不支持添加按钮。有 3rd 方工具,可以。 WPF 也一样。