Share via


DataGridColumnStyle クラス

System.Windows.Forms.DataGrid コントロールの列に関する、外観、テキスト書式、および動作を指定します。このクラスは抽象クラスです。

この型のすべてのメンバの一覧については、DataGridColumnStyle メンバ を参照してください。

System.Object
   System.MarshalByRefObject
      System.ComponentModel.Component
         System.Windows.Forms.DataGridColumnStyle
            System.Windows.Forms.DataGridBoolColumn
            System.Windows.Forms.DataGridTextBoxColumn

MustInherit Public Class DataGridColumnStyle
   Inherits Component
   Implements IDataGridColumnStyleEditingNotificationService
[C#]
public abstract class DataGridColumnStyle : Component,
   IDataGridColumnStyleEditingNotificationService
[C++]
public __gc __abstract class DataGridColumnStyle : public
   Component, IDataGridColumnStyleEditingNotificationService
[JScript]
public abstract class DataGridColumnStyle extends Component
   implements IDataGridColumnStyleEditingNotificationService

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

DataGridColumnStyle オブジェクトのコレクション (GridColumnStylesCollection) は、 System.Windows.Forms.DataGrid コントロールの TableStyles プロパティを通じてアクセスします。

System.Windows.Forms.DataGrid コントロールでは、 DataSource プロパティを適切なデータ ソースに設定すると、 DataGridColumnStyle オブジェクトのコレクションが自動的に作成されます。作成されたオブジェクトは、実際には DataGridColumnStyle クラスから継承された、 DataGridBoolColumn または DataGridTextBoxColumn のいずれかのクラスのインスタンスです。

データ表示の書式を指定するには、 DataGridTextBoxColumn クラスの Format プロパティを書式指定値のいずれかに設定します。有効な書式指定値の詳細については、「 日付と時刻の書式指定文字列 」と「 標準の数値書式指定文字列 」を参照してください。

独自の DataGridColumnStyle オブジェクト セットを作成し、それらのオブジェクトを GridColumnStylesCollection に追加することもできます。この操作を行うときは、各列スタイルの MappingNameDataColumnColumnName に設定して、実際のデータと列の表示を同期させます。

注意   必ず DataGridColumnStyle オブジェクトを作成して GridColumnStylesCollection に追加してから、 DataGridTableStyle オブジェクトを GridTableStylesCollection に追加します。有効な MappingName を指定して空の DataGridTableStyle をコレクションに追加すると、自動的に DataGridColumnStyle オブジェクトが生成されます。そのため、 MappingName 値が重複する新しい DataGridColumnStyle オブジェクトを GridColumnStylesCollection に追加しようとすると、例外がスローされます。

System.Windows.Forms.DataGrid コントロールによって派生クラスのいずれかがインスタンス化される場合、作成されるクラスは、 DataGridColumnStyle オブジェクトに関連付けられた DataColumnDataType によって異なります。たとえば、 DataTypeSystem.Boolean に設定された DataColumn は、 DataGridBoolColumn に関連付けられます。 DataGridColumnStyle の型を確認するには、 GetType メソッドを使用します。

独自の列クラスを作成するには、 DataGridColumnStyle から継承できます。 TextBox コントロールを管理する DataGridTextBox クラスの場合のように、コントロールを管理する特別な列を作成するために独自の列クラスを作成できます。たとえば、 Image コントロールを管理して列にイメージを表示したり、独自のユーザー コントロールを作成して列で管理したりできます。

DataGridColumnStyle の機能は、 DataColumn の機能とは異なります。 DataColumn がデータ テーブルのスキーマの作成に使用するプロパティおよびメソッドを格納しているのに対し、 DataGridColumnStyle は画面上の各列の外観に関連するプロパティおよびメソッドを格納しています。

行が DBNull.Value を格納している場合、列に表示されるテキストは NullText プロパティを使用して設定できます。

DataGridColumnStyle クラスを使用すると、データを変更中に列の動作を指定することもできます。 BeginUpdate メソッドと EndUpdate メソッドは、列のデータに対して大規模な更新が行われている間、一時的に列の描画を中断します。この機能を使用しない場合、グリッドの各セルが変更されるたびに描画されるため、ユーザーがストレスを感じたり、パフォーマンスが低下したりします。

Edit イベント、 Commit イベントなどのメソッドを使用すると、ユーザーが編集する列を監視できます。

このクラスのプロパティおよびメソッドの多くは、列の外観を制御するために使用されます。ただし、 GetColumnValueAtRowSetColumnValueAtRow などのメソッドは、指定したセルの値を調べたり、変更したりできます。

実装時の注意: DataGridColumnStyle から継承する場合は、 AbortCommitEditPaint (2 回) の各メンバをオーバーライドする必要があります。

使用例

[Visual Basic, C#, C++] DateTimePicker コントロールを管理する DataGridColumnStyle を作成する例を次に示します。

 
Imports System
Imports System.Data
Imports System.Windows.Forms
Imports System.Drawing
Imports System.ComponentModel

' This example shows how to create your own column style that
' hosts a control, in this case, a DateTimePicker.
Public Class DataGridTimePickerColumn
    Inherits DataGridColumnStyle

    Private customDateTimePicker1 As New CustomDateTimePicker()

    ' The isEditing field tracks whether or not the user is
    ' editing data with the hosted control.
    Private isEditing As Boolean

    Public Sub New()
        customDateTimePicker1.Visible = False
    End Sub

    Protected Overrides Sub Abort(ByVal rowNum As Integer)
        isEditing = False
        RemoveHandler customDateTimePicker1.ValueChanged, _
            AddressOf TimePickerValueChanged
        Invalidate()
    End Sub

    Protected Overrides Function Commit _
        (ByVal dataSource As CurrencyManager, ByVal rowNum As Integer) _
        As Boolean

        customDateTimePicker1.Bounds = Rectangle.Empty

        RemoveHandler customDateTimePicker1.ValueChanged, _
            AddressOf TimePickerValueChanged

        If Not isEditing Then
            Return True
        End If
        isEditing = False

        Try
            Dim value As DateTime = customDateTimePicker1.Value
            SetColumnValueAtRow(dataSource, rowNum, value)
        Catch
        End Try

        Invalidate()
        Return True
    End Function

    Protected Overloads Overrides Sub Edit( _
        ByVal [source] As CurrencyManager, _
        ByVal rowNum As Integer, _
        ByVal bounds As Rectangle, _
        ByVal [readOnly] As Boolean, _
        ByVal displayText As String, _
        ByVal cellIsVisible As Boolean)

        Dim value As DateTime = _
        CType(GetColumnValueAtRow([source], rowNum), DateTime)
        If cellIsVisible Then
            customDateTimePicker1.Bounds = New Rectangle _
            (bounds.X + 2, bounds.Y + 2, bounds.Width - 4, _
            bounds.Height - 4)

            customDateTimePicker1.Value = value
            customDateTimePicker1.Visible = True
            AddHandler customDateTimePicker1.ValueChanged, _
            AddressOf TimePickerValueChanged
        Else
            customDateTimePicker1.Value = value
            customDateTimePicker1.Visible = False
        End If

        If customDateTimePicker1.Visible Then
            DataGridTableStyle.DataGrid.Invalidate(bounds)
        End If

        customDateTimePicker1.Focus()

    End Sub

    Protected Overrides Function GetPreferredSize( _
        ByVal g As Graphics, _
        ByVal value As Object) As Size

        Return New Size(100, customDateTimePicker1.PreferredHeight + 4)

    End Function

    Protected Overrides Function GetMinimumHeight() As Integer
        Return customDateTimePicker1.PreferredHeight + 4
    End Function

    Protected Overrides Function GetPreferredHeight( _
        ByVal g As Graphics, ByVal value As Object) As Integer

        Return customDateTimePicker1.PreferredHeight + 4

    End Function

    Protected Overloads Overrides Sub Paint( _
        ByVal g As Graphics, ByVal bounds As Rectangle, _
        ByVal [source] As CurrencyManager, ByVal rowNum As Integer)

        Paint(g, bounds, [source], rowNum, False)

    End Sub

    Protected Overloads Overrides Sub Paint(ByVal g As Graphics, _
        ByVal bounds As Rectangle, ByVal [source] As CurrencyManager, _
        ByVal rowNum As Integer, ByVal alignToRight As Boolean)

        Paint(g, bounds, [source], rowNum, Brushes.Red, _
            Brushes.Blue, alignToRight)

    End Sub

    Protected Overloads Overrides Sub Paint(ByVal g As Graphics, _
        ByVal bounds As Rectangle, ByVal [source] As CurrencyManager, _
        ByVal rowNum As Integer, ByVal backBrush As Brush, _
        ByVal foreBrush As Brush, ByVal alignToRight As Boolean)

        Dim [date] As DateTime = _
        CType(GetColumnValueAtRow([source], rowNum), DateTime)
        Dim rect As Rectangle = bounds
        g.FillRectangle(backBrush, rect)
        rect.Offset(0, 2)
        rect.Height -= 2
        g.DrawString([date].ToString("d"), _
            Me.DataGridTableStyle.DataGrid.Font, foreBrush, _
            RectangleF.FromLTRB(rect.X, rect.Y, rect.Right, rect.Bottom))

    End Sub

    Protected Overrides Sub SetDataGridInColumn(ByVal value As DataGrid)
        MyBase.SetDataGridInColumn(value)
        If Not (customDateTimePicker1.Parent Is Nothing) Then
            customDateTimePicker1.Parent.Controls.Remove(customDateTimePicker1)
        End If
        If Not (value Is Nothing) Then
            value.Controls.Add(customDateTimePicker1)
        End If
    End Sub

    Private Sub TimePickerValueChanged( _
        ByVal sender As Object, ByVal e As EventArgs)

        ' Remove the handler to prevent it from being called twice in a row.
        RemoveHandler customDateTimePicker1.ValueChanged, _
            AddressOf TimePickerValueChanged
        Me.isEditing = True
        MyBase.ColumnStartedEditing(customDateTimePicker1)

    End Sub

End Class

Public Class CustomDateTimePicker
    Inherits DateTimePicker

    Protected Overrides Function ProcessKeyMessage(ByRef m As Message) As Boolean
        ' Keep all the keys for the DateTimePicker.
        Return ProcessKeyEventArgs(m)
    End Function

End Class

Public Class MyForm
    Inherits Form

    Private namesDataTable As DataTable
    Private myGrid As DataGrid = New DataGrid()

    Public Sub New()

        InitForm()

        namesDataTable = New DataTable("NamesTable")
        namesDataTable.Columns.Add(New DataColumn("Name"))
        Dim dateColumn As DataColumn = _
             New DataColumn("Date", GetType(DateTime))
        dateColumn.DefaultValue = DateTime.Today
        namesDataTable.Columns.Add(dateColumn)
        Dim namesDataSet As DataSet = New DataSet()
        namesDataSet.Tables.Add(namesDataTable)
        myGrid.DataSource = namesDataSet
        myGrid.DataMember = "NamesTable"
        AddGridStyle()
        AddData()

    End Sub

    Private Sub AddGridStyle()
        Dim myGridStyle As DataGridTableStyle = _
                    New DataGridTableStyle()
        myGridStyle.MappingName = "NamesTable"

        Dim nameColumnStyle As DataGridTextBoxColumn = _
            New DataGridTextBoxColumn()
        nameColumnStyle.MappingName = "Name"
        nameColumnStyle.HeaderText = "Name"
        myGridStyle.GridColumnStyles.Add(nameColumnStyle)

        Dim customDateTimePicker1ColumnStyle As DataGridTimePickerColumn = _
            New DataGridTimePickerColumn()
        customDateTimePicker1ColumnStyle.MappingName = "Date"
        customDateTimePicker1ColumnStyle.HeaderText = "Date"
        customDateTimePicker1ColumnStyle.Width = 100
        myGridStyle.GridColumnStyles.Add(customDateTimePicker1ColumnStyle)

        myGrid.TableStyles.Add(myGridStyle)
    End Sub

    Private Sub AddData()
        Dim dRow As DataRow = namesDataTable.NewRow()
        dRow("Name") = "Name 1"
        dRow("Date") = New DateTime(2001, 12, 1)
        namesDataTable.Rows.Add(dRow)

        dRow = namesDataTable.NewRow()
        dRow("Name") = "Name 2"
        dRow("Date") = New DateTime(2001, 12, 4)
        namesDataTable.Rows.Add(dRow)

        dRow = namesDataTable.NewRow()
        dRow("Name") = "Name 3"
        dRow("Date") = New DateTime(2001, 12, 29)
        namesDataTable.Rows.Add(dRow)

        dRow = namesDataTable.NewRow()
        dRow("Name") = "Name 4"
        dRow("Date") = New DateTime(2001, 12, 13)
        namesDataTable.Rows.Add(dRow)

        dRow = namesDataTable.NewRow()
        dRow("Name") = "Name 5"
        dRow("Date") = New DateTime(2001, 12, 21)
        namesDataTable.Rows.Add(dRow)

        namesDataTable.AcceptChanges()
    End Sub

    Private Sub InitForm()
        Me.Size = New Size(500, 500)
        myGrid.Size = New Size(350, 250)
        myGrid.TabStop = True
        myGrid.TabIndex = 1
        Me.StartPosition = FormStartPosition.CenterScreen
        Me.Controls.Add(myGrid)
    End Sub

    <STAThread()> _
    Public Shared Sub Main()
        Application.Run(New MyForm())
    End Sub

End Class

[C#] 
using System;
using System.Data;
using System.Windows.Forms;
using System.Drawing;

// This example shows how to create your own column style that
// hosts a control, in this case, a DateTimePicker.
public class DataGridTimePickerColumn : DataGridColumnStyle
{
    private CustomDateTimePicker customDateTimePicker1 = 
        new CustomDateTimePicker();

    // The isEditing field tracks whether or not the user is
    // editing data with the hosted control.
    private bool isEditing;

    public DataGridTimePickerColumn() : base()
    {
        customDateTimePicker1.Visible = false;
    }

    protected override void Abort(int rowNum)
    {
        isEditing = false;
        customDateTimePicker1.ValueChanged -=
            new EventHandler(TimePickerValueChanged);
        Invalidate();
    }

    protected override bool Commit
        (CurrencyManager dataSource, int rowNum)
    {
        customDateTimePicker1.Bounds = Rectangle.Empty;

        customDateTimePicker1.ValueChanged -=
            new EventHandler(TimePickerValueChanged);

        if (!isEditing)
            return true;

        isEditing = false;

        try
        {
            DateTime value = customDateTimePicker1.Value;
            SetColumnValueAtRow(dataSource, rowNum, value);
        }
        catch (Exception)
        {
            Abort(rowNum);
            return false;
        }

        Invalidate();
        return true;
    }

    protected override void Edit(
        CurrencyManager source,
        int rowNum,
        Rectangle bounds,
        bool readOnly,
        string displayText,
        bool cellIsVisible)
    {
        DateTime value = (DateTime)
            GetColumnValueAtRow(source, rowNum);
        if (cellIsVisible)
        {
            customDateTimePicker1.Bounds = new Rectangle
                (bounds.X + 2, bounds.Y + 2,
                bounds.Width - 4, bounds.Height - 4);
            customDateTimePicker1.Value = value;
            customDateTimePicker1.Visible = true;
            customDateTimePicker1.ValueChanged +=
                new EventHandler(TimePickerValueChanged);
        }
        else
        {
            customDateTimePicker1.Value = value;
            customDateTimePicker1.Visible = false;
        }

        if (customDateTimePicker1.Visible)
            DataGridTableStyle.DataGrid.Invalidate(bounds);

        customDateTimePicker1.Focus();
    }

    protected override Size GetPreferredSize(
        Graphics g,
        object value)
    {
        return new Size(100, customDateTimePicker1.PreferredHeight + 4);
    }

    protected override int GetMinimumHeight()
    {
        return customDateTimePicker1.PreferredHeight + 4;
    }

    protected override int GetPreferredHeight(Graphics g,
        object value)
    {
        return customDateTimePicker1.PreferredHeight + 4;
    }

    protected override void Paint(Graphics g,
        Rectangle bounds,
        CurrencyManager source,
        int rowNum)
    {
        Paint(g, bounds, source, rowNum, false);
    }

    protected override void Paint(
        Graphics g,
        Rectangle bounds,
        CurrencyManager source,
        int rowNum,
        bool alignToRight)
    {
        Paint(
            g, bounds,
            source,
            rowNum,
            Brushes.Red,
            Brushes.Blue,
            alignToRight);
    }

    protected override void Paint(
        Graphics g,
        Rectangle bounds,
        CurrencyManager source,
        int rowNum,
        Brush backBrush,
        Brush foreBrush,
        bool alignToRight)
    {
        DateTime date = (DateTime)
            GetColumnValueAtRow(source, rowNum);
        Rectangle rect = bounds;
        g.FillRectangle(backBrush, rect);
        rect.Offset(0, 2);
        rect.Height -= 2;
        g.DrawString(date.ToString("d"),
            this.DataGridTableStyle.DataGrid.Font,
            foreBrush, rect);
    }

    protected override void SetDataGridInColumn(DataGrid value)
    {
        base.SetDataGridInColumn(value);
        if (customDateTimePicker1.Parent != null)
        {
            customDateTimePicker1.Parent.Controls.Remove
                (customDateTimePicker1);
        }
        if (value != null)
        {
            value.Controls.Add(customDateTimePicker1);
        }
    }

    private void TimePickerValueChanged(object sender, EventArgs e)
    {
        // Remove the handler to prevent it from being called twice in a row.
        customDateTimePicker1.ValueChanged -=
            new EventHandler(TimePickerValueChanged);
        this.isEditing = true;
        base.ColumnStartedEditing(customDateTimePicker1);
    }
}

public class CustomDateTimePicker : DateTimePicker
{
    protected override bool ProcessKeyMessage(ref Message m)
    {
        // Keep all the keys for the DateTimePicker.
        return ProcessKeyEventArgs(ref m);
    }
}

public class MyForm : Form
{
    private DataTable namesDataTable;
    private DataGrid grid = new DataGrid();
    public MyForm() : base()
    {
        InitForm();

        namesDataTable = new DataTable("NamesTable");
        namesDataTable.Columns.Add(new DataColumn("Name"));
        DataColumn dateColumn = new DataColumn
            ("Date", typeof(DateTime));
        dateColumn.DefaultValue = DateTime.Today;
        namesDataTable.Columns.Add(dateColumn);
        DataSet namesDataSet = new DataSet();
        namesDataSet.Tables.Add(namesDataTable);
        grid.DataSource = namesDataSet;
        grid.DataMember = "NamesTable";
        AddGridStyle();
        AddData();
    }

    private void AddGridStyle()
    {
        DataGridTableStyle myGridStyle = new DataGridTableStyle();
        myGridStyle.MappingName = "NamesTable";

        DataGridTextBoxColumn nameColumnStyle =
            new DataGridTextBoxColumn();
        nameColumnStyle.MappingName = "Name";
        nameColumnStyle.HeaderText = "Name";
        myGridStyle.GridColumnStyles.Add(nameColumnStyle);

        DataGridTimePickerColumn timePickerColumnStyle =
            new DataGridTimePickerColumn();
        timePickerColumnStyle.MappingName = "Date";
        timePickerColumnStyle.HeaderText = "Date";
        timePickerColumnStyle.Width = 100;
        myGridStyle.GridColumnStyles.Add(timePickerColumnStyle);

        grid.TableStyles.Add(myGridStyle);
    }

    private void AddData()
    {

        DataRow dRow = namesDataTable.NewRow();
        dRow["Name"] = "Name 1";
        dRow["Date"] = new DateTime(2001, 12, 01);
        namesDataTable.Rows.Add(dRow);

        dRow = namesDataTable.NewRow();
        dRow["Name"] = "Name 2";
        dRow["Date"] = new DateTime(2001, 12, 04);
        namesDataTable.Rows.Add(dRow);

        dRow = namesDataTable.NewRow();
        dRow["Name"] = "Name 3";
        dRow["Date"] = new DateTime(2001, 12, 29);
        namesDataTable.Rows.Add(dRow);

        dRow = namesDataTable.NewRow();
        dRow["Name"] = "Name 4";
        dRow["Date"] = new DateTime(2001, 12, 13);
        namesDataTable.Rows.Add(dRow);

        dRow = namesDataTable.NewRow();
        dRow["Name"] = "Name 5";
        dRow["Date"] = new DateTime(2001, 12, 21);
        namesDataTable.Rows.Add(dRow);

        namesDataTable.AcceptChanges();
    }

    private void InitForm()
    {
        this.Size = new Size(500, 500);
        grid.Size = new Size(350, 250);
        grid.TabStop = true;
        grid.TabIndex = 1;
        this.StartPosition = FormStartPosition.CenterScreen;
        this.Controls.Add(grid);
    }
 
    [STAThread]
    public static void Main()
    {
        MyForm myForm1 = new MyForm();
        myForm1.ShowDialog();
    }
}

[C++] 
#using <mscorlib.dll>
#using <System.dll>
#using <System.Drawing.dll>
#using <System.Windows.Forms.dll>
#using <System.Data.dll>
#using <System.Xml.dll>
using namespace System;
using namespace System::Data;
using namespace System::Windows::Forms;
using namespace System::Drawing;

// This example shows how to create your own column style that
// hosts a control, in this case, a DateTimePicker.
public __gc class CustomDateTimePicker : public DateTimePicker
{
protected:
    bool ProcessKeyMessage(Message* m)
    {
        // Keep all the keys for the DateTimePicker.
        return ProcessKeyEventArgs(m);
    }
};

public __gc class DataGridTimePickerColumn : public DataGridColumnStyle
{
private:
    CustomDateTimePicker* customDateTimePicker1;

    // The isEditing field tracks whether or not the user is
    // editing data with the hosted control.
    bool isEditing;

public:
    DataGridTimePickerColumn()
    {
        customDateTimePicker1 = new CustomDateTimePicker();
        customDateTimePicker1->Visible = false;
    }

protected:
    void Abort(int /*rowNum*/)
    {
        isEditing = false;
        customDateTimePicker1->ValueChanged -=
            new EventHandler(this, &DataGridTimePickerColumn::TimePickerValueChanged);
        Invalidate();
    }

protected:
    bool Commit
        (CurrencyManager* dataSource, int rowNum)
    {
        customDateTimePicker1->Bounds = Rectangle::Empty;

        customDateTimePicker1->ValueChanged -=
            new EventHandler(this, &DataGridTimePickerColumn::TimePickerValueChanged);

        if (!isEditing)
            return true;

        isEditing = false;

        try
        {
            DateTime value = customDateTimePicker1->Value;
            SetColumnValueAtRow(dataSource, rowNum,__box(value));
        }
        catch (Exception*)
        {
            Abort(rowNum);
            return false;
        }

        Invalidate();
        return true;
    }

protected:
    void Edit(
        CurrencyManager* source,
        int rowNum,
        Rectangle bounds,
        bool /*readOnly*/,
        String* /*displayText*/,
        bool cellIsVisible)
    {
        DateTime value = *dynamic_cast<DateTime*>(GetColumnValueAtRow(source, rowNum));
        if (cellIsVisible)
        {
            customDateTimePicker1->Bounds = Rectangle
                (bounds.X + 2, bounds.Y + 2,
                bounds.Width - 4, bounds.Height - 4);
            customDateTimePicker1->Value = value;
            customDateTimePicker1->Visible = true;
            customDateTimePicker1->ValueChanged +=
                new EventHandler(this, &DataGridTimePickerColumn::TimePickerValueChanged);
        }
        else
        {
            customDateTimePicker1->Value = value;
            customDateTimePicker1->Visible = false;
        }

        if (customDateTimePicker1->Visible)
            DataGridTableStyle->DataGrid->Invalidate(bounds);

        customDateTimePicker1->Focus();
    }

protected:
    Size GetPreferredSize(
        Graphics* /*g*/,
        Object* /*value*/)
    {
        return Size(100, customDateTimePicker1->PreferredHeight + 4);
    }

protected:
    int GetMinimumHeight()
    {
        return customDateTimePicker1->PreferredHeight + 4;
    }

protected:
    int GetPreferredHeight(Graphics* /*g*/,
        Object* /*value*/)
    {
        return customDateTimePicker1->PreferredHeight + 4;
    }

protected:
    void Paint(Graphics* g,
        Rectangle bounds,
        CurrencyManager* source,
        int rowNum)
    {
        Paint(g, bounds, source, rowNum, false);
    }

protected:
    void Paint(
        Graphics* g,
        Rectangle bounds,
        CurrencyManager* source,
        int rowNum,
        bool alignToRight)
    {
        Paint(
            g, bounds,
            source,
            rowNum,
            Brushes::Red,
            Brushes::Blue,
            alignToRight);
    }

protected:
    void Paint(
        Graphics* g,
        Rectangle bounds,
        CurrencyManager* source,
        int rowNum,
        Brush* backBrush,
        Brush* foreBrush,
        bool /*alignToRight*/)
    {
        DateTime date = *dynamic_cast<DateTime*>(GetColumnValueAtRow(source, rowNum));
        Rectangle rect = bounds;
        g->FillRectangle(backBrush, rect);
        rect.Offset(0, 2);
        rect.Height -= 2;
        g->DrawString(date.ToString(S"d"),
            this->DataGridTableStyle->DataGrid->Font,
            foreBrush, RectangleF::op_Implicit(rect));
    }

protected:
    void SetDataGridInColumn(DataGrid* value)
    {
        DataGridColumnStyle::SetDataGridInColumn(value);
        if (customDateTimePicker1->Parent != 0)
        {
            customDateTimePicker1->Parent->Controls->Remove
                (customDateTimePicker1);
        }
        if (value != 0)
        {
            value->Controls->Add(customDateTimePicker1);
        }
    }

private:
    void TimePickerValueChanged(Object* /*sender*/, EventArgs* /*e*/)
    {
        // Remove the handler to prevent it from being called twice in a row.
        customDateTimePicker1->ValueChanged -=
            new EventHandler(this, &DataGridTimePickerColumn::TimePickerValueChanged);
        this->isEditing = true;
        DataGridColumnStyle::ColumnStartedEditing(customDateTimePicker1);
    }
};

public __gc class MyForm : public Form
{
private:
    DataTable* namesDataTable;
    DataGrid* grid;
public:
    MyForm()
    {
        grid = new DataGrid();
        InitForm();

        namesDataTable = new DataTable(S"NamesTable");
        namesDataTable->Columns->Add(new DataColumn(S"Name"));
        DataColumn* dateColumn = new DataColumn
            (S"Date", __typeof(DateTime));
        dateColumn->DefaultValue = __box(DateTime::Today);
        namesDataTable->Columns->Add(dateColumn);
        DataSet* namesDataSet = new DataSet();
        namesDataSet->Tables->Add(namesDataTable);
        grid->DataSource = namesDataSet;
        grid->DataMember = S"NamesTable";
        AddGridStyle();
        AddData();
    }

private:
    void AddGridStyle()
    {
        DataGridTableStyle* myGridStyle = new DataGridTableStyle();
        myGridStyle->MappingName = S"NamesTable";

        DataGridTextBoxColumn* nameColumnStyle =
            new DataGridTextBoxColumn();
        nameColumnStyle->MappingName = S"Name";
        nameColumnStyle->HeaderText = S"Name";
        myGridStyle->GridColumnStyles->Add(nameColumnStyle);

        DataGridTimePickerColumn* timePickerColumnStyle =
            new DataGridTimePickerColumn();
        timePickerColumnStyle->MappingName = S"Date";
        timePickerColumnStyle->HeaderText = S"Date";
        timePickerColumnStyle->Width = 100;
        myGridStyle->GridColumnStyles->Add(timePickerColumnStyle);

        grid->TableStyles->Add(myGridStyle);
    }

private:
    void AddData()
    {

        DataRow* dRow = namesDataTable->NewRow();
        dRow->Item[S"Name"] = S"Name 1";
        dRow->Item[S"Date"] = __box(DateTime(2001, 12, 01));
        namesDataTable->Rows->Add(dRow);

        dRow = namesDataTable->NewRow();
        dRow->Item[S"Name"] = S"Name 2";
        dRow->Item[S"Date"] = __box(DateTime(2001, 12, 04));
        namesDataTable->Rows->Add(dRow);

        dRow = namesDataTable->NewRow();
        dRow->Item[S"Name"] = S"Name 3";
        dRow->Item[S"Date"] = __box(DateTime(2001, 12, 29));
        namesDataTable->Rows->Add(dRow);

        dRow = namesDataTable->NewRow();
        dRow->Item[S"Name"] = S"Name 4";
        dRow->Item[S"Date"] = __box(DateTime(2001, 12, 13));
        namesDataTable->Rows->Add(dRow);

        dRow = namesDataTable->NewRow();
        dRow->Item[S"Name"] = S"Name 5";
        dRow->Item[S"Date"] = __box(DateTime(2001, 12, 21));
        namesDataTable->Rows->Add(dRow);

        namesDataTable->AcceptChanges();
    }

private:
    void InitForm()
    {
        this->Size = System::Drawing::Size(500, 500);
        grid->Size = System::Drawing::Size(350, 250);
        grid->TabStop = true;
        grid->TabIndex = 1;
        this->StartPosition = FormStartPosition::CenterScreen;
        this->Controls->Add(grid);
    }
};

[STAThread]
int main()
{
    MyForm* myForm1 = new MyForm();
    myForm1->ShowDialog();
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Windows.Forms

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

アセンブリ: System.Windows.Forms (System.Windows.Forms.dll 内)

参照

DataGridColumnStyle メンバ | System.Windows.Forms 名前空間 | DataColumn | DataGrid | DataGridBoolColumn | DataGridTextBox | DataGridTableStyle | DataView | GridColumnStylesCollection