当 select 项形成另一个组合框时防止组合框值重复
Prevent Combobox values repeating When select Items form another combobox
我有两个组合框,它们的名称是 cmbInvoiceNo
和 cmbItemName
。我使用以下代码将所有发票编号发送到 cmbInvoiceNo。
// Get data from database to the **cmbInvoiceNo** combobox
private void GetInvoiceNo()
{
using (SqlConnection con = new SqlConnection(CS))
{
con.Open();
SqlCommand cmd = new SqlCommand("Select InvoiceNo From tblInvoice GROUP BY InvoiceNo", con);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
string invoiceNo = dr.GetString(0);
cmbInvoiceNo.Items.Add(invoiceNo);
}
}
}
之后,当我更改 cmbInvoiceNo 组合框中的发票编号时,我的另一个组合框 (cmbItemName) 会根据 InvoiceNo 显示项目名称。我将它设置为 cmbInvoiceNo_SelectedIndexChanged
这样的事件。
private void cmbInvoiceNo_SelectedIndexChanged(object sender, EventArgs e)
{
if (cmbInvoiceNo.SelectedIndex == 0)
{
ClearAllFields();
}
using (SqlConnection con = new SqlConnection(CS))
{
SqlCommand cmd = new SqlCommand("SELECT ItemName from tblInvoice where InvoiceNo = '" + cmbInvoiceNo.Text + "'", con);
con.Open();
cmd.ExecuteNonQuery();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
string itemName = (string)dr["ItemName"].ToString();
cmbItemNames.Items.Add(itemName);
}
}
}
它也按预期工作。但我的问题是在 selected 一个发票号码后,我将所有项目名称都输入了 cmbItemName 组合框。当我 select 另一个发票编号时,我的 cmbItemName 组合框显示包含之前 selected 项目的项目。它的意思是 cmbItemName 组合框重复值。你能告诉我如何在不重复项目名称的情况下显示项目名称吗?我想根据发票号显示项目名称。当 invoiceNo 更改时,所有项目显示是另一个没有 prevoice 值或重复的组合框。谢谢你。请告诉我如何避免这个问题。
不应该是 selectesindex ==-1 吗?没有选定的行。
好像
cmbItemNames.Items.Clear();
在添加项目之前是这里的解决方案
我有两个组合框,它们的名称是 cmbInvoiceNo
和 cmbItemName
。我使用以下代码将所有发票编号发送到 cmbInvoiceNo。
// Get data from database to the **cmbInvoiceNo** combobox
private void GetInvoiceNo()
{
using (SqlConnection con = new SqlConnection(CS))
{
con.Open();
SqlCommand cmd = new SqlCommand("Select InvoiceNo From tblInvoice GROUP BY InvoiceNo", con);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
string invoiceNo = dr.GetString(0);
cmbInvoiceNo.Items.Add(invoiceNo);
}
}
}
之后,当我更改 cmbInvoiceNo 组合框中的发票编号时,我的另一个组合框 (cmbItemName) 会根据 InvoiceNo 显示项目名称。我将它设置为 cmbInvoiceNo_SelectedIndexChanged
这样的事件。
private void cmbInvoiceNo_SelectedIndexChanged(object sender, EventArgs e)
{
if (cmbInvoiceNo.SelectedIndex == 0)
{
ClearAllFields();
}
using (SqlConnection con = new SqlConnection(CS))
{
SqlCommand cmd = new SqlCommand("SELECT ItemName from tblInvoice where InvoiceNo = '" + cmbInvoiceNo.Text + "'", con);
con.Open();
cmd.ExecuteNonQuery();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
string itemName = (string)dr["ItemName"].ToString();
cmbItemNames.Items.Add(itemName);
}
}
}
它也按预期工作。但我的问题是在 selected 一个发票号码后,我将所有项目名称都输入了 cmbItemName 组合框。当我 select 另一个发票编号时,我的 cmbItemName 组合框显示包含之前 selected 项目的项目。它的意思是 cmbItemName 组合框重复值。你能告诉我如何在不重复项目名称的情况下显示项目名称吗?我想根据发票号显示项目名称。当 invoiceNo 更改时,所有项目显示是另一个没有 prevoice 值或重复的组合框。谢谢你。请告诉我如何避免这个问题。
不应该是 selectesindex ==-1 吗?没有选定的行。
好像
cmbItemNames.Items.Clear();
在添加项目之前是这里的解决方案