使用bindingsource更新具有combobox的datagridview

时间:2014-03-04 04:32:06

标签: vb.net datagridview combobox bindingsource

我正在使用Vb.Net从sql server数据库加载数据。我有汽车数据表如下:

enter image description here

我按如下方式加载汽车详细信息和不同的模型值:

sql = " select * from car"
daCar = New SqlDataAdapter(sql, sqlConn)
daCar.Fill(dsDataset, "car")

sql = " select distinct model from car"
daCar = New SqlDataAdapter(sql, sqlConn)
daCar.Fill(dsDataset, "model")

现在当我加载表单时,我有两个绑定源,并有一个组合框来显示模型的不同值,以便用户汽车轻松修改数据

bsCar = New BindingSource(dsDataset, "car")
bsModel = New BindingSource(dsDataset, "model")
dgvCars.DataSource = bsCar

Dim col2 As New DataGridViewComboBoxColumn
col2.HeaderText = "Model"
col2.Name = "model"

col2.DataSource = bsModel
col2.DisplayMember = "model"
col2.ValueMember = "model"
col2.DataPropertyName = "model"

col2.FlatStyle = FlatStyle.Flat
dgvCars.Columns.Insert(2, col2)
dgvCars.Columns(2).Width = 150

并且为了能够修改combobx的内容我有以下事件:

Private Sub dgvCars_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) _
        Handles dgvCars.EditingControlShowing
        If dgvCars.CurrentCell.ColumnIndex = 2
            Dim comboBox As ComboBox = TryCast(e.Control, ComboBox)
            comboBox.DropDownStyle = ComboBoxStyle.DropDown
        End If
    End Sub

现在每件事情都很完美除了一个问题: 每当我尝试对dgvCar中的模型组合框进行更改时,更改将在失去焦点后返回到旧的组合框! 另外,我无法向datagridview添加新记录! 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

从它的外观来看问题是,你不是让数据库知道数据已经改变了。

因此,当您更改或添加某些内容到组合框时,它只会添加到组合框(CB),当您刷新CB(当它失去焦点时)并从数据库中获取数据时,输入的数据不在数据库,因此不显示(丢失)

要解决此问题,请在组合框中添加或更改数据时将SQL查询添加到数据库/表中以进行更新或插入

另外,要向数据网格视图添加行,请调查以下代码:

dgvCars.Rows.Add()