【发布时间】: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