在DataGridView上使用Combobox问题

时间:2014-05-19 17:52:22

标签: sql vb.net datagridview

我正在使用VB.NET将一些数据从SQL数据库中提取到Datagridview中。

然后我希望用户能够修改信息并将其保存回数据库,我工作正常。

我现在需要做的是限制值,但是对于Tarrif字段的组合框的方式。

我已经配置了一个名为Tarrif1的DataSource,我正在使用下面的代码。

我有几个问题/问题。

首先,下拉列表显示单个值" System.Data.DataViewManagerListItemTypeDescriptor"不是Tarrif1值。

其次,我现在在我的数据表上有2列名为Tarrif,原始数据库1和我添加的列 - 如何让ComboBox返回到相应的Tarrif数据库字段。

这是我的代码:

Imports System.Data.SqlClient
Imports System.Data.Common

Public Class ViewCustomersForm
  Dim ds As DataSet = New DataSet()
  Dim connStr As String = "server=barry-laptop\SQLEXPRESS; database=BillingReferenceData; integrated security=yes"
  Dim sql As String = "SELECT * FROM Customers"
  Dim conn As SqlConnection = New SqlConnection(connStr)
  Dim comm As SqlCommand = New SqlCommand(Sql, conn)
  Dim dataadapter As SqlDataAdapter = New SqlDataAdapter(comm)

  Private Sub ViewCustomersForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    '---open the connection and fill the dataset---
    conn.Open()
    dataadapter.Fill(ds, "Customers_table")
    conn.Close()
    DataGridView1.DataSource = ds
    DataGridView1.DataMember = "Customers_table"

    '---create a combobox column---
    Dim comboBoxCol As New DataGridViewComboBoxColumn

    '---set the header---
    comboBoxCol.HeaderText = "Tarrifs"

    '---data bind it---
    comboBoxCol.DataSource = Tarrifs1
    'comboBoxCol.DisplayMember = "Tarrif" // when I add these rows the new Tarrif column is not visible
    'comboBoxCol.ValueMember = "Tarrif" // when I add these rows the new Tarrif column is not visible

    '---add a combobox column to the DataGridView control---
    DataGridView1.Columns.Add(comboBoxCol)

  End Sub

  Private Sub Button_Click_1(sender As Object, e As EventArgs) Handles Button1.Click

    Dim sqlCmdBuilder As New SqlCommandBuilder(dataadapter)
    sqlCmdBuilder.GetUpdateCommand()
    dataadapter.Update(ds.Tables("Customers_table"))

  End Sub

  Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick

  End Sub

End Class

希望这是有道理的。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

此代码中的一些内容:

dataadapter.Fill(ds, "Customers_table")
conn.Close()
DataGridView1.DataSource = ds
DataGridView1.DataMember = "Customers_table"

'---create a combobox column---
Dim comboBoxCol As New DataGridViewComboBoxColumn

'---set the header---
comboBoxCol.HeaderText = "Tarrifs"

'---data bind it---
comboBoxCol.DataSource = Tarrifs1

首先,我不确定每当代码尝试填充已经包含数据的DataSet时会发生什么。在我的代码中,我从不假设,所以除非我需要,否则我每次都会重新初始化它:

ds = new DataSet()

接下来,您将comboBoxCol的数据源设置为Tarrifs1,但我没有看到在任何地方定义的数据源。你可能想看一下。

最后,关于SQL:Dim sql As String = "SELECT * FROM Customers"我不知道Customers表中的列是什么。 Tarrif是否为实际列?

答案 1 :(得分:0)

我认为我的问题有一半了。

我配置了第二个数据连接以从Tarrifs表中提取Tarrif下拉列表并将其显示为客户数据表的一部分。

我现在的突出问题是,我需要将select Tarrif值写回Customers表。

所有其他更新的值保存,只是不确定如何将Tarrif下拉列表写回我的SQL表

这是我最新的代码。

Imports System.Data.SqlClient
Imports System.Data.Common

Public Class ViewCustomersForm
Dim ds As DataSet = New DataSet()
Dim connStr As String = "server=barry-laptop\SQLEXPRESS; database=BillingReferenceData; integrated security=yes"
Dim sql As String = "SELECT [Customer ID] ,[Customer Name] ,[Address] ,[City] ,[County] ,[Post Code] FROM [BillingReferenceData].[dbo].[Customers]"
Dim conn As SqlConnection = New SqlConnection(connStr)
Dim comm As SqlCommand = New SqlCommand(Sql, conn)
Dim dataadapter As SqlDataAdapter = New SqlDataAdapter(comm)
Dim con As New System.Data.SqlClient.SqlConnection("server=barry-laptop\SQLEXPRESS; database=Test; integrated security=yes")
Dim strSQL As String = "SELECT * FROM Tarrifs"
Dim da As New System.Data.SqlClient.SqlDataAdapter(strSQL, con)


Private Sub ViewCustomersForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    '---open the connection and fill the dataset---
    conn.Open()
    dataadapter.Fill(ds, "Customers_table")
    conn.Close()
    DataGridView1.DataSource = ds
    DataGridView1.DataMember = "Customers_table"


    '---create a combobox column---
    Dim comboBoxCol As New DataGridViewComboBoxColumn

    '---set the header---
    comboBoxCol.HeaderText = "Tarrifs"

    '---data bind it---


    da.Fill(ds, "Tarrifs")


    comboBoxCol.DataSource = ds.Tables("Tarrifs")
    comboBoxCol.DisplayMember = "Tarrif"
    comboBoxCol.ValueMember = "Tarrif"

    '---add a combobox column to the DataGridView control---
    DataGridView1.Columns.Add(comboBoxCol)


End Sub

Private Sub Button_Click_1(sender As Object, e As EventArgs) Handles Button1.Click


    Dim sqlCmdBuilder As New SqlCommandBuilder(dataadapter)
    sqlCmdBuilder.GetUpdateCommand()
    dataadapter.Update(ds.Tables("Customers_table"))
    dataadapter.Update(ds.Tables("Tarrifs"))

End Sub

Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick

End Sub
End Class