基于另一个GridViewComboBoxColumn填充GridViewComboBoxColumn

时间:2015-12-13 09:10:29

标签: c# wpf combobox datagridcomboboxcolumn

我有两个DataGridViewComboBoxColumns,一个用于Items,另一个用于项目的数量类型; (Ton,Kg,Meter等)所选项目。

我想要在第一个组合框中使用所选项的数量类型填充第二个DataGridViewComboBoxColumn。

这可以解决一个奇怪的问题;当我从第一个组合框中选择一个项目时,它的数量将被填充,我可以选择所需的数量类型。但是,当我移动到下一行添加另一个项目时;我选择项目,在选择其数量类型时,先前选择的数量将消失。三天以来我一直坚持这个问题,请你帮忙。以下是我的代码,我正在使用EditingControlShowing和SelectionChangeCommitted事件。

    private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        //if (dataGridView1.CurrentCell.ColumnIndex == 0)
        //{
            if (dataGridView1.CurrentCell.ColumnIndex == 0 && e.Control is ComboBox)
            {
                cbxItemCode = e.Control as ComboBox;

                cbxItemCode.SelectionChangeCommitted -= new EventHandler(cbxItemCode_SelectionChangeCommitted);
                cbxItemCode.SelectionChangeCommitted += new EventHandler(cbxItemCode_SelectionChangeCommitted);
            } else
        {
            cbxItemCode.SelectionChangeCommitted -= new EventHandler(cbxItemCode_SelectionChangeCommitted);
        }
   }

这是SelectionChangeCommitted代码:

    private void cbxItemCode_SelectionChangeCommitted(object sender, EventArgs e)
    {
        ComboBox cmbBox = (ComboBox)sender;
        if (cmbBox != null)
        {
            int intValue = Convert.ToInt16(cmbBox.SelectedValue);
            populateQuantyDescColumn(intValue);
        }
    }

SelectionChangeCommitted事件将调用populateQuantityDescColumn(intValue),并将项目代码传递给它:

    public void populateQuantyDescColumn(int ItmsID)
    {
        if (!(con.State == ConnectionState.Open))
        {
            con.Open();
        }

        MySqlCommand sc = new MySqlCommand("select qty.id, qty.Ar_Desc from minierp_db.itemquantity as iq, " +
                                           " minierp_db.quantity as qty, minierp_db.items as it " +
                                           " where it.id = iq.items_id and qty.id = iq.quantity_id and " +
                                           " it.id = " + ItmsID, con);
        MySqlDataReader reader;

        try
        {
            reader = sc.ExecuteReader();
            DataTable dt = new DataTable();
            //dt.Clear();

            dt.Columns.Add("id", typeof(string));
            dt.Columns.Add("Ar_Desc", typeof(string));
            dt.Load(reader);

            qty_desc.ValueMember = "id";
            qty_desc.DisplayMember = "ar_desc";
            qty_desc.DataSource = dt;
        }
        catch (Exception e)
        {
            MessageBox.Show("Exception - populateQuantyDescColumn(): " + e.Message + e.Source);
        }
        finally
        {
            con.Close();
        }
    } //populateQuantyDescColumn

任何帮助将不胜感激,谢谢你。

0 个答案:

没有答案