【问题标题】:Updating a table from a Form DGV从 DGV 表格更新表格
【发布时间】:2014-04-05 02:43:01
【问题描述】:

我有一个从应用程序中的存储过程加载的 DGV:

Dim conn As New SqlConnection(My.Resources.FCLRptConn)
            Dim cmd As New SqlCommand("spFCLEditAgentAssignments", conn)
            cmd.CommandType = CommandType.StoredProcedure
            Dim ds As New DataSet
            Dim DA As New SqlDataAdapter(cmd)

            cmd.Parameters.AddWithValue("@ActiveIndicator", Me.tscmbActiveIndicator.ComboBox.SelectedValue)

            DA.Fill(ds)

            Me.dgvAgentAssignment.DataSource = ds.Tables(0)

在此之前,我添加了一个绑定到 DGV 中的列之一的 DataGridViewComboBox 列:

Dim conn As New SqlConnection(My.Resources.FCLRptConn)
            Dim cmd As New SqlCommand("spFCLLUVTeamAssignment", conn)
            Dim da As New SqlDataAdapter(cmd)
            Dim TeamAssign As New DataTable

            da.Fill(TeamAssign)

            With FCLTeam
                .DataPropertyName = "FCLTeamID"
                .Name = "FCLTeamID"
                .DataSource = TeamAssign
                .DisplayMember = "FCLTeamName"
                .ValueMember = "FCLTeamID"
                .AutoSizeMode = DataGridViewAutoSizeColumnsMode.DisplayedCells
            End With

加载表格后,我想出了一个 “对象引用未设置为对象的实例”错误。这发生在这段代码中:

 cmd.CommandText = "UPDATE tblFCLAgentAssignment SET [" & ColumnName & "] = '" & _
                             ConvertVBBooleanToSQLBit(dgvAgentAssignment.CurrentRow.Cells(ColumnName).Value) & _
                            "' WHERE RefID = '" & dgvAgentAssignment.CurrentRow.Cells("RefID").Value & "'"

以上代码用于更新通过 DGV 更新的字段或单元格。

跳过错误后,我可以毫无问题地更新“FCLTeamID”字段。加载时我可能做错了什么?

【问题讨论】:

  • 调试器是你的朋友。在有问题的行上设置断点并让代码运行。然后检查什么是 null (CurrentRow?)
  • "ColumnName" 在加载时为空,因此 CurrentRow 不返回任何内容。我如何阻止它运行,因为在加载表单时没有必要,但只有在我更改单元格时才需要?
  • 在 ColumnName 上添加一个测试就足够了。像if Not string.IsNullOrEmpty(ColumnName) Then 这样的东西来保护在不需要时更新列的代码
  • 完美运行。我有一个“ExecuteNonQuery:CommandText 属性尚未初始化 vb”错误,但我通过在“conn.Open”之后移动“Dim CommandText As String = Nothing”来解决这个问题。谢谢
  • 如果您回答了自己的问题,请将其作为答案输入并标记为已回答。谢谢

标签: vb.net winforms datagridviewcombobox


【解决方案1】:
 If Not String.IsNullOrEmpty(ColumnName) Then
            cmd.CommandText = "UPDATE tblFCLAgentAssignment SET [" & ColumnName & "] = '" & _
                                         ConvertVBBooleanToSQLBit(dgvAgentAssignment.CurrentRow.Cells(ColumnName).Value) & _
                                        "' WHERE RefID = '" & dgvAgentAssignment.CurrentRow.Cells("RefID").Value & "'"
        End If

这解决了 ColumnName 问题,如果它是空的,它将不会尝试更新表

【讨论】:

    猜你喜欢
    • 2013-11-12
    • 2012-06-25
    • 2021-02-15
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    相关资源
    最近更新 更多