DataGridView控件用法合集(六)

近期将DataGridView常用的一些用法做了一个整理。为防止页面过长,现分批贴出来,此为第六部分。

DataGridView排序


29. DataGridView行排序(点击列表头自动排序的设置)
30. DataGridView自动行排序(新追加值也会自动排序)
31. DataGridView自动行排序禁止情况下的排序
32. DataGridView指定列指定排序

29. DataGridView行排序(点击列表头自动排序的设置)

[VB.NET]

'並び替えができないようにする

For Each c As DataGridViewColumn In DataGridView1.Columns

c.sortMode = DataGridViewColumnSortMode.NotSortable

Next c

[C#]

//並び替えができないようにする

foreach (DataGridViewColumn c in DataGridView1.Columns)

c.sortMode = DataGridViewColumnSortMode.NotSortable;

30. DataGridView自动行排序(新追加值也会自动排序)

[VB.NET]

'フォームのLoadイベントハンドラ

Private Sub Form1_Load(ByVal sender As System.Object,_

ByVal e As System.EventArgs) Handles MyBase.Load

'自動的に並び替えられるようにする

Dim c As DataGridViewColumn

For Each c In DataGridView1.Columns

c.sortMode = DataGridViewColumnSortMode.Automatic

Next c

End Sub

'Button1のClickイベントハンドラ

Private Sub Button1_Click(ByVal sender As System.Object,_

ByVal e As System.EventArgs) Handles Button1.Click

If DataGridView1.CurrentCell Is nothing Then

Return

End If

'並び替える列を決める

Dim sortColumn As DataGridViewColumn = _

DataGridView1.CurrentCell.OwningColumn

'並び替えの方向(昇順か降順か)を決める

Dim sortDirection As System.ComponentModel.ListSortDirection = _

System.ComponentModel.ListSortDirection.Ascending

If Not (DataGridView1.sortedColumn Is nothing) AndAlso _

DataGridView1.sortedColumn.Equals(sortColumn) Then

sortDirection = IIf(DataGridView1.sortOrder = SortOrder.Ascending,_

System.ComponentModel.ListSortDirection.Descending,_

System.ComponentModel.ListSortDirection.Ascending)

End If

'並び替えを行う

DataGridView1.sort(sortColumn,sortDirection)

End Sub

[C#]

//フォームのLoadイベントハンドラ

private void Form1_Load(object sender,EventArgs e)

{

//自動的に並び替えられるようにする

foreach (DataGridViewColumn c in DataGridView1.Columns)

c.sortMode = DataGridViewColumnSortMode.Automatic;

}

//Button1のClickイベントハンドラ

private void Button1_Click(object sender,EventArgs e)

{

if (DataGridView1.CurrentCell == null)

return;

//並び替える列を決める

DataGridViewColumn sortColumn = DataGridView1.CurrentCell.OwningColumn;

//並び替えの方向(昇順か降順か)を決める

ListSortDirection sortDirection = ListSortDirection.Ascending;

if (DataGridView1.sortedColumn != null &&

DataGridView1.sortedColumn.Equals(sortColumn))

{

sortDirection =

DataGridView1.sortOrder == SortOrder.Ascending ?

ListSortDirection.Descending : ListSortDirection.Ascending;

}

//並び替えを行う

DataGridView1.sort(sortColumn,sortDirection);

}

31. DataGridView自动行排序禁止情况下的排序

'ColumnHeaderMouseClickイベントハンドラ

Private Sub DataGridView1_ColumnHeaderMouseClick(ByVal sender As Object,_

ByVal e As DataGridViewCellMouseEventArgs) _

Handles DataGridView1.ColumnHeaderMouseClick

Dim clickedColumn As DataGridViewColumn = _

DataGridView1.Columns(e.ColumnIndex)

If clickedColumn.sortMode <> DataGridViewColumnSortMode.Automatic Then

Me.sortRows(clickedColumn,True)

End If

End Sub

'RowsAddedイベントハンドラ

Private Sub DataGridView1_RowsAdded(ByVal sender As Object,_

ByVal e As DataGridViewRowsAddedEventArgs) _

Handles DataGridView1.RowsAdded

Me.sortRows(DataGridView1.sortedColumn,False)

End Sub

'CellValueChangedイベントハンドラ

Private Sub DataGridView1_CellValueChanged(ByVal sender As Object,_

ByVal e As DataGridViewCellEventArgs) _

Handles DataGridView1.CellValueChanged

If Not (DataGridView1.sortedColumn Is nothing) AndAlso _

e.ColumnIndex = DataGridView1.sortedColumn.Index Then

Me.sortRows(DataGridView1.sortedColumn,False)

End If

End Sub

''' <summary>

''' 指定された列を基準にして並び替えを行う

''' </summary>

''' <param name="sortColumn">基準にする列</param>

''' <param name="orderToggle">並び替えの方向をトグルで変更する</param>

Private Sub SortRows(ByVal sortColumn As DataGridViewColumn,_

ByVal orderToggle As Boolean)

If sortColumn Is nothing Then

Return

End If

'今までの並び替えグリフを消す

If sortColumn.sortMode = DataGridViewColumnSortMode.Programmatic AndAlso _

Not (DataGridView1.sortedColumn Is nothing) AndAlso _

Not DataGridView1.sortedColumn.Equals(sortColumn) Then

DataGridView1.sortedColumn.HeaderCell.sortGlyphDirection = _

SortOrder.None

End If

'並び替えの方向(昇順か降順か)を決める

Dim sortDirection As System.ComponentModel.ListSortDirection

If orderToggle Then

sortDirection = IIf(DataGridView1.sortOrder = SortOrder.Descending,_

System.ComponentModel.ListSortDirection.Ascending,_

System.ComponentModel.ListSortDirection.Descending)

Else

sortDirection = IIf(DataGridView1.sortOrder = SortOrder.Descending,_

System.ComponentModel.ListSortDirection.Ascending)

End If

Dim sOrder As SortOrder = _

IIf(sortDirection = System.ComponentModel.ListSortDirection.Ascending,_

SortOrder.Ascending,SortOrder.Descending)

'並び替えを行う

DataGridView1.sort(sortColumn,sortDirection)

If sortColumn.sortMode = DataGridViewColumnSortMode.Programmatic Then

'並び替えグリフを変更

sortColumn.HeaderCell.sortGlyphDirection = sOrder

End If

End Sub

[C#]

//フォームのLoadイベントハンドラ

private void Form1_Load(object sender,EventArgs e)

{

//イベントハンドラの追加

DataGridView1.RowsAdded += new DataGridViewRowsAddedEventHandler(

DataGridView1_RowsAdded);

DataGridView1.CellValueChanged += new DataGridViewCellEventHandler(

DataGridView1_CellValueChanged);

DataGridView1.ColumnHeaderMouseClick += new DataGridViewCellMouseEventHandler(

DataGridView1_ColumnHeaderMouseClick);

}

//ColumnHeaderMouseClickイベントハンドラ

private void DataGridView1_ColumnHeaderMouseClick(object sender,

DataGridViewCellMouseEventArgs e)

{

DataGridViewColumn clickedColumn = DataGridView1.Columns[e.ColumnIndex];

if (clickedColumn.sortMode != DataGridViewColumnSortMode.Automatic)

this.sortRows(clickedColumn,true);

}

//RowsAddedイベントハンドラ

private void DataGridView1_RowsAdded(object sender,

DataGridViewRowsAddedEventArgs e)

{

this.sortRows(DataGridView1.sortedColumn,false);

}

//CellValueChangedイベントハンドラ

private void DataGridView1_CellValueChanged(object sender,

DataGridViewCellEventArgs e)

{

if (DataGridView1.sortedColumn != null &&

e.ColumnIndex == DataGridView1.sortedColumn.Index)

this.sortRows(DataGridView1.sortedColumn,false);

}

/// <summary>

/// 指定された列を基準にして並び替えを行う

/// </summary>

/// <param name="sortColumn">基準にする列</param>

/// <param name="orderToggle">並び替えの方向をトグルで変更する</param>

private void SortRows(DataGridViewColumn sortColumn,bool orderToggle)

{

if (sortColumn == null)

return;

//今までの並び替えグリフを消す

if (sortColumn.sortMode == DataGridViewColumnSortMode.Programmatic &&

DataGridView1.sortedColumn != null &&

!DataGridView1.sortedColumn.Equals(sortColumn))

{

DataGridView1.sortedColumn.HeaderCell.sortGlyphDirection =

SortOrder.None;

}

//並び替えの方向(昇順か降順か)を決める

ListSortDirection sortDirection;

if (orderToggle)

{

sortDirection =

DataGridView1.sortOrder == SortOrder.Descending ?

ListSortDirection.Ascending : ListSortDirection.Descending;

}

else

{

sortDirection =

DataGridView1.sortOrder == SortOrder.Descending ?

ListSortDirection.Descending : ListSortDirection.Ascending;

}

SortOrder sortOrder =

sortDirection == ListSortDirection.Ascending ?

SortOrder.Ascending : SortOrder.Descending;

//並び替えを行う

DataGridView1.sort(sortColumn,sortDirection);

if (sortColumn.sortMode == DataGridViewColumnSortMode.Programmatic)

{

//並び替えグリフを変更

sortColumn.HeaderCell.sortGlyphDirection = sortOrder;

}

}

32. DataGridView指定列指定排序

[VB.NET]

'DataGridView1にバインドされているDataTableを取得

Dim dt As DataTable = CType(DataGridView1.DataSource,DataTable)

'DataViewを取得

Dim dv As DataView = dt.defaultview

'Column1とColumn2で昇順に並び替える

dv.sort = "Column1,Column2 ASC"

'2つの列のヘッダーに並び替えグリフを表示する

DataGridView1.Columns("Column1").HeaderCell.sortGlyphDirection = _

SortOrder.Ascending

DataGridView1.Columns("Column2").HeaderCell.sortGlyphDirection = _

SortOrder.Ascending

[C#]

//DataGridView1にバインドされているDataTableを取得

DataTable dt = (DataTable)DataGridView1.DataSource;

//DataViewを取得

DataView dv = dt.defaultview;

//Column1とColumn2で昇順に並び替える

dv.sort = "Column1,Column2 ASC";

//2つの列のヘッダーに並び替えグリフを表示する

DataGridView1.Columns["Column1"].HeaderCell.sortGlyphDirection =

SortOrder.Ascending;

DataGridView1.Columns["Column2"].HeaderCell.sortGlyphDirection =

SortOrder.Ascending;

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...