现在的位置: 首页 > 综合 > 正文

DataGridView控件用法合集(六)

2013年03月06日 ⁄ 综合 ⁄ 共 8007字 ⁄ 字号 评论关闭
近期将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.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;

抱歉!评论已关闭.