- 題名: DataGridのスタイルに関して
- 日時: 2003/12/16 10:46:57
- ID: 1847
- この記事の返信元: - (なし)
 
- この記事への返信: - [1903] Re[1]: DataGridのスタイルに関して2003/12/19 23:35:12
 
- ツリーを表示
■No1921に返信(TYさんの記事)
前回の投稿後考え付いたのですが、
> @列ヘッダーテキストの横配置を中央にすることはできないか
>  (データの配置は右詰あるいは左詰のまま)
について、ヘッダの配列はAlignmentに任せ、データ部分の配列をPaintメソッドを
オーバーライドして自分で描画することによりどうにかするというのはどうでしょうか。
この考え方でDataGridTextBoxColumnからの派生クラスを作ってみました。
データの配置をDataAlignmentプロパティで設定できるようになっています。
お気づきの点がありましたら、教えてください。
(ここから)---------------------------
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Data;
namespace Dobon.Samples.Forms
{
    public class MyDataGridTextBoxColumn : DataGridTextBoxColumn
    {
        Point _margin = new Point(0, 1);  
        HorizontalAlignment _dataAlignment = HorizontalAlignment.Left;
        public HorizontalAlignment DataAlignment
        {
            get
            {
                return _dataAlignment;
            }
            set
            {
                _dataAlignment = value;
            }
        }
        protected override void Edit(
            CurrencyManager source,
            int rowNum,
            Rectangle bounds,
            bool readOnly,
            string instantText,
            bool cellIsVisible)
        {
            base.Edit(source, rowNum, bounds, readOnly,
                instantText, cellIsVisible);
            this.TextBox.TextAlign = _dataAlignment;
        }
        protected override void Paint(
            Graphics g,
            Rectangle bounds,
            CurrencyManager source,
            int rowNum,
            Brush backBrush,
            Brush foreBrush,
            bool alignToRight)
        {
            string text = GetColumnValueAtRow(source, rowNum).ToString();
            StringFormat sf = new StringFormat();
            switch (_dataAlignment)
            {
                case HorizontalAlignment.Left:
                    sf.Alignment = StringAlignment.Near;
                    break;
                case HorizontalAlignment.Center:
                    sf.Alignment = StringAlignment.Center;
                    break;
                case HorizontalAlignment.Right:
                    sf.Alignment = StringAlignment.Far;
                    break;
            }
            sf.FormatFlags = StringFormatFlags.NoWrap;
            if (alignToRight)
                sf.FormatFlags |= StringFormatFlags.DirectionRightToLeft;
            Rectangle rect = bounds;
            g.FillRectangle(backBrush, rect);
            
            rect.Offset(_margin);
            rect.Inflate(-_margin.X * 2, -_margin.Y * 2);
            g.DrawString(text, this.DataGridTableStyle.DataGrid.Font,
                foreBrush, (RectangleF) rect, sf);
            sf.Dispose();
        }
    }
}
DataGridのスタイルに関してですが,以下のことはできないものでしょうか?
@列ヘッダーテキストの横配置を中央にすることはできないか
(データの配置は右詰あるいは左詰のまま)
A行ヘッダーテキストを任意に設定する(例えば1,2,3など)ことはできないか
非常に初歩的な質問ですみません.