使用 SQL 在绑定的 DataGridView-VB 中生成列后,SQL 更新不起作用



我正在使用带有数据绑定DataGridView控件的VB Windows Forms。使用 Access,我有一个"客户"表,并使用 SQL 命令将所选字段填充到 DataGridView。 问题:我有一个"活动"字段,其中 1 表示活动,0 表示非活动。 在 DataGridView 窗口中,我需要更改"活动"列以显示 Y 表示活动,N 表示非活动(不更改基础数据(。我尝试使用UPDATE命令但没有成功。在第一个 SQL 命令填充 DataGridView 之后,我不确定如何编写第二个 SQL 命令来修改"活动"列。

不要在 SQL 中执行任何操作。 网格可以通过一些代码为您处理它。 您需要处理网格的CellFormattingCellParsing事件,并首先确认它是该列。 格式化时,分别从 1 和 0 转换为"Y"和"N",解析时,执行相反的操作。例如

Private activeColumnIndex As Integer 'Set column index as appropriate.
Private Sub DataGridView1_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
If e.ColumnIndex = activeColumnIndex Then
Select Case CInt(e.Value)
Case 0
e.Value = "N"
Case 1
e.Value = "Y"
End Select
e.FormattingApplied = True
End If
End Sub
Private Sub DataGridView1_CellParsing(sender As Object, e As DataGridViewCellParsingEventArgs) Handles DataGridView1.CellParsing
If e.ColumnIndex = activeColumnIndex Then
Select Case CStr(e.Value)
Case "N"
e.Value = 0
Case "Y"
e.Value = 1
End Select
e.ParsingApplied = True
End If
End Sub

请注意,此代码不考虑NULL值或无效输入。这超出了范围,由您来实施。

进一步考虑这个问题,我建议您实际上应该使用组合框列,而不是文本框列。这样,用户就不可能输入无效值,因为他们必须从下拉列表中选择"Y"或"N"。

不过,DataGridView永远不会为您创建组合框列,因此您需要自己添加一个。你可以在代码中做到这一点,但我建议你在设计器中完成。无论哪种方式,都需要将网格列的DataPropertyName属性设置为数据源列的名称(在本例中为"活动"(,以使其正确绑定。请参阅此处的设计器中添加组合框列的指南。

获得组合框列后,需要绑定下拉项。在您的情况下,您可以执行以下操作:

Dim activeOptions = {New With {.Text = "Y", .Value = 1},
New With {.Text = "N", .Value = 0}}
With activeColumn
.DisplayMember = "Text"
.ValueMember = "Value"
.DataSource = activeOptions
End With

您应该在设置网格的DataSource之前执行此操作。 该代码创建一个匿名类型的对象数组,其中Text值是下拉列表中显示的值,Value值对应于网格数据源中的单元格值。

最新更新