データソースとしてDataTableを持つDataGridViewがあります。 列をソートしてからセルを編集すると、その列を編集した後に列が自動的にソートされるため、最近編集されたセルは表示されなくなります。この自動並べ替えが起こらないようにする方法はありますか?列をクリックするだけですか?バインドされたDataGridViewを編集した後の列の自動並べ替えの防止
事前に感謝します。
Daryn
データソースとしてDataTableを持つDataGridViewがあります。 列をソートしてからセルを編集すると、その列を編集した後に列が自動的にソートされるため、最近編集されたセルは表示されなくなります。この自動並べ替えが起こらないようにする方法はありますか?列をクリックするだけですか?バインドされたDataGridViewを編集した後の列の自動並べ替えの防止
事前に感謝します。
Daryn
これが動作するかどうか、私は知りませんが、それはそれは可能性がありますように聞こえます。
セルが編集用に選択されているときに各列(DataGridView.Columns(1).SortMode)のSortModeをProgrammaticまたはNotSortableに設定し、編集が完了したら自動に設定してみてください。
ソートを防止する方法はありませんが、更新前にグリッドの行、列、ソートの値を保存し、更新後に復元することができます。ここで
は、私が使用するコードの一部です:
Friend Sub refreshGrid()
Dim row As Integer
Dim col As Integer
Dim gridCol As Integer
Dim gridColsToHide As Integer
Dim rowCountOrig As Integer
Dim rowCountNew As Integer
row = dgvReadOnly.CurrentRow.Index
col = dgvReadOnly.CurrentCell.ColumnIndex
Dim sortVal As String
sortVal = _setSource.DefaultView.Sort
rowCountOrig = _setSource.Rows.Count
_setSource = _displaySet.displaySetTable
rowCountNew = _setSource.Rows.Count
setRowFilter()
_setSource.DefaultView.Sort = sortVal
If (rowCountNew > rowCountOrig) Then ' added new row
row = dgvReadOnly.RowCount - 1 ' new row is at bottom of grid, but skip * row
End If
dgvReadOnly.DataSource = Nothing
dgvReadOnly.DataSource = _setSource
If row >= dgvReadOnly.RowCount - 1 Then ' after delete
row = dgvReadOnly.RowCount - 2
End If
If row >= 0 Then ' if didn't delete all rows matching filter
dgvReadOnly.CurrentCell = dgvReadOnly(col, row)
End If
End Sub