在运行时填充预制的未绑定datagridview列

时间:2019-06-02 13:12:54

标签: vb.net winforms datagridview

我有带未绑定数据的DataGridView,当我运行下面的代码时,除了已存在的列之外,它还会创建新的列。我该怎么做才能防止这种情况发生?

    Dim connection2 As SqlConnection
    connection2 = New SqlConnection(clVariables.dbTestConnectionString)
    Dim CMD As New SqlCommand("DoGetSomething")
    Dim adapter As New SqlDataAdapter(CMD)

    CMD.Connection = connection2
    CMD.CommandType = CommandType.StoredProcedure
    CMD.Parameters.AddWithValue("@ID", SqlDbType.VarChar).Value = 1

    Dim ds As Data.DataSet = New Data.DataSet
    adapter.Fill(ds)
    dbtTableTmp.DataSource = ds.Tables(0)
    dbtTableTmp.ReadOnly = True
    dbtTableTmp.Refresh()

1 个答案:

答案 0 :(得分:0)

使用...结束使用块可以确保即使发生错误也可以关闭和处置数据库对象。

您可以将连接以及存储过程的名称直接传递给命令的构造函数。

由于您将网格标记为只读,因此不需要数据适配器,并且由于我们仅处理一个表,因此不需要数据集。

.AddWithValue的第二个参数是要添加到数据库的值。您正在将.Add.AddWithValue混合在一起。出于多种原因,首选.Add方法。这里还有另一个问题。数据类型不能是VarChar,值不能为1。1是Integer,而VarChar是字符串。我猜到了.Int,但是检查数据库以查看正确的内容。

遵循@Jimi在评论中提供的指示。

Private Sub FillGrid()
    Dim dt As New DataTable
    Using connection2 As New SqlConnection(clVariables.dbTestConnectionString)
        Using CMD As New SqlCommand("DoGetSomething", connection2)
            CMD.CommandType = CommandType.StoredProcedure
            CMD.Parameters.Add("@ID", SqlDbType.Int).Value = 1
            connection2.Open()
            dt.Load(CMD.ExecuteReader)
        End Using
    End Using
    dbtTableTmp.DataSource = dt
    dbtTableTmp.ReadOnly = True
    dbtTableTmp.Refresh()
End Sub