当 select 项形成另一个组合框时防止组合框值重复

Prevent Combobox values repeating When select Items form another combobox

我有两个组合框,它们的名称是 cmbInvoiceNocmbItemName。我使用以下代码将所有发票编号发送到 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();

在添加项目之前是这里的解决方案