如何在C#中从BindingSource获取值



我在这方面使用WinForm,我有3个RadioButton,一个ComboBox,还有三个BindingSource

我希望当我检查任何一个RadioButton时,来自特定DataSources的值绑定到组合框的ValueMemberDisplayMember
程序有一个SQL查询,我想根据选中的单选按钮向其中发送值。

private void rdbMed_CheckedChanged(object sender, EventArgs e)
{
cmbStock.DataSource = null;
cmbStock.DataSource = this.medicinesBindingSource;
this.cmbStock.DisplayMember = ""; //i want to bind "Med_ID" from medicinesBindingSource
this.cmbStock.ValueMember = "";  //"Med_Name"
}
private void rdbCat_CheckedChanged(object sender, EventArgs e)
{
cmbStock.DataSource = null;
cmbStock.DataSource = this.categoriesBindingSource;
this.cmbStock.DisplayMember = ""; //"category_Name"
this.cmbStock.ValueMember = ""; // category_ID"
}
private void rdbPharm_CheckedChanged(object sender, EventArgs e)
{
cmbStock.DataSource = null;
cmbStock.DataSource = this.pharmaceuticalBindingSource;
this.cmbStock.DisplayMember = "";// "Pharma_Name"
this.cmbStock.ValueMember = "";// "Pharma_ID"
}

波纹管是查询的参数。这将帮助你了解我想要实现的目标。

if (rdbMed.Checked)
{
con.cmd.Parameters.AddWithValue("@Med_ID", cmbStock.ValueMember);
con.cmd.Parameters.AddWithValue("@category_ID", "");
con.cmd.Parameters.AddWithValue("@Pharma_ID", "");
}
else if (rdbCat.Checked)
{
con.cmd.Parameters.AddWithValue("@Med_ID", "");
con.cmd.Parameters.AddWithValue("@category_ID", cmbStock.ValueMember);
con.cmd.Parameters.AddWithValue("@Pharma_ID", "");
}
else if (rdbPharm.Checked)
{
con.cmd.Parameters.AddWithValue("@Med_ID", "");
con.cmd.Parameters.AddWithValue("@category_ID", "");
con.cmd.Parameters.AddWithValue("@Pharma_ID", cmbStock.ValueMember);
}

最简单、最不痛苦的方法是在SQL命令中解决它,而实现这一点的方法是用AS VMAS DM强制转换列,并生成DisplayMember = "DM"ValueMember = "VM",所以如果您有像SELECT USERID AS VM, NAME AS DMSELECT PRODUCTID AS VM, NAME AS DM这样的SQL查询,这两种查询都可以工作。

稍后的问题是,如果您对代码做了一些操作,那么您可能会在尝试从数据绑定获取USERID时出错,但实际上是VM。为了避免这种情况,您可以在像SELECT USERID, NAME, ...., USERID AS VM, NAME AS DM这样的查询中"双击"值,这样您的控件将有VMDM,但仍保留原始列。

最新更新