禁用列 Header 单击 datagridview vb.net
Disable Column Header click on datagridview vb.net
我已经为数据网格视图上的每一行创建了一个命令按钮。
代码运行良好。
Private Sub dgv_employees_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv_employees.CellClick
'If dgv_employees.Columns(e.ColumnIndex).HeaderText = "Edit" Then
If e.ColumnIndex = 16 Then
'dgv_employees.Columns(16).SortMode = DataGridViewColumnSortMode.NotSortable
Dim constr As String = "Data Source=CARSON-PC;Initial Catalog=payroll;Integrated Security=True"
Dim row As DataGridViewRow = dgv_employees.Rows(e.RowIndex)
Dim ds As New DataSet()
If MessageBox.Show(String.Format("Do you want to delete ID: {0}", row.Cells("empNum").Value), "Confirmation", MessageBoxButtons.YesNo) = DialogResult.Yes Then
Using con As New SqlConnection(constr)
Using cmd As New SqlCommand("DELETE FROM [dbo].[emp_personal] WHERE empNum = @empNum", con)
cmd.CommandType = CommandType.Text
cmd.Parameters.AddWithValue("@empNum", row.Cells("empNum").Value)
con.Open()
cmd.ExecuteNonQuery()
con.Close()
End Using
End Using
Me.BindGrid()
End If
End If
End Sub
但是,每当我单击 header 列时,都会出现错误。
我该如何解决这个问题?
我认为问题是由于排序尝试引起的,我将使用以下代码来禁用对那些 DataGridViewButtonColumns
的排序。
DataGridView.Columns.Item(<columnIndex or "Name">).SortMode = DataGridViewColumnSortMode.Programmatic
你也可以避免使用负索引,只修复后果:
Dim row as DataGridViewRow
If e.RowIndex >=0 Then
row = dgv_employees.Rows(e.RowIndex)
End If
注意,可能有一些我不知道的上下文,因此需要进一步修改。
可能,您还可以使用 Overides
禁用 header 本身的点击事件:disable-sorting-when-clicking-datagridview-column-header
发布我想出的代码,以便其他人可以参考。
我删除了这一行Dim row As DataGridViewRow = dgv_employees.Rows(e.RowIndex)
这个现在对我有用:
If e.RowIndex >= 0 AndAlso e.ColumnIndex = 16 Then
If MessageBox.Show(String.Format("Do you want to delete ID: {0}", dgv_employees.Rows(e.RowIndex).Cells("empNum").Value), "Confirmation", MessageBoxButtons.YesNo) = DialogResult.Yes Then
Using con As New SqlConnection(constr)
Using cmd As New SqlCommand("DELETE FROM [dbo].[emp_personal] WHERE empNum = @empNum", con)
cmd.CommandType = CommandType.Text
cmd.Parameters.AddWithValue("@empNum", dgv_employees.Rows(e.RowIndex).Cells("empNum").Value)
con.Open()
cmd.ExecuteNonQuery()
con.Close()
End Using
End Using
Me.BindGrid()
End If
End If
我已经为数据网格视图上的每一行创建了一个命令按钮。
代码运行良好。
Private Sub dgv_employees_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv_employees.CellClick
'If dgv_employees.Columns(e.ColumnIndex).HeaderText = "Edit" Then
If e.ColumnIndex = 16 Then
'dgv_employees.Columns(16).SortMode = DataGridViewColumnSortMode.NotSortable
Dim constr As String = "Data Source=CARSON-PC;Initial Catalog=payroll;Integrated Security=True"
Dim row As DataGridViewRow = dgv_employees.Rows(e.RowIndex)
Dim ds As New DataSet()
If MessageBox.Show(String.Format("Do you want to delete ID: {0}", row.Cells("empNum").Value), "Confirmation", MessageBoxButtons.YesNo) = DialogResult.Yes Then
Using con As New SqlConnection(constr)
Using cmd As New SqlCommand("DELETE FROM [dbo].[emp_personal] WHERE empNum = @empNum", con)
cmd.CommandType = CommandType.Text
cmd.Parameters.AddWithValue("@empNum", row.Cells("empNum").Value)
con.Open()
cmd.ExecuteNonQuery()
con.Close()
End Using
End Using
Me.BindGrid()
End If
End If
End Sub
但是,每当我单击 header 列时,都会出现错误。
我该如何解决这个问题?
我认为问题是由于排序尝试引起的,我将使用以下代码来禁用对那些 DataGridViewButtonColumns
的排序。
DataGridView.Columns.Item(<columnIndex or "Name">).SortMode = DataGridViewColumnSortMode.Programmatic
你也可以避免使用负索引,只修复后果:
Dim row as DataGridViewRow
If e.RowIndex >=0 Then
row = dgv_employees.Rows(e.RowIndex)
End If
注意,可能有一些我不知道的上下文,因此需要进一步修改。
可能,您还可以使用 Overides
禁用 header 本身的点击事件:disable-sorting-when-clicking-datagridview-column-header
发布我想出的代码,以便其他人可以参考。
我删除了这一行Dim row As DataGridViewRow = dgv_employees.Rows(e.RowIndex)
这个现在对我有用:
If e.RowIndex >= 0 AndAlso e.ColumnIndex = 16 Then
If MessageBox.Show(String.Format("Do you want to delete ID: {0}", dgv_employees.Rows(e.RowIndex).Cells("empNum").Value), "Confirmation", MessageBoxButtons.YesNo) = DialogResult.Yes Then
Using con As New SqlConnection(constr)
Using cmd As New SqlCommand("DELETE FROM [dbo].[emp_personal] WHERE empNum = @empNum", con)
cmd.CommandType = CommandType.Text
cmd.Parameters.AddWithValue("@empNum", dgv_employees.Rows(e.RowIndex).Cells("empNum").Value)
con.Open()
cmd.ExecuteNonQuery()
con.Close()
End Using
End Using
Me.BindGrid()
End If
End If