gpt4 book ai didi

database - 从数据库中删除错误

转载 作者:搜寻专家 更新时间:2023-10-30 20:57:15 25 4
gpt4 key购买 nike

我有一个通过 VS 2010(本地数据库文件选项)创建的 SQL Server Compact 数据库。在表单加载 (CategoryForm) 时,我将数据库中的值加载到 DataGridView1 中。我还以编程方式添加了一个额外的 ButtonColumn,用于 Delete 部分。问题是这样的:

  • 在初始表单加载时,我第一次在任何行上按删除键时,它起作用了。如果我再按一次,它就不起作用。
  • 我第二次单击按钮时,我在 Msgbox 上打印的文本是按钮的文本! (删除)(包括屏幕截图)p.s 如下所述,当我注释掉多余的内容时,我得到了返回的正确值。

我尝试过的:

  • 注释掉所有与 SQL 相关的内容,只留下我获取 RowIndex 的部分以及该索引处特定单元格的值。我将它们都打印在 MsgBox 上。我得到的值是正确的。例如,0 索引和值 test 为带有文本 test 的第一行。

下面是我的进度和截图:

CellContentClick 方法:

Private Sub DataGridView1_CellContectClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick

Dim i As String

'If e.ColumnIndex = 1 Then
'If e.RowIndex >= 0 And e.RowIndex <= DataGridView1.Rows.Count - 1 Then

i = DataGridView1.Rows(e.RowIndex).Cells(0).Value.ToString
MsgBox(e.RowIndex)
MsgBox(i)
SQLStringDelete = "DELETE FROM Category WHERE categoryname = '" & i & "'"
SQLConn.ConnectionString = ConnString 'Set the Connection String
SQLConn.Open() 'Open the connection
SQLCmd.Connection = SQLConn 'Sets the Connection to use with the SQL Command
SQLCmd.CommandText = SQLStringDelete 'Sets the SQL String
SQLCmd.ExecuteNonQuery() 'Executes SQL Command

'Create Adapter
Dim DataAdapter As SqlCeDataAdapter = New SqlCeDataAdapter("SELECT categoryname FROM Category", SQLConn)
'Create DataSet
Dim Dataset As New DataSet
'fill the datset
DataAdapter.Fill(Dataset)
'attach dataset to the datagrid
With DataGridView1
.DataSource = Dataset.Tables(0)
.Columns(0).HeaderText = ""
.Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
End With

DataAdapter = Nothing
Dataset = Nothing

SQLConn.Close() 'Close the connection



End Sub

Form_Load 方法:

 Private Sub CategoryForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
SQLConn.ConnectionString = ConnString 'Set the Connection String
SQLConn.Open() 'Open the connection

'Create Adapter
Dim DataAdapter As SqlCeDataAdapter = New SqlCeDataAdapter("SELECT categoryname FROM Category", SQLConn)
'Create DataSet
Dim Dataset As New DataSet
'fill the datset
DataAdapter.Fill(Dataset)
'attach dataset to the datagrid
With DataGridView1
.DataSource = Dataset.Tables(0)
.Columns(0).HeaderText = ""
.Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
End With

DataAdapter = Nothing
Dataset = Nothing
SQLConn.Close()

With buttonColumn
.Name = "DeleteButtonColumn"
.HeaderText = ""
.Text = "Delete"
.UseColumnTextForButtonValue = True
.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
.Width = 50
End With

If DataGridView1.Columns.Count = 1 Then
DataGridView1.Columns.Add(buttonColumn)
End If

End Sub

截图:

Button text returned instead of cell value

Still there after several click :)

最佳答案

事实证明,自动重新生成的列在每次第二次单击时都会导致列重新排列。只需在表单加载和事件中设置 DataGridView1.AutoGenerateColumns = false 即可。

关于database - 从数据库中删除错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16543930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com