如何使用 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 也一样。
我有一个下拉列表,我用从数据库中提取的数据集以编程方式填充它。
我喜欢做的是添加一个选项来充当按钮“”按钮。单击它时,用户将导航到另一个表单。
像这样
(点击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 也一样。