将数据绑定到DataGridView

时间:2010-04-05 18:04:24

标签: vb.net binding datagridview

我有一些代码从MS SQL Server中的存储过程加载数据,然后将数据加载到DataGridView,这可以正常工作。我想要的是将连接/加载数据的代码放在我的Database类中,然后将与DataGridView相关联的所有内容存储在我的Form中,但是我遇到了问题BindingSource的内容FormDatabaseForm1开始。

Public Class Form1 Dim myDatabaseObj As New Class1() Dim bindingSource1 As New BindingSource() Dim connectString As New SqlConnection Dim objDataAdapter As New SqlDataAdapter Dim table As New DataTable() Dim tabletest As New DataTable() Private Sub loadCompanyList() Try Me.dgv_CompanyList.DataSource = Me.bindingSource1 getCompanyList() Catch ex As NullReferenceException End Try End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load loadCompanyList() End Sub End Class 代码:

getCompanyList()

当我尝试将Form()放在一个类中,然后创建一个引用MyForm.BindingSource1.Datasource的新对象时,它似乎没有从表中返回DataGridView的任何值,这意味着我的Database不显示任何数据。

..... Private Sub getCompanyList() Try Dim myForm as new Form() connect_Transaction_Database() objDataAdapter.SelectCommand = New SqlCommand() objDataAdapter.SelectCommand.Connection = connectString objDataAdapter.SelectCommand.CommandText = "sp_GetCompanyList" objDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure Dim commandBuilder As New SqlCommandBuilder(Me.objDataAdapter) Dim table As New DataTable() table.Locale = System.Globalization.CultureInfo.InvariantCulture Me.objDataAdapter.Fill(table) **MyForm.bindingSource1.DataSource = table** Catch ex As DataException MsgBox(ex.Message) Catch ex As NullReferenceException MsgBox(ex.Message) End Try disconnect_Transaction_Database() End Sub 班级代码:

{{1}}

3 个答案:

答案 0 :(得分:0)

您希望getCompanyList成为一个函数,它返回DataTable。然后,忘记BindingSource(如果DataGridView是只读的)并将DataSource属性设置为函数:

Me.dgv_CompanyList.DataSource = getCompanyList

答案 1 :(得分:0)

我建议您将GetCompanyList方法转换为一个函数,该函数返回由DataTable填充的SqlDataAdapter。这个Sub应该依赖于表单是没有真正原因的。相反,表单中的方法可以调用它来获取DataTable,然后执行绑定。

Public Function GetCompanyList() As DataTable
...
...
   Dim table As New DataTable()
   table.Locale = System.Globalization.CultureInfo.InvariantCulture
   Me.objDataAdapter.Fill(table)
   Return table
...
...

答案 2 :(得分:0)

这个问题刚刚被Community用户提出,所以我想我会提供一个可能在将来帮助其他人的答案。

首先,我会考虑实施Using

  

托管资源由.NET Framework垃圾收集器(GC)处理,无需您进行任何额外编码。对于托管资源,您不需要使用“使用”块。但是,您仍然可以使用“使用”块来强制处理受管资源,而不是等待垃圾回收器。

其次,您不需要使用SqlDataAdapter。相反,您可以使用SqlCommand类加载DataTable并返回该类。我还会在方法中包含SqlConnection,而不是在另一个方法中打开和关闭它。

您的代码看起来像这样:

Form1代码:

Public Class Form1

    Private Sub loadCompanyList()
        Dim myDatabase As New Database
        Me.dgv_CompanyList.DataSource = myDatabase.getCompanyList()
    End Sub

End Class

Database代码:

Public Class Database

    Public Function getCompanyList() As DataTable

        Dim dt As New DataTable

        Using con As New SqlConnection(connectionString),
              cmd As New SqlCommand("sp_GetCompanyList", con) With {.CommandType = CommandType.StoredProcedure}

            con.Open()

            dt.Load(cmd.ExecuteReader())

        End Using

        Return dt

    End Function

End Class