微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐