DataGridColumnStyle-Klasse
Gibt die Darstellung, die Textformatierung und das Verhalten einer System.Windows.Forms.DataGrid-Steuerelementspalte an. Diese Klasse ist abstrakt.
Namespace: System.Windows.Forms
Assembly: System.Windows.Forms (in system.windows.forms.dll)
Syntax
'Declaration
Public MustInherit Class DataGridColumnStyle
Inherits Component
Implements IDataGridColumnStyleEditingNotificationService
'Usage
Dim instance As DataGridColumnStyle
public abstract class DataGridColumnStyle : Component, IDataGridColumnStyleEditingNotificationService
public ref class DataGridColumnStyle abstract : public Component, IDataGridColumnStyleEditingNotificationService
public abstract class DataGridColumnStyle extends Component implements IDataGridColumnStyleEditingNotificationService
public abstract class DataGridColumnStyle extends Component implements IDataGridColumnStyleEditingNotificationService
Hinweise
Auf die Auflistung von DataGridColumnStyle-Objekten (GridColumnStylesCollection) wird über die TableStyles-Eigenschaft des System.Windows.Forms.DataGrid-Steuerelements zugegriffen.
Das System.Windows.Forms.DataGrid-Steuerelement erstellt automatisch eine Auflistung von DataGridColumnStyle-Objekten, wenn Sie die DataSource-Eigenschaft auf eine entsprechende Datenquelle festlegen. Bei den erstellten Objekten handelt es sich um Instanzen einer der Klassen, die vom DataGridColumnStyle erben, d. h. um die DataGridBoolColumn-Klasse oder die DataGridTextBoxColumn-Klasse.
Legen Sie zum Formatieren der Datenanzeige die Format-Eigenschaft der DataGridTextBoxColumn-Klasse auf einen der Formatierungswerte fest. Weitere Informationen über gültige Formatierungswerte finden Sie unter Formatzeichenfolgen für Datum und Uhrzeit und Standardmäßige Zahlenformatzeichenfolgen.
Sie können auch eine eigene Gruppe von DataGridColumnStyle-Objekten erstellen und diese der GridColumnStylesCollection hinzufügen. In diesem Fall müssen Sie den MappingName für jedes Spaltenformat auf den ColumnName einer DataColumn festlegen, um die Anzeige der Spalten mit den tatsächlichen Daten zu synchronisieren.
Warnung
Erstellen Sie vor dem Hinzufügen von DataGridTableStyle-Objekten zur GridTableStylesCollection immer DataGridColumnStyle-Objekte, und fügen Sie diese der GridColumnStylesCollection hinzu. Wenn Sie der Auflistung einen leeren DataGridTableStyle mit einem gültigen MappingName-Wert hinzufügen, werden automatisch DataGridColumnStyle-Objekte generiert. Folglich wird beim Versuch, der GridColumnStylesCollection neue DataGridColumnStyle-Objekte mit doppelten MappingName-Werten hinzuzufügen, eine Ausnahme ausgelöst.
Wenn eine der abgeleiteten Klassen durch ein System.Windows.Forms.DataGrid-Steuerelement instanziiert wird, ist die erstellte Klasse vom DataType der DataColumn abhängig, die dem DataGridColumnStyle-Objekt zugeordnet ist. Beispielsweise wird eine DataColumn, deren DataType auf System.Boolean festgelegt ist, einer DataGridBoolColumn zugeordnet. Mit der GetType-Methode können Sie den Typ eines DataGridColumnStyle ermitteln.
Zum Erstellen eigener Spaltenklassen können Sie DataGridColumnStyle vererben. Dies ist z. B. nützlich, wenn Sie spezielle Spalten erstellen möchten, die Steuerelemente enthalten, wie durch die DataGridTextBox-Klasse veranschaulicht, die das TextBox-Steuerelement enthält. Sie können z. B. ein Image-Steuerelement zum Anzeigen von Bildern in Spalten aufnehmen, oder Sie können ein eigenes Benutzersteuerelement erstellen und in eine Spalte aufnehmen.
Die Funktionen des DataGridColumnStyle dürfen nicht mit denen der DataColumn verwechselt werden. Während die DataColumn die zum Erstellen eines Datentabellenschemas erforderlichen Eigenschaften und Methoden enthält, hängen die Eigenschaften und Methoden des DataGridColumnStyle mit der Darstellung einer einzelnen Spalte auf dem Bildschirm zusammen.
Wenn eine Zeile einen DBNull.Value enthält, kann der in der Spalte angezeigte Text mit der NullText-Eigenschaft festgelegt werden.
Mithilfe der DataGridColumnStyle-Klasse kann darüber hinaus das Verhalten einer Spalte während des Änderns der in ihr enthaltenen Daten angegeben werden. Mit der BeginUpdate-Methode und der EndUpdate-Methode wird das Zeichnen der Spalte vorübergehend unterbrochen, wenn umfangreiche Aktualisierungen der in der Spalte enthaltenen Daten durchgeführt werden. Ohne diese Funktion wird jede Änderung in jeder Zelle des Datenblatts sofort gezeichnet. Dies ist störend für den Benutzer und kann zu Leistungsminderung führen.
Vom Benutzer bearbeitete Spalten können mit verschiedenen Methoden überwacht werden, u. a. mithilfe des Edit-Ereignisses und des Commit-Ereignisses.
Die meisten Eigenschaften und Methoden der Klasse sind auf das Steuern der Darstellung einer Spalte zugeschnitten. Einige ermöglichen Ihnen jedoch das Überprüfen und Ändern des Werts in einer angegebenen Zelle, z. B. GetColumnValueAtRow und SetColumnValueAtRow.
Hinweise für Implementierer Wenn Sie DataGridColumnStyle vererben, müssen Sie die folgenden Member überschreiben: Abort, Commit, Edit und Paint (zweimal).
Beispiel
Im folgenden Codebeispiel wird ein DataGridColumnStyle erstellt, der ein DateTimePicker-Steuerelement hostet.
Imports System
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 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
<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
using System;
using System.Data;
using System.Windows.Forms;
using System.Drawing;
using 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 : 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
{
[SecurityPermissionAttribute(
SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.UnmanagedCode)]
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();
}
}
#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()
{
MyForm^ myForm1 = gcnew MyForm;
myForm1->ShowDialog();
}
Vererbungshierarchie
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Windows.Forms.DataGridColumnStyle
Microsoft.CLRAdmin.DataGridComboBoxColumnStyle
System.Windows.Forms.DataGridBoolColumn
System.Windows.Forms.DataGridTextBoxColumn
Threadsicherheit
Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.
Plattformen
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.
Versionsinformationen
.NET Framework
Unterstützt in: 2.0, 1.1, 1.0
.NET Compact Framework
Unterstützt in: 2.0, 1.0
Siehe auch
Referenz
DataGridColumnStyle-Member
System.Windows.Forms-Namespace
DataColumn
DataGrid-Klasse
DataGridBoolColumn-Klasse
DataGridTextBox
DataGridTableStyle
DataView
GridColumnStylesCollection