Freigeben über


DataGridColumnStyle Klasse

Definition

Gibt die Darstellung, die Textformatierung und das Verhalten einer DataGrid-Steuerelementspalte an. Diese Klasse ist abstrakt.

public ref class DataGridColumnStyle abstract : System::ComponentModel::Component, System::Windows::Forms::IDataGridColumnStyleEditingNotificationService
public abstract class DataGridColumnStyle : System.ComponentModel.Component, System.Windows.Forms.IDataGridColumnStyleEditingNotificationService
type DataGridColumnStyle = class
    inherit Component
    interface IDataGridColumnStyleEditingNotificationService
Public MustInherit Class DataGridColumnStyle
Inherits Component
Implements IDataGridColumnStyleEditingNotificationService
Vererbung
DataGridColumnStyle
Abgeleitet
Implementiert

Beispiele

Im folgenden Codebeispiel wird ein DataGridColumnStyle erstellt, das ein DateTimePicker -Steuerelement hostet.

#using <System.dll>
#using <System.Data.dll>
#using <System.Drawing.dll>
#using <System.Windows.Forms.dll>
#using <System.Xml.dll>

using namespace System;
using namespace System::Data;
using namespace System::Windows::Forms;
using namespace System::Drawing;
using namespace System::Security::Permissions;

// This example shows how to create your own column style that
// hosts a control, in this case, a DateTimePicker.

public ref class CustomDateTimePicker : public DateTimePicker
{
protected:
    [SecurityPermission(SecurityAction::Demand, Flags=SecurityPermissionFlag::UnmanagedCode)]
    virtual bool ProcessKeyMessage( Message% m ) override
    {
        // Keep all the keys for the DateTimePicker.
        return ProcessKeyEventArgs( m );
    }
};

public ref 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 = gcnew CustomDateTimePicker;
      customDateTimePicker1->Visible = false;
   }

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

   virtual bool Commit( CurrencyManager^ dataSource, int rowNum ) override
   {
      customDateTimePicker1->Bounds = Rectangle::Empty;

      customDateTimePicker1->ValueChanged -=
         gcnew EventHandler( this, &DataGridTimePickerColumn::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;
   }

   virtual void Edit(
      CurrencyManager^ source,
      int rowNum,
      Rectangle bounds,
      bool /*readOnly*/,
      String^ /*displayText*/,
      bool cellIsVisible ) override
   {
      DateTime value =  (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 +=
            gcnew EventHandler( this, &DataGridTimePickerColumn::TimePickerValueChanged );
      }
      else
      {
         customDateTimePicker1->Value = value;
         customDateTimePicker1->Visible = false;
      }

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

      customDateTimePicker1->Focus();
   }

   virtual System::Drawing::Size GetPreferredSize(
      Graphics^ /*g*/,
      Object^ /*value*/ ) override
   {
      return Size( 100, customDateTimePicker1->PreferredHeight + 4);
   }

   virtual int GetMinimumHeight() override
   {
      return customDateTimePicker1->PreferredHeight + 4;
   }

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

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

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

   virtual void Paint(
      Graphics^ g,
      Rectangle bounds,
      CurrencyManager^ source,
      int rowNum,
      Brush^ backBrush,
      Brush^ foreBrush,
      bool /*alignToRight*/ ) override
   {
      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 );
   }

   virtual void SetDataGridInColumn( DataGrid^ value ) override
   {
      DataGridColumnStyle::SetDataGridInColumn( value );
      if ( customDateTimePicker1->Parent != nullptr )
      {
         customDateTimePicker1->Parent->Controls->Remove
            ( customDateTimePicker1 );
      }
      if ( value != nullptr )
      {
         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 -=
         gcnew EventHandler( this, &DataGridTimePickerColumn::TimePickerValueChanged );
      this->isEditing = true;
      DataGridColumnStyle::ColumnStartedEditing( customDateTimePicker1 );
   }
};

public ref class MyForm: public Form
{
private:
   DataTable^ namesDataTable;
   DataGrid^ grid;
public:
   MyForm()
   {
      grid = gcnew DataGrid;

      InitForm();

      namesDataTable = gcnew DataTable( "NamesTable" );
      namesDataTable->Columns->Add( gcnew DataColumn( "Name" ) );
      DataColumn^ dateColumn = gcnew DataColumn
         ( "Date",DateTime::typeid );
      dateColumn->DefaultValue = DateTime::Today;
      namesDataTable->Columns->Add( dateColumn );
      DataSet^ namesDataSet = gcnew DataSet;
      namesDataSet->Tables->Add( namesDataTable );
      grid->DataSource = namesDataSet;
      grid->DataMember = "NamesTable";
      AddGridStyle();
      AddData();
   }

private:
   void AddGridStyle()
   {
      DataGridTableStyle^ myGridStyle = gcnew DataGridTableStyle;
      myGridStyle->MappingName = "NamesTable";
      DataGridTextBoxColumn^ nameColumnStyle =
         gcnew DataGridTextBoxColumn;
      nameColumnStyle->MappingName = "Name";
      nameColumnStyle->HeaderText = "Name";
      myGridStyle->GridColumnStyles->Add( nameColumnStyle );

      DataGridTimePickerColumn^ timePickerColumnStyle =
         gcnew DataGridTimePickerColumn;
      timePickerColumnStyle->MappingName = "Date";
      timePickerColumnStyle->HeaderText = "Date";
      timePickerColumnStyle->Width = 100;
      myGridStyle->GridColumnStyles->Add( timePickerColumnStyle );

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

   void AddData()
   {
      DataRow^ dRow = namesDataTable->NewRow();
      dRow->default[ "Name" ] = "Name 1";
      dRow->default[ "Date" ] = DateTime(2001,12,01);
      namesDataTable->Rows->Add( dRow );

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

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

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

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

      namesDataTable->AcceptChanges();
   }

   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()
{
   Application::Run( gcnew MyForm );
}
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()
    {
        Application.Run(new MyForm());
    }
}
Imports System.Data
Imports System.Windows.Forms
Imports System.Drawing
Imports System.ComponentModel
Imports System.Security.Permissions

' 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 (customDateTimePicker1.Parent IsNot Nothing) Then
            customDateTimePicker1.Parent.Controls.Remove(customDateTimePicker1)
        End If
        If (value IsNot 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

    <SecurityPermissionAttribute( _
    SecurityAction.LinkDemand, Flags := SecurityPermissionFlag.UnmanagedCode)> _
    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

Hinweise

Auf die Auflistung von DataGridColumnStyle -Objekten (die GridColumnStylesCollection) wird über die System.Windows.Forms.DataGrid -Eigenschaft des -Steuerelements TableStyles zugegriffen.

Das System.Windows.Forms.DataGrid Steuerelement erstellt automatisch eine Auflistung von DataGridColumnStyle -Objekten für Sie, wenn Sie die DataSource -Eigenschaft auf eine geeignete Datenquelle festlegen. Bei den erstellten Objekten handelt es sich tatsächlich um Instanzen einer der folgenden Klassen, die von DataGridColumnStyleerben: DataGridBoolColumn oder DataGridTextBoxColumn klasse.

Legen Sie zum Formatieren der Datenanzeige die Format -Eigenschaft der DataGridTextBoxColumn -Klasse auf einen der Formatierungswerte fest. Weitere Informationen zu gültigen Formatierungswerten finden Sie unter Formatierungstypen und benutzerdefinierte Formatzeichenfolgen für Datum und Uhrzeit.

Sie können auch einen eigenen Satz von DataGridColumnStyle -Objekten erstellen und sie der GridColumnStylesCollectionhinzufügen. In diesem Fall müssen Sie die MappingName der einzelnen Spaltenstile auf den ColumnName eines DataColumn festlegen, um die Anzeige von Spalten mit den tatsächlichen Daten zu synchronisieren.

Achtung

Erstellen Sie DataGridColumnStyle immer Objekte, und fügen Sie sie dem GridColumnStylesCollection hinzu, bevor Sie Objekte zu hinzufügen DataGridTableStyleGridTableStylesCollection. Wenn Sie der Auflistung einen leeren DataGridTableStyle mit einem gültigen MappingName Wert hinzufügen, DataGridColumnStyle werden automatisch Objekte für Sie generiert. Folglich wird eine Ausnahme ausgelöst, wenn Sie versuchen, dem neue DataGridColumnStyle Objekte mit doppelten MappingName Werten GridColumnStylesCollectionhinzuzufügen.

Wenn eine der abgeleiteten Klassen von einem System.Windows.Forms.DataGrid -Steuerelement instanziiert wird, hängt die erstellte Klasse von der DataType der ab, die DataColumn dem DataGridColumnStyle -Objekt zugeordnet ist. Beispielsweise wird ein DataColumn -Wert mit DataType dem -Wert System.Boolean einem DataGridBoolColumnzugeordnet. Verwenden Sie die -Methode, um den GetType Typ eines beliebigen DataGridColumnStylezu bestimmen.

Um Ihre eigenen Spaltenklassen zu erstellen, können Sie von erben DataGridColumnStyle. Sie können dies tun, um spezielle Spalten zu erstellen, die Steuerelemente hosten, wie in der DataGridTextBox -Klasse veranschaulicht, die das TextBox Steuerelement hostet. Sie können beispielsweise ein Image Steuerelement hosten, um Bilder in Spalten anzuzeigen, oder Sie können ein eigenes Benutzersteuerelement erstellen, das in der Spalte gehostet werden soll.

Die Funktionalität von DataGridColumnStyle sollte nicht mit der von DataColumnverwechselt werden. Während die DataColumn die Eigenschaften und Methoden enthält, die zum Erstellen des Schemas einer Datentabelle geeignet sind, enthält die DataGridColumnStyle Eigenschaften und Methoden im Zusammenhang mit der Darstellung einer einzelnen Spalte auf dem Bildschirm.

Wenn eine Zeile einen DBNull.Valueenthält, kann der in der Spalte angezeigte Text mit der NullText -Eigenschaft festgelegt werden.

Mit DataGridColumnStyle der -Klasse können Sie auch das Verhalten einer Spalte angeben, während ihre Daten geändert werden. Die BeginUpdate Methoden und EndUpdate setzen das Zeichnen der Spalte vorübergehend an, während große Aktualisierungen an den Daten der Spalte vorgenommen werden. Ohne diese Funktionalität würde jede Änderung in jeder Zelle des Rasters sofort gezeichnet; dies kann für den Benutzer ablenkend und eine Leistungshaftung sein.

Mehrere Methoden ermöglichen die Überwachung der Spalte, da sie vom Benutzer bearbeitet wird, einschließlich der Edit Ereignisse und Commit .

Die meisten Eigenschaften und Methoden der -Klasse sind auf die Steuerung der Darstellung einer Spalte zugeschnitten. Einige, z. B. und GetColumnValueAtRowSetColumnValueAtRow , ermöglichen es Ihnen, den Wert in einer angegebenen Zelle zu untersuchen und zu ändern.

Hinweise für Ausführende

Wenn Sie von erben DataGridColumnStyle, müssen Sie die folgenden Member überschreiben: Abort(Int32), Commit(CurrencyManager, Int32), Edit(CurrencyManager, Int32, Rectangle, Boolean)und Paint(Graphics, Rectangle, CurrencyManager, Int32) (zweimal).

Konstruktoren

DataGridColumnStyle()

Initialisiert in einer abgeleiteten Klasse eine neue Instanz der DataGridColumnStyle-Klasse.

DataGridColumnStyle(PropertyDescriptor)

Initialisiert eine neue Instanz der DataGridColumnStyle-Klasse mit der angegebenen PropertyDescriptor.

Eigenschaften

Alignment

Ruft die Textausrichtung in einer Spalte ab oder legt diese fest.

CanRaiseEvents

Ruft einen Wert ab, der angibt, ob die Komponente ein Ereignis auslösen kann.

(Geerbt von Component)
Container

Ruft die IContainer ab, die in der Component enthalten ist.

(Geerbt von Component)
DataGridTableStyle

Ruft das DataGridTableStyle für die Spalte ab.

DesignMode

Ruft einen Wert ab, der angibt, ob sich Component gegenwärtig im Entwurfsmodus befindet.

(Geerbt von Component)
Events

Ruft die Liste der Ereignishandler ab, die dieser Component angefügt sind.

(Geerbt von Component)
FontHeight

Ruft die Höhe der in der Spalte verwendeten Schriftart ab.

HeaderAccessibleObject

Ruft das AccessibleObject für die Spalte ab.

HeaderText

Ruft den Text des Spaltenkopfs ab oder legt diesen fest.

MappingName

Ruft den Namen des Datenmembers fest, dem das Spaltenformat zugeordnet werden soll, oder legt diesen fest.

NullText

Ruft den Text ab, der angezeigt wird, wenn die Spalte null enthält, oder legt diesen fest.

PropertyDescriptor

Ruft den PropertyDescriptor ab, der die Attribute der Daten ermittelt, die vom DataGridColumnStyle angezeigt werden, oder legt diesen fest.

ReadOnly

Ruft einen Wert ab, der angibt, ob die Daten in der Spalte bearbeitet werden können, oder legt diesen fest.

Site

Ruft den ISite von Component ab oder legt ihn fest.

(Geerbt von Component)
Width

Ruft die Breite der Spalte ab oder legt diese fest.

Methoden

Abort(Int32)

Initiiert beim Überschreiben in einer abgeleiteten Klasse eine Anforderung zum Unterbrechen einer Bearbeitungsprozedur.

BeginUpdate()

Unterbricht das Zeichnen der Spalte, bis die EndUpdate()-Methode aufgerufen wird.

CheckValidDataSource(CurrencyManager)

Löst eine Ausnahme aus, wenn für das DataGrid keine gültige Datenquelle vorhanden ist oder diese Spalte keiner gültigen Eigenschaft in der Datenquelle zugeordnet ist.

ColumnStartedEditing(Control)

Benachrichtigt DataGrid darüber, dass der Benutzer mit dem Bearbeiten der Spalte begonnen hat.

Commit(CurrencyManager, Int32)

Initiiert beim Überschreiben in einer abgeleiteten Klasse eine Anforderung zum Abschließen einer Bearbeitungsprozedur.

ConcedeFocus()

Teilt einer Spalte mit, dass sie den Fokus an das Steuerelement abgeben muss, das sie hostet.

CreateHeaderAccessibleObject()

Ruft das AccessibleObject für die Spalte ab.

CreateObjRef(Type)

Erstellt ein Objekt mit allen relevanten Informationen, die zum Generieren eines Proxys für die Kommunikation mit einem Remoteobjekt erforderlich sind.

(Geerbt von MarshalByRefObject)
Dispose()

Gibt alle vom Component verwendeten Ressourcen frei.

(Geerbt von Component)
Dispose(Boolean)

Gibt die von Component verwendeten nicht verwalteten Ressourcen und optional die verwalteten Ressourcen frei.

(Geerbt von Component)
Edit(CurrencyManager, Int32, Rectangle, Boolean)

Bereitet eine Zelle für die Bearbeitung vor.

Edit(CurrencyManager, Int32, Rectangle, Boolean, String)

Bereitet die Zelle unter Verwendung des angegebenen CurrencyManager, der Zeilennummer und der Rectangle-Parameter für die Bearbeitung vor.

Edit(CurrencyManager, Int32, Rectangle, Boolean, String, Boolean)

Bereitet beim Überschreiben in einer abgeleiteten Klasse eine Zelle für die Bearbeitung vor.

EndUpdate()

Setzt das Zeichnen von Spalten fort, das durch den Aufruf der BeginUpdate()-Methode unterbrochen wurde.

EnterNullValue()

Gibt einen Value in die Spalte ein.

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetColumnValueAtRow(CurrencyManager, Int32)

Ruft den Wert in der angegebenen Zeile aus dem angegebenen CurrencyManager ab.

GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetLifetimeService()
Veraltet.

Ruft das aktuelle Lebensdauerdienstobjekt ab, das die Lebensdauerrichtlinien für diese Instanz steuert.

(Geerbt von MarshalByRefObject)
GetMinimumHeight()

Ruft beim Überschreiben in einer abgeleiteten Klasse die Mindesthöhe einer Zeile ab.

GetPreferredHeight(Graphics, Object)

Ruft beim Überschreiben in einer abgeleiteten Klasse die für die automatische Größenänderung von Spalten verwendete Höhe ab.

GetPreferredSize(Graphics, Object)

Ruft beim Überschreiben in einer abgeleiteten Klasse die Breite und Höhe des angegebenen Werts ab. Die Breite und Höhe werden verwendet, wenn der Benutzer mithilfe des DataGridTableStyle zum DataGridColumnStyle navigiert.

GetService(Type)

Gibt ein Objekt zurück, das einen von der Component oder von deren Container bereitgestellten Dienst darstellt.

(Geerbt von Component)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
InitializeLifetimeService()
Veraltet.

Ruft ein Lebensdauerdienstobjekt zur Steuerung der Lebensdauerrichtlinie für diese Instanz ab.

(Geerbt von MarshalByRefObject)
Invalidate()

Zeichnet die Spalte neu und bewirkt, dass eine Zeichenmeldung an das Steuerelement gesendet wird.

MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
MemberwiseClone(Boolean)

Erstellt eine flache Kopie des aktuellen MarshalByRefObject-Objekts.

(Geerbt von MarshalByRefObject)
Paint(Graphics, Rectangle, CurrencyManager, Int32)

Zeichnet den DataGridColumnStyle mit dem angegebenen Graphics, dem angegebenen Rectangle, dem angegebenen CurrencyManager und der angegebenen Zeilennummer.

Paint(Graphics, Rectangle, CurrencyManager, Int32, Boolean)

Zeichnet beim Überschreiben in einer abgeleiteten Klasse einen DataGridColumnStyle mit der angegebenen Graphics, dem angegebenen Rectangle, dem angegebenen CurrencyManager sowie der Zeilennummer und Ausrichtung.

Paint(Graphics, Rectangle, CurrencyManager, Int32, Brush, Brush, Boolean)

Zeichnet einen DataGridColumnStyle mit der angegebenen Graphics, dem angegebenen Rectangle, dem angegebenen CurrencyManager, der Zeilennummer, Hintergrundfarbe, Vordergrundfarbe und Ausrichtung.

ReleaseHostedControl()

Ermöglicht es, dass die Spalte Ressourcen freigibt, wenn das in der Spalte gehostete Steuerelement nicht benötigt wird.

ResetHeaderText()

Setzt den HeaderText auf den Standardwert null zurück.

SetColumnValueAtRow(CurrencyManager, Int32, Object)

Legt für den Wert in einer angegebenen Zeile den Wert aus einem angegebenen CurrencyManager fest.

SetDataGrid(DataGrid)

Legt das DataGrid-Steuerelement fest, zu dem diese Spalte gehört.

SetDataGridInColumn(DataGrid)

Legt das DataGrid für die Spalte fest.

ToString()

Gibt einen String zurück, der den Namen der Component enthält (sofern vorhanden). Diese Methode darf nicht überschrieben werden.

(Geerbt von Component)
UpdateUI(CurrencyManager, Int32, String)

Aktualisiert den Wert einer angegebenen Zeile mit dem angegebenen Text.

Ereignisse

AlignmentChanged

Tritt ein, wenn der Alignment-Eigenschaftswert geändert wird.

Disposed

Tritt auf, wenn die Komponente von einem Aufruf der Dispose()-Methode verworfen wird.

(Geerbt von Component)
FontChanged

Tritt ein, wenn die Schriftart der Spalte geändert wird.

HeaderTextChanged

Tritt ein, wenn der HeaderText-Eigenschaftswert geändert wird.

MappingNameChanged

Tritt ein, wenn sich der MappingName-Wert ändert.

NullTextChanged

Tritt ein, wenn sich der NullText-Wert ändert.

PropertyDescriptorChanged

Tritt ein, wenn der PropertyDescriptor-Eigenschaftswert geändert wird.

ReadOnlyChanged

Tritt ein, wenn der ReadOnly-Eigenschaftswert geändert wird.

WidthChanged

Tritt ein, wenn der Width-Eigenschaftswert geändert wird.

Explizite Schnittstellenimplementierungen

IDataGridColumnStyleEditingNotificationService.ColumnStartedEditing(Control)

Benachrichtigt das DataGrid-Steuerelement darüber, dass der Benutzer mit dem Bearbeiten der Spalte begonnen hat.

Gilt für:

Weitere Informationen