如何根据组合框选择更新datagridview?

时间:2016-04-05 05:58:30

标签: c# sql winforms datagridview combobox

我正在尝试编写代码,该代码将根据组合框中选择的汽车大小在datagridview中显示数据。当此代码最初运行时,它默认为经济大小,并在datagridview中显示正确的信息。但是,当在组合框中选择不同的大小时,文本框会正确更新,而datagridview保持不变。每次更改组合框时,我该怎么做才能更新它?我认为“private void cboSize_selectionChangeCommitted()”中的代码可以完成此任务,但输出没有变化。

namespace carForm
{
    public partial class Form1 : Form
    {
        _Cars_1_DataSet cDataSet;
        BindingSource sizeBindingSource;
        BindingSource vehicleBindingSource;
        CarsDataClass clsCarsData;

        Boolean gridInitialized;

        public Form1()
        {
            InitializeComponent();
        }

        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the '_Cars_1_DataSet.Reservations' table. You can move, or remove it, as needed.
            this.reservationsTableAdapter.Fill(this._Cars_1_DataSet.Reservations);
            // TODO: This line of code loads data into the '_Cars_1_DataSet.Vehicle' table. You can move, or remove it, as needed.
            this.vehicleTableAdapter.Fill(this._Cars_1_DataSet.Vehicle);
            // TODO: This line of code loads data into the '_Cars_1_DataSet.CarSize' table. You can move, or remove it, as needed.
            this.carSizeTableAdapter.Fill(this._Cars_1_DataSet.CarSize);
            clsCarsData = new CarsDataClass();
            cDataSet = clsCarsData.GetDataSet();

            //Binding source sizes
            sizeBindingSource = new BindingSource();
            sizeBindingSource.DataSource = cDataSet;
            sizeBindingSource.DataMember = "CarSize";

            //Binding source vehicles
            vehicleBindingSource = new BindingSource();
            vehicleBindingSource.DataSource = cDataSet;
            vehicleBindingSource.DataMember = "Vehicle";

            //Combo box
            cboSize.DataSource = sizeBindingSource;
            cboSize.DisplayMember = "Size";
            cboSize.ValueMember = "SizeCode";

            //bind other controls
            txtDaily.DataBindings.Add("text", sizeBindingSource, "DailyRate");
            txtMileage.DataBindings.Add("text", sizeBindingSource, "MileageRate");

            //execute combo box
            cboSize_SelectionChangeCommitted(cboSize, e);
        }

        private void cboSize_SelectionChangeCommitted(object sender, EventArgs e)
        {
            string carSelected;
            carSelected = Convert.ToString(cboSize.SelectedValue);
            if (!gridInitialized)
            {
                dgvVehicles.DataSource = vehicleBindingSource;
                gridInitialized = true;
                ChangeGridColumns();
            }
            vehicleBindingSource.Filter = "CarSize = '" + carSelected + "'";
        }

        private void ChangeGridColumns()
        {
            //Change column headers
            //dgvVehicles.Columns["Inv_ID"].Visible = false;
        }
    }
}

2 个答案:

答案 0 :(得分:0)

使用SelectedIndexChanged而不是SelectionChangeCommitted。

答案 1 :(得分:0)

在设计视图中单击组合框后,尝试使用事件菜单中的SelectedIndexChanged事件。

这应填充在您的代码中:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
   Console.WriteLine("test!");
}

在那里你可以从你的代码中输入这个逻辑:

string carSelected;
carSelected = Convert.ToString(cboSize.SelectedValue);
if (!gridInitialized)
 {
      dgvVehicles.DataSource = vehicleBindingSource;
      gridInitialized = true;
      ChangeGridColumns();
 }
 vehicleBindingSource.Filter = "CarSize = '" + carSelected + "'";