Imports C1.Win.C1FlexGrid
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' FlexGridの設定
C1FlexGrid1.AllowSorting = AllowSortingEnum.SingleColumn
C1FlexGrid1.Glyphs(GlyphEnum.Ascending) = Image.FromFile("ascending.png")
C1FlexGrid1.Glyphs(GlyphEnum.Descending) = Image.FromFile("descending.png")
C1FlexGrid1.ShowSortPosition = ShowSortPositionEnum.Right ' 有効にならない
' データの設定
C1FlexGrid1(1, 1) = "A1"
C1FlexGrid1(2, 1) = "A2"
' 回避方法
C1FlexGrid1.ShowSort = False
C1FlexGrid1.DrawMode = DrawModeEnum.OwnerDraw
End Sub
Private Sub C1FlexGrid1_OwnerDrawCell(sender As Object, e As OwnerDrawCellEventArgs) Handles C1FlexGrid1.OwnerDrawCell
Dim grid As C1FlexGrid = CType(sender, C1FlexGrid)
' ヘッダセルのみ対象
If e.Row = grid.Cols.Fixed Then
' デフォルト描画
e.DrawCell()
' ソート中の列ならアイコンを右端に描画
If grid.Cols(e.Col).Sort <> SortFlags.None Then
Dim glyph As Image = Nothing
If grid.Cols(e.Col).Sort = SortFlags.Ascending Then
glyph = grid.Glyphs(GlyphEnum.Ascending)
ElseIf grid.Cols(e.Col).Sort = SortFlags.Descending Then
glyph = grid.Glyphs(GlyphEnum.Descending)
End If
If glyph IsNot Nothing Then
Dim rc As Rectangle = e.Bounds
Dim x As Integer = rc.Right - glyph.Width - 2 ' 右端に寄せる
Dim y As Integer = rc.Top + (rc.Height - glyph.Height) \ 2
e.Graphics.DrawImage(glyph, x, y, glyph.Width, glyph.Height)
End If
End If
e.Handled = True ' 独自描画を適用
End If
End Sub
End Class
◎サンプルコード(C#)
using C1.Win.C1FlexGrid;
namespace prj_C1FlexGrid
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// FlexGridの設定
c1FlexGrid1.AllowSorting = AllowSortingEnum.SingleColumn;
c1FlexGrid1.Glyphs[GlyphEnum.Ascending] = Image.FromFile("ascending.png");
c1FlexGrid1.Glyphs[GlyphEnum.Descending] = Image.FromFile("descending.png");
c1FlexGrid1.ShowSortPosition = ShowSortPositionEnum.Right; //有効にならない
// データの設定
c1FlexGrid1[1, 1] = "A1";
c1FlexGrid1[2, 1] = "A2";
// 回避方法
c1FlexGrid1.ShowSort = false;
c1FlexGrid1.DrawMode = DrawModeEnum.OwnerDraw;
}
private void c1FlexGrid1_OwnerDrawCell(object sender, OwnerDrawCellEventArgs e)
{
var grid = (C1FlexGrid)sender;
// ヘッダセルのみ対象
if (e.Row = grid.Cols.Fixed)
{
// デフォルト描画
e.DrawCell();
// ソート中の列ならアイコンを右端に描画
if (grid.Cols[e.Col].Sort != SortFlags.None)
{
Image glyph = null;
if (grid.Cols[e.Col].Sort == SortFlags.Ascending)
glyph = grid.Glyphs[GlyphEnum.Ascending];
else if (grid.Cols[e.Col].Sort == SortFlags.Descending)
glyph = grid.Glyphs[GlyphEnum.Descending];
if (glyph != null)
{
Rectangle rc = e.Bounds;
int x = rc.Right - glyph.Width - 2; // 右端に寄せる
int y = rc.Top + (rc.Height - glyph.Height) / 2;
e.Graphics.DrawImage(glyph, x, y, glyph.Width, glyph.Height);
}
}
e.Handled = true; // 独自描画を適用
}
}
}
}