【发布时间】:2019-05-20 14:39:48
【问题描述】:
我有一个DataGridView 控件,我已将DataGridViewRow.HeaderCell.Value 设置为等于一个整数。这些行编号为1, 2, 3...(这可能无关紧要,无论我将值设置为什么,我都会遇到相同的行为)。
在运行时,当我单击列的标题来切换排序顺序时,行标题会消失。更准确地说,分配给标题的数值被清除。
我可以在 For Each 循环中轻松地将每个 DataGridViewColumn 的 SortMode 属性设置为 NotSortable,但我想保留排序功能。
有没有办法解决这个问题?
这是我的代码:
Imports System.IO
Imports System.Data.SqlClient
Public Class Form1
Dim CMD As New SqlCommand()
Dim ADP As New SqlDataAdapter()
Dim TBL As New DataTable
Dim serverStr As String = "Server"
Dim databaseStr As String = "Database"
Dim dbLoginStr As String = "Login"
Dim dbPassStr As String = "Password"
Dim qry As String
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim connectionString As String =
"Server=" & serverStr & ";" &
"Database=" & databaseStr & ";" &
"User Id=" & dbLoginStr & ";" &
"Password=" & dbPassStr & ";" &
"Timeout=1"
qry = "SELECT * FROM INFORMATION_SCHEMA.TABLES ORDER BY TABLE_NAME ASC"
Try
Using SQL As New SqlConnection
SQL.ConnectionString = connectionString
CMD.Connection = SQL
CMD.CommandText = qry
ADP.SelectCommand = CMD
SQL.Open()
ADP.SelectCommand = CMD
TBL.Clear()
TBL.Columns.Clear()
ADP.Fill(TBL)
SQL.Close()
End Using
Catch ex As Exception
MsgBox("Could not connect to " & databaseStr & " on server: " & serverStr & vbNewLine & vbNewLine & ex.Message)
Exit Sub
End Try
DataGridView1.DataSource = TBL
DataGridView1.AutoResizeColumns()
SetRowNumber(DataGridView1)
DataGridView1.Columns(DataGridView1.Columns.Count - 1).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
End Sub
Private Sub SetRowNumber(myDGV As DataGridView)
For Each row As DataGridViewRow In myDGV.Rows
row.HeaderCell.Value = (row.Index + 1).ToString()
Next
myDGV.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders)
'Remove Sorting ability
'For Each col As DataGridViewColumn In myDGV.Columns
' col.SortMode = DataGridViewColumnSortMode.NotSortable
'Next
End Sub
'See if value got cleared upon sorting
'Private Sub DataGridView1_ColumnHeaderMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.ColumnHeaderMouseClick
' Dim myDGV = DirectCast(sender, DataGridView)
' For Each row As DataGridViewRow In myDGV.Rows
' MsgBox(row.HeaderCell.Value)
' Next
'End Sub
End Class
【问题讨论】:
标签: vb.net winforms datagridview