由于显示数据没有将其充满,所以点击头排序后,空行会显示到最上面,如何处理,还有就是如何获得所点击的头所在的列,在线等,谢谢.
解决方案 »
- 关于timer的问题 分不多了,请见谅!
- 100分求救,如何使用用友的数据库ufdata.mdf中的Gl_accvouch查询生成各个月份的资产负债表 求救
- datagrid中的datasouce属性是否只能设定一次?
- 如何在VB程序中实现QQ好友的高级搜索功能(怎样将在程序中填好的搜索数据发送出去,得到显示搜索结果的网页?)
- 请教高手关于检测打印机状态!!!!!!
- dll
- vb程序员是不是被用其他开发工具的人看不起呀?(大家别骂我,我是受了刺激才这样问的)
- 100分相送:为什么我在MDI窗体中加入PICTURE控件后,打开的子窗体都在PICTURE控件下面?
- RegSetValueEx(lonSubkeyHandle, "xyz", 0, REG_BINARY, XXXX, 4)
- 批处理如何判断修改和新增复制文件夹下所有文件和子文件夹
- 请问一下大家遇到这种问题都是发如何解决的?
- 帮我把这句操作翻译下
.net or vb6
还有,你想把空行发到最下面?
Inherits DataGridView
Private m_SortDirectFLG As Integer = 1 'm_SortDirectFLG:1 昇順;m_SortDirectFLG:-1 降順
Private m_ColumnHeadName As String = "" '並べ条件
Private m_RowsCount As Integer '行の実際の数
Protected Overrides Sub OnColumnHeaderMouseClick(ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs)
Dim HeadName As String = Me.Columns(e.ColumnIndex).Name.ToString '列名
Dim SortDirect As System.ComponentModel.ListSortDirection '並べ替えの方向
If m_ColumnHeadName = "" OrElse m_ColumnHeadName.Equals(HeadName) = False Then
m_ColumnHeadName = HeadName
m_SortDirectFLG = 1
SortDirect = ListSortDirection.Ascending
ElseIf m_ColumnHeadName.Equals(HeadName) = True Then
m_SortDirectFLG = -1
m_ColumnHeadName = ""
SortDirect = ListSortDirection.Descending
End If
If Me.Columns(0).SortMode = DataGridViewColumnSortMode.Programmatic Then
SetRowCount()
Dim Rcount As Integer = Me.RowCount - 1
For i As Integer = Me.RowCount - 1 To Me.m_RowsCount Step -1
Me.Rows.Remove(Me.Rows(i)) '削除空白行
Next
Sort(New RowComparer(m_SortDirectFLG, e.ColumnIndex, Me.ColumnCount))
For i As Integer = 0 To Rcount - m_RowsCount
Me.Rows.Add() '追加空白行
Next
ElseIf Me.Columns(0).SortMode = DataGridViewColumnSortMode.Automatic Then
Sort(Me.Columns(e.ColumnIndex), SortDirect)
End If
End Sub
''' -----------------------------------------------------------------------------
''' <summary>
''' GridViewの並べ用
''' </summary>
''' <res>
''' </res>
''' -----------------------------------------------------------------------------
Private Class RowComparer
Implements System.Collections.IComparer Private sortOrderModifier As Integer = 1 '並べ替えの方向
Private m_ColumnIndex As Integer = 0 '列のインデックス
Private m_ColumnCount As Integer = 0 '総列数 Public Sub New(ByVal sortIndex As Integer, ByVal ColumnIndex As Integer, ByVal ColumnCount As Integer)
m_ColumnIndex = ColumnIndex
m_ColumnCount = ColumnCount - 1
sortOrderModifier = sortIndex
End Sub
''' -----------------------------------------------------------------------------
''' <summary>
''' テキストの比較
''' </summary>
''' <res>
''' </res>
''' -----------------------------------------------------------------------------
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
Dim DgvRow1 As DataGridViewRow = CType(x, DataGridViewRow)
Dim DgvRow2 As DataGridViewRow = CType(y, DataGridViewRow)
Dim Cindex As Integer = 0
Dim CompareResult As Integer '比較の結果
CompareResult = StrComp(DgvRow1.Cells(m_ColumnIndex).Value, DgvRow2.Cells(m_ColumnIndex).Value, CompareMethod.Text)
If CompareResult = 0 Then
If m_ColumnIndex = 0 Then
For t As Integer = 0 To m_ColumnCount
If StrComp(DgvRow1.Cells(t).Value, DgvRow2.Cells(t).Value, CompareMethod.Text) <> 0 Then
Cindex = t
Exit For
End If
Next
ElseIf m_ColumnIndex = m_ColumnCount Then
For t As Integer = m_ColumnCount To 0 Step -1
If StrComp(DgvRow1.Cells(t).Value, DgvRow2.Cells(t).Value, CompareMethod.Text) <> 0 Then
Cindex = t
Exit For
End If
Next
Else
Dim flg As Boolean = False
For t As Integer = m_ColumnIndex To 0 Step -1
If StrComp(DgvRow1.Cells(t).Value, DgvRow2.Cells(t).Value, CompareMethod.Text) <> 0 Then
Cindex = t
flg = True
Exit For
End If
Next
If flg = False Then
For t As Integer = m_ColumnIndex To m_ColumnCount
If StrComp(DgvRow1.Cells(t).Value, DgvRow2.Cells(t).Value, CompareMethod.Text) <> 0 Then
Cindex = t
flg = True
Exit For
End If
Next
End If
End If
Else
Cindex = m_ColumnIndex
End If
CompareResult = StrComp(DgvRow1.Cells(Cindex).Value, DgvRow2.Cells(Cindex).Value, CompareMethod.Text)
Return CompareResult * sortOrderModifier
End Function
End Class
''' -----------------------------------------------------------------------------
''' <summary>
''' '削除空白行
''' </summary>
''' <res>
''' </res>
''' -----------------------------------------------------------------------------
Protected Sub SetRowCount()
Dim flg As Boolean
m_RowsCount = 0
For j As Integer = 0 To Me.RowCount - 1
For i As Integer = 0 To Me.ColumnCount - 1
If Not IsNothing(Me.Item(i, j).Value) Then
flg = True
Exit For
Else
flg = False
End If
Next
If flg = True Then
m_RowsCount += 1
End If
Next
End Sub
End Class