DataGridBoolColumn クラスとは? わかりやすく解説

DataGridBoolColumn クラス

セルBoolean 値を表すためのチェック ボックス格納する列を指定します

名前空間: System.Windows.Forms
アセンブリ: System.Windows.Forms (system.windows.forms.dll 内)
構文構文

Public Class DataGridBoolColumn
    Inherits DataGridColumnStyle
Dim instance As DataGridBoolColumn
public class DataGridBoolColumn : DataGridColumnStyle
public ref class DataGridBoolColumn : public
 DataGridColumnStyle
public class DataGridBoolColumn extends DataGridColumnStyle
public class DataGridBoolColumn extends
 DataGridColumnStyle
解説解説

DataGridBoolColumn は、abstract クラスの DataGridColumnStyle から派生します。実行時DataGridBoolColumn には、既定で各セルオン (true)、オフ (false)、Value3 つの状態を持つチェック ボックス格納されます。状態が 2 種類チェック ボックス使用するには、AllowNull プロパティfalse設定します

このクラス追加されプロパティには、FalseValue、NullValue、および TrueValue があります。これらのプロパティでは、列の各状態に基づいた値を指定します

使用例使用例

新しDataGridBoolColumn作成し、DataGridTableStyle の GridColumnStylesCollection に追加するコード例次に示します

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

Public Class MyForm
    Inherits System.Windows.Forms.Form
    Private components As System.ComponentModel.Container
    Private myTable As DataTable
    Private myGrid As DataGrid = New
 DataGrid()

    Public Shared Sub Main()
        Application.Run(New MyForm())
    End Sub

    Public Sub New()
        Try
            InitializeComponent()
            myTable = New DataTable("NamesTable")
            myTable.Columns.Add(New DataColumn("Name"))
            Dim column As DataColumn = New
 DataColumn _
            ("id", GetType(System.Int32))
            myTable.Columns.Add(column)
            myTable.Columns.Add(New DataColumn _
            ("calculatedField", GetType(Boolean)))
            Dim namesDataSet As DataSet = New
 DataSet("myDataSet")
            namesDataSet.Tables.Add(myTable)
            myGrid.SetDataBinding(namesDataSet, "NamesTable")
            AddData()
            AddTableStyle()

        Catch exc As System.Exception
            Console.WriteLine(exc.ToString)
        End Try
    End Sub

    Private Sub AddTableStyle()
        ' Map a new  TableStyle to the DataTable. Then 
        ' add DataGridColumnStyle objects to the collection
        ' of column styles with appropriate mappings.
        Dim dgt As DataGridTableStyle = New
 DataGridTableStyle()
        dgt.MappingName = "NamesTable"

        Dim dgtbc As DataGridTextBoxColumn
 = _
        New DataGridTextBoxColumn()
        dgtbc.MappingName = "Name"
        dgtbc.HeaderText = "Name"
        dgt.GridColumnStyles.Add(dgtbc)

        dgtbc = New DataGridTextBoxColumn()
        dgtbc.MappingName = "id"
        dgtbc.HeaderText = "id"
        dgt.GridColumnStyles.Add(dgtbc)

        Dim db As DataGridBoolColumnInherit
 = _
        New DataGridBoolColumnInherit()
        db.HeaderText = "less than 1000 = blue"
        db.Width = 150
        db.MappingName = "calculatedField"
        dgt.GridColumnStyles.Add(db)

        myGrid.TableStyles.Add(dgt)

        ' This expression instructs the grid to change
        ' the color of the inherited DataGridBoolColumn
        ' according to the value of the id field. If it's
        ' less than 1000, the row is blue. Otherwise,
        ' the color is yellow.
        db.Expression = "id < 1000"
    End Sub

    Private Sub AddData()

        ' Add data with varying numbers for the id field.
        ' If the number is over 1000, the cell will paint
        ' yellow. Otherwise, it will be blue.
        Dim dRow As DataRow

        dRow = myTable.NewRow()
        dRow("Name") = "name 1"
        dRow("id") = 999
        myTable.Rows.Add(dRow)

        dRow = myTable.NewRow()
        dRow("Name") = "name 2"
        dRow("id") = 2300
        myTable.Rows.Add(dRow)

        dRow = myTable.NewRow()
        dRow("Name") = "name 3"
        dRow("id") = 120
        myTable.Rows.Add(dRow)

        dRow = myTable.NewRow()
        dRow("Name") = "name 4"
        dRow("id") = 4023
        myTable.Rows.Add(dRow)

        dRow = myTable.NewRow()
        dRow("Name") = "name 5"
        dRow("id") = 2345
        myTable.Rows.Add(dRow)

        myTable.AcceptChanges()
    End Sub

    Private Sub InitializeComponent()
        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

End Class


Public Class DataGridBoolColumnInherit
    Inherits DataGridBoolColumn

    Private trueBrush As SolidBrush = Brushes.Blue
    Private falseBrush As SolidBrush = Brushes.Yellow
    Private expressionColumn As DataColumn
 = Nothing
    Shared count As Int32 = 0

    Public Property FalseColor() As
 Color
        Get
            Return falseBrush.Color
        End Get

        Set(ByVal Value As
 Color)

            falseBrush = New SolidBrush(Value)
            Invalidate()
        End Set
    End Property

    Public Property TrueColor() As
 Color
        Get
            Return trueBrush.Color
        End Get

        Set(ByVal Value As
 Color)

            trueBrush = New SolidBrush(Value)
            Invalidate()
        End Set
    End Property

    Public Sub New()
        count += 1
    End Sub

    ' This will work only with a DataSet or DataTable.
    ' The code is not compatible with IBindingList implementations.
    Public Property Expression() As
 String
        Get
            If Me.expressionColumn Is
 Nothing Then
                Return String.Empty
            Else
                Return Me.expressionColumn.Expression
            End If
        End Get
        Set(ByVal Value As
 String)
            If expressionColumn Is Nothing
 Then
                AddExpressionColumn(Value)
            Else
                expressionColumn.Expression = Value
            End If
            If Not (expressionColumn Is
 Nothing) And expressionColumn.Expression.Equals(Value)
 Then
                Return
            End If
            Invalidate()
        End Set
    End Property

    Private Sub AddExpressionColumn(ByVal
 value As String)
        ' Get the grid's data source. First check for a null 
        ' table or data grid.
        If Me.DataGridTableStyle Is
 Nothing Or _
        Me.DataGridTableStyle.DataGrid Is Nothing
 Then
            Return
        End If

        Dim dg As DataGrid = Me.DataGridTableStyle.DataGrid
        Dim dv As DataView = CType(dg.BindingContext(dg.DataSource,
 dg.DataMember), CurrencyManager).List

        ' This works only with System.Data.DataTable.
        If dv Is Nothing
 Then
            Return
        End If

        ' If the user already added a column with the name 
        ' then exit. Otherwise, add the column and set the 
        ' expression to the value passed to this function.
        Dim col As DataColumn = dv.Table.Columns("__Computed__Column__")
        If Not (col Is Nothing)
 Then
            Return
        End If
        col = New DataColumn("__Computed__Column__"
 + count.ToString())

        dv.Table.Columns.Add(col)

        col.Expression = value
        expressionColumn = col
    End Sub


    ' Override the OnPaint method to paint the cell based on the expression.
    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 trueExpression As Boolean
 = False
        Dim hasExpression As Boolean
 = False
        Dim drv As DataRowView = [source].List(rowNum)
        hasExpression = Not (Me.expressionColumn
 Is Nothing) And Not
 (Me.expressionColumn.Expression Is Nothing) And Not Me.expressionColumn.Expression.Equals([String].Empty)

        ' Get the value from the expression column.
        ' For simplicity, we assume a True/False value for the 
        ' expression column.
        If hasExpression Then
            Dim expr As Object
 = drv.Row(expressionColumn.ColumnName)
            trueExpression = expr.Equals("True")
        End If

        ' Let the DataGridBoolColumn do the painting.
        If Not hasExpression Then
            MyBase.Paint(g, bounds, [source], rowNum, backBrush,
 foreBrush, alignToRight)
        End If

        ' Paint using the expression color for true or false, as calculated.
        If trueExpression Then
            MyBase.Paint(g, bounds, [source], rowNum, trueBrush,
 foreBrush, alignToRight)
        Else
            MyBase.Paint(g, bounds, [source], rowNum, falseBrush,
 foreBrush, alignToRight)
        End If
    End Sub
End Class
using System;
using System.Data;
using System.Windows.Forms;
using System.Drawing;
using System.ComponentModel;

public class MyForm : Form 
{
    private DataTable myTable;
    private DataGrid myGrid = new DataGrid();
    
    public MyForm() : base() 
    {
        try
        {
            InitializeComponent();

            myTable = new DataTable("NamesTable");
            myTable.Columns.Add(new DataColumn("Name"));
            DataColumn column = new DataColumn
                ("id", typeof(System.Int32));
            myTable.Columns.Add(column);
            myTable.Columns.Add(new 
                DataColumn("calculatedField", typeof(bool)));
            DataSet namesDataSet = new DataSet();
            namesDataSet.Tables.Add(myTable);
            myGrid.SetDataBinding(namesDataSet, "NamesTable");
        
            AddTableStyle();
            AddData();
        }
        catch (System.Exception exc)
        {
            Console.WriteLine(exc.ToString());
        }
    }

    
    private void grid_Enter(object sender,
 EventArgs e) 
    {
        myGrid.CurrentCell = new DataGridCell(2,2);
    }

    private void AddTableStyle()
    {
        // Map a new  TableStyle to the DataTable. Then 
        // add DataGridColumnStyle objects to the collection
        // of column styles with appropriate mappings.
        DataGridTableStyle dgt = new DataGridTableStyle();
        dgt.MappingName = "NamesTable";

        DataGridTextBoxColumn dgtbc = new DataGridTextBoxColumn();
        dgtbc.MappingName = "Name";
        dgtbc.HeaderText= "Name";
        dgt.GridColumnStyles.Add(dgtbc);

        dgtbc = new DataGridTextBoxColumn();
        dgtbc.MappingName = "id";
        dgtbc.HeaderText= "id";
        dgt.GridColumnStyles.Add(dgtbc);

        DataGridBoolColumnInherit db = 
            new DataGridBoolColumnInherit();
        db.HeaderText= "less than 1000 = blue";
        db.Width= 150;
        db.MappingName = "calculatedField";
        dgt.GridColumnStyles.Add(db);

        myGrid.TableStyles.Add(dgt);

        // This expression instructs the grid to change
        // the color of the inherited DataGridBoolColumn
        // according to the value of the id field. If it's
        // less than 1000, the row is blue. Otherwise,
        // the color is yellow.
        db.Expression = "id < 1000";
    }

    private void AddData() 
    {
        // Add data with varying numbers for the id field.
        // If the number is over 1000, the cell will paint
        // yellow. Otherwise, it will be blue.
        DataRow dRow = myTable.NewRow();

        dRow["Name"] = "name 1 ";
        dRow["id"] = 999;
        myTable.Rows.Add(dRow);

        dRow = myTable.NewRow();
        dRow["Name"] = "name 2";
        dRow["id"] = 2300;
        myTable.Rows.Add(dRow);

        dRow = myTable.NewRow();
        dRow["Name"] = "name 3";
        dRow["id"] = 120;
        myTable.Rows.Add(dRow);

        dRow = myTable.NewRow();
        dRow["Name"] = "name 4";
        dRow["id"] = 4023;
        myTable.Rows.Add(dRow);

        dRow = myTable.NewRow();
        dRow["Name"] = "name 5";
        dRow["id"] = 2345;
        myTable.Rows.Add(dRow);

        myTable.AcceptChanges();
    }

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

public class DataGridBoolColumnInherit : DataGridBoolColumn
 
{
    private SolidBrush trueBrush = Brushes.Blue as SolidBrush;
    private SolidBrush falseBrush = Brushes.Yellow as SolidBrush;
    private DataColumn expressionColumn = null;
    private static int count
 = 0;

    public Color FalseColor 
    {
        get 
        {
            return falseBrush.Color;
        }
        set 
        {
            falseBrush = new SolidBrush(value);
            Invalidate();
        }
    }

    public Color TrueColor 
    {
        get 
        {
            return trueBrush.Color;
        }
        set 
        {
            trueBrush = new SolidBrush(value);
            Invalidate();
        }
    }

    public DataGridBoolColumnInherit() : base
 () 
    {
        count ++;
    }


    // This will work only with a DataSet or DataTable.
    // The code is not compatible with IBindingList implementations.
    public string Expression 
    {
        get 
        {
            return this.expressionColumn ==
 null ? String.Empty : 
                this.expressionColumn.Expression;
        }
        set 
        {
            if (expressionColumn == null)
                AddExpressionColumn(value);
            else 
                expressionColumn.Expression = value;
            if (expressionColumn != null &&
 
                expressionColumn.Expression.Equals(value))
                return;
            Invalidate();
        }
    }

    private void AddExpressionColumn(string
 value) 
    {
        // Get the grid's data source. First check for a null 
        // table or data grid.
        if (this.DataGridTableStyle == null
 || 
            this.DataGridTableStyle.DataGrid == null)
            return;

        DataGrid myGrid = this.DataGridTableStyle.DataGrid;
        DataView myDataView = ((CurrencyManager) 
            myGrid.BindingContext[myGrid.DataSource, 
            myGrid.DataMember]).List 
            as DataView;

        // This works only with System.Data.DataTable.
        if (myDataView == null)
            return;

        // If the user already added a column with the name 
        // then exit. Otherwise, add the column and set the 
        // expression to the value passed to this function.
        DataColumn col = myDataView.Table.Columns["__Computed__Column__"];
        if (col != null)
            return;
        col = new DataColumn("__Computed__Column__"
 + count.ToString());

        myDataView.Table.Columns.Add(col);
        col.Expression = value;
        expressionColumn = col;
    }

    // override the OnPaint method to paint the cell based on the expression.
    protected override void Paint(Graphics
 g, Rectangle bounds,
        CurrencyManager source, int rowNum,
        Brush backBrush, Brush foreBrush,
        bool alignToRight) 
    {
        bool trueExpression = false;
        bool hasExpression = false;
        DataRowView drv = source.List[rowNum] as DataRowView;

        hasExpression = this.expressionColumn != null
 && 
            this.expressionColumn.Expression != null
 && 
            !this.expressionColumn.Expression.Equals(String.Empty);

        Console.WriteLine(string.Format("hasExpressionValue
 {0}",hasExpression));
        // Get the value from the expression column.
        // For simplicity, we assume a True/False value for the 
        // expression column.
        if (hasExpression) 
        {
            object expr = drv.Row[expressionColumn.ColumnName];
            trueExpression = expr.Equals("True");
        }

        // Let the DataGridBoolColumn do the painting.
        if (!hasExpression)
            base.Paint(g, bounds, source, rowNum, 
                backBrush, foreBrush, alignToRight);

        // Paint using the expression color for true or false, as calculated.
        if (trueExpression)
            base.Paint(g, bounds, source, rowNum, 
                trueBrush, foreBrush, alignToRight);
        else
            base.Paint(g, bounds, source, rowNum, 
                falseBrush, foreBrush, alignToRight);
    }
}
using namespace System;
using namespace System::Data;
using namespace System::Windows::Forms;
using namespace System::Drawing;
using namespace System::ComponentModel;

public ref class DataGridBoolColumnInherit:
 public DataGridBoolColumn
{
private:
   SolidBrush^ trueBrush;
   SolidBrush^ falseBrush;
   DataColumn^ expressionColumn;
   static int count = 0;

public:
   DataGridBoolColumnInherit()
      : DataGridBoolColumn()
   {
      trueBrush = dynamic_cast<SolidBrush^>(Brushes::Blue);
      falseBrush = dynamic_cast<SolidBrush^>(Brushes::Yellow);
      expressionColumn = nullptr;
      count++;
   }

   property Color FalseColor 
   {
      Color get()
      {
         return falseBrush->Color;
      }

      void set( Color value )
      {
         falseBrush = gcnew System::Drawing::SolidBrush( value );
         Invalidate();
      }
   }

   property Color TrueColor 
   {
      Color get()
      {
         return trueBrush->Color;
      }

      void set( Color value )
      {
         trueBrush = gcnew System::Drawing::SolidBrush( value );
         Invalidate();
      }
   }

   property String^ Expression 
   {
      // This will work only with a DataSet or DataTable.
      // The code is not compatible with IBindingList* implementations.
      String^ get()
      {
         return this->expressionColumn ==
 nullptr ? String::Empty : this->expressionColumn->Expression;
      }

      void set( String^ value )
      {
         if ( expressionColumn == nullptr )
                  AddExpressionColumn( value );
         else
                  expressionColumn->Expression = value;

         if ( expressionColumn != nullptr && expressionColumn->Expression->Equals(
 value ) )
                  return;

         Invalidate();
      }
   }

private:
   void AddExpressionColumn( String^ value )
   {
      // Get the grid's data source. First check for a 0 
      // table or data grid.
      if ( this->DataGridTableStyle == nullptr
 || this->DataGridTableStyle->DataGrid == nullptr )
            return;

      DataGrid^ myGrid = this->DataGridTableStyle->DataGrid;
      DataView^ myDataView = dynamic_cast<DataView^>((dynamic_cast<CurrencyManager^>(myGrid->BindingContext[
 myGrid->DataSource,myGrid->DataMember ]))->List);

      // This works only with System::Data::DataTable.
      if ( myDataView == nullptr )
            return;

      // If the user already added a column with the name 
      // then exit. Otherwise, add the column and set the 
      // expression to the value passed to this function.
      DataColumn^ col = myDataView->Table->Columns[ "__Computed__Column__"
 ];
      if ( col != nullptr )
            return;

      col = gcnew DataColumn( String::Concat( "__Computed__Column__", count
 ) );
      myDataView->Table->Columns->Add( col );
      col->Expression = value;
      expressionColumn = col;
   }

   //  the OnPaint method to paint the cell based on the expression.
protected:
   virtual void Paint( Graphics^ g, Rectangle bounds, CurrencyManager^
 source, int rowNum, Brush^ backBrush, Brush^ foreBrush, bool
 alignToRight ) override
   {
      bool trueExpression = false;
      bool hasExpression = false;
      DataRowView^ drv = dynamic_cast<DataRowView^>(source->List[ rowNum
 ]);
      hasExpression = this->expressionColumn != nullptr &&
 this->expressionColumn->Expression != nullptr &&
  !this->expressionColumn->Expression->Equals( String::Empty );
      Console::WriteLine( String::Format( "hasExpressionValue {0}", hasExpression
 ) );

      // Get the value from the expression column.
      // For simplicity, we assume a True/False value for the 
      // expression column.
      if ( hasExpression )
      {
         Object^ expr = drv->Row[ expressionColumn->ColumnName ];
         trueExpression = expr->Equals( "True" );
      }

      // Let the DataGridBoolColumn do the painting.
      if (  !hasExpression )
            DataGridBoolColumn::Paint( g, bounds, source, rowNum, backBrush, foreBrush,
 alignToRight );

      // Paint using the expression color for true or false, as calculated.
      if ( trueExpression )
            DataGridBoolColumn::Paint( g, bounds, source, rowNum, trueBrush, foreBrush,
 alignToRight );
      else
            DataGridBoolColumn::Paint( g, bounds, source, rowNum, falseBrush, foreBrush,
 alignToRight );
   }
};

public ref class MyForm: public
 Form
{
private:
   DataTable^ myTable;
   DataGrid^ myGrid;

public:
   MyForm()
   {
      myGrid = gcnew DataGrid;
      try
      {
         InitializeComponent();
         myTable = gcnew DataTable( "NamesTable" );
         myTable->Columns->Add( gcnew DataColumn( "Name" ) );
         DataColumn^ column = gcnew DataColumn( "id",Int32::typeid );
         myTable->Columns->Add( column );
         myTable->Columns->Add( gcnew DataColumn( "calculatedField",bool::typeid
 ) );
         DataSet^ namesDataSet = gcnew DataSet;
         namesDataSet->Tables->Add( myTable );
         myGrid->SetDataBinding( namesDataSet, "NamesTable" );
         AddTableStyle();
         AddData();
      }
      catch ( System::Exception^ exc ) 
      {
         Console::WriteLine( exc );
      }
   }

private:
   void grid_Enter( Object^ sender, EventArgs^ e )
   {
      myGrid->CurrentCell = DataGridCell(2,2);
   }

   void AddTableStyle()
   {
      // Map a new  TableStyle to the DataTable. Then 
      // add DataGridColumnStyle objects to the collection
      // of column styles with appropriate mappings.
      DataGridTableStyle^ dgt = gcnew DataGridTableStyle;
      dgt->MappingName = "NamesTable";
      DataGridTextBoxColumn^ dgtbc = gcnew DataGridTextBoxColumn;
      dgtbc->MappingName = "Name";
      dgtbc->HeaderText = "Name";
      dgt->GridColumnStyles->Add( dgtbc );
      dgtbc = gcnew DataGridTextBoxColumn;
      dgtbc->MappingName = "id";
      dgtbc->HeaderText = "id";
      dgt->GridColumnStyles->Add( dgtbc );
      DataGridBoolColumnInherit^ db = gcnew DataGridBoolColumnInherit;
      db->HeaderText = "less than 1000 = blue";
      db->Width = 150;
      db->MappingName = "calculatedField";
      dgt->GridColumnStyles->Add( db );
      myGrid->TableStyles->Add( dgt );

      // This expression instructs the grid to change
      // the color of the inherited DataGridBoolColumn
      // according to the value of the id field. If it's
      // less than 1000, the row is blue. Otherwise,
      // the color is yellow.
      db->Expression = "id < 1000";
   }

   void AddData()
   {
      // Add data with varying numbers for the id field.
      // If the number is over 1000, the cell will paint
      // yellow. Otherwise, it will be blue.
      DataRow^ dRow = myTable->NewRow();
      dRow[ "Name" ] = "name 1 ";
      dRow[ "id" ] = 999;
      myTable->Rows->Add( dRow );
      dRow = myTable->NewRow();
      dRow[ "Name" ] = "name 2";
      dRow[ "id" ] = 2300;
      myTable->Rows->Add( dRow );
      dRow = myTable->NewRow();
      dRow[ "Name" ] = "name 3";
      dRow[ "id" ] = 120;
      myTable->Rows->Add( dRow );
      dRow = myTable->NewRow();
      dRow[ "Name" ] = "name 4";
      dRow[ "id" ] = 4023;
      myTable->Rows->Add( dRow );
      dRow = myTable->NewRow();
      dRow[ "Name" ] = "name 5";
      dRow[ "id" ] = 2345;
      myTable->Rows->Add( dRow );
      myTable->AcceptChanges();
   }

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

[STAThread]
int main()
{
   MyForm^ myGridForm = gcnew MyForm;
   myGridForm->ShowDialog();
}
import System.*;
import System.Data.*;
import System.Windows.Forms.*;
import System.Drawing.*;
import System.ComponentModel.*;

public class MyForm extends Form
{
    private DataTable myTable;
    private DataGrid myGrid = new DataGrid();

    public MyForm()
    {
        try {
            InitializeComponent();
            myTable = new DataTable("NamesTable");
            myTable.get_Columns().Add(new DataColumn("Name"));

            DataColumn column = 
                new DataColumn("id", System.Int32.class.ToType());

            myTable.get_Columns().Add(column);
            myTable.get_Columns().Add(new DataColumn("calculatedField",
 
                boolean.class.ToType()));

            DataSet namesDataSet = new DataSet();

            namesDataSet.get_Tables().Add(myTable);
            myGrid.SetDataBinding(namesDataSet, "NamesTable");
            AddTableStyle();
            AddData();
        }
        catch(System.Exception exc) {
            Console.WriteLine(exc.ToString());
        }
    } //MyForm

    private void gridEnter(Object sender, EventArgs
 e)
    {
        myGrid.set_CurrentCell(new DataGridCell(2, 2));
    } //gridEnter

    private void AddTableStyle()
    {
        // Map a new  TableStyle to the DataTable. Then 
        // add DataGridColumnStyle objects to the collection
        // of column styles with appropriate mappings.
        DataGridTableStyle dgt = new DataGridTableStyle();

        dgt.set_MappingName("NamesTable");

        DataGridTextBoxColumn dgtbc = new DataGridTextBoxColumn();

        dgtbc.set_MappingName("Name");
        dgtbc.set_HeaderText("Name");
        dgt.get_GridColumnStyles().Add(dgtbc);
        dgtbc = new DataGridTextBoxColumn();
        dgtbc.set_MappingName("id");
        dgtbc.set_HeaderText("id");
        dgt.get_GridColumnStyles().Add(dgtbc);

        DataGridBoolColumnInherit db = new DataGridBoolColumnInherit();

        db.set_HeaderText("less than 1000 = blue");
        db.set_Width(150);
        db.set_MappingName("calculatedField");
        dgt.get_GridColumnStyles().Add(db);
        myGrid.get_TableStyles().Add(dgt);

        // This expression instructs the grid to change
        // the color of the inherited DataGridBoolColumn
        // according to the value of the id field. If it's
        // less than 1000, the row is blue. Otherwise,
        // the color is yellow.
        db.set_Expression("id < 1000");
    } //AddTableStyle

    private void AddData()
    {
        // Add data with varying numbers for the id field.
        // If the number is over 1000, the cell will paint
        // yellow. Otherwise, it will be blue.
        DataRow dRow = myTable.NewRow();

        dRow.set_Item("Name", "name 1 ");
        dRow.set_Item("id", (Int32)999);
        myTable.get_Rows().Add(dRow);
        dRow = myTable.NewRow();
        dRow.set_Item("Name", "name 2");
        dRow.set_Item("id", (Int32)2300);
        myTable.get_Rows().Add(dRow);
        dRow = myTable.NewRow();
        dRow.set_Item("Name", "name 3");
        dRow.set_Item("id", (Int32)120);
        myTable.get_Rows().Add(dRow);
        dRow = myTable.NewRow();
        dRow.set_Item("Name", "name 4");
        dRow.set_Item("id", (Int32)4023);
        myTable.get_Rows().Add(dRow);
        dRow = myTable.NewRow();
        dRow.set_Item("Name", "name 5");
        dRow.set_Item("id", (Int32)2345);
        myTable.get_Rows().Add(dRow);
        myTable.AcceptChanges();
    } //AddData

    private void InitializeComponent()
    {
        this.set_Size(new Size(500, 500));
        myGrid.set_Size(new Size(350, 250));
        myGrid.set_TabStop(true);
        myGrid.set_TabIndex(1);
        this.set_StartPosition(FormStartPosition.CenterScreen);
        this.get_Controls().Add(myGrid);
    } //InitializeComponent

    /** @attribute STAThread()
     */
    public static void main(String[]
 args)
    {
        MyForm myGridForm = new MyForm();
        myGridForm.ShowDialog();
    } //main
} //MyForm

public class DataGridBoolColumnInherit extends
 DataGridBoolColumn
{
    private SolidBrush trueBrush = (SolidBrush)Brushes.get_Blue();
    private SolidBrush falseBrush = (SolidBrush)Brushes.get_Yellow();
    private DataColumn expressionColumn = null;
    private static int count
 = 0;

    /** @property 
     */
    public Color get_FalseColor()
    {
        return falseBrush.get_Color();
    } //get_FalseColor

    /** @property 
     */
    public void set_FalseColor(Color value)
    {
        falseBrush = new SolidBrush(value);
        Invalidate();
    } //set_FalseColor

    /** @property 
     */
    public Color get_TrueColor()
    {
        return trueBrush.get_Color();
    } //get_TrueColor

    /** @property 
     */
    public void set_TrueColor(Color value)
    {
        trueBrush = new SolidBrush(value);
        Invalidate();
    } //set_TrueColor

    public DataGridBoolColumnInherit()
    {
        super();
        count++;
    } //DataGridBoolColumnInherit

    // This will work only with a DataSet or DataTable.
    // The code is not compatible with IBindingList implementations.
    /** @property 
     */
    public String get_Expression()
    {
        return (this.expressionColumn == null)
 
            ? String.Empty : this.expressionColumn.get_Expression();
    } //get_Expression

    /** @property 
     */
    public void set_Expression(String value)
    {
        if(expressionColumn == null) {
            AddExpressionColumn(value);
        }
        else {
            expressionColumn.set_Expression(value);
        }

        if(expressionColumn != null 
            && expressionColumn.get_Expression().Equals(value)) {
            return;
        }
        Invalidate();
    } //set_Expression

    private void AddExpressionColumn(String
 value)
    {
        // Get the grid's data source. First check for a null 
        // table or data grid.
        if(this.get_DataGridTableStyle() ==
 null 
            || this.get_DataGridTableStyle().get_DataGrid() ==
 null) {
            return;
        }

        DataGrid myGrid = this.get_DataGridTableStyle().get_DataGrid();
        DataView myDataView = (DataView)(((CurrencyManager)(myGrid.
            get_BindingContext().get_Item(myGrid.get_DataSource(), 
            myGrid.get_DataMember()))).get_List());

        // This works only with System.Data.DataTable.
        if(myDataView == null) {
            return;
        }

        // If the user already added a column with the name 
        // then exit. Otherwise, add the column and set the 
        // expression to the value passed to this function.
        DataColumn col = myDataView.get_Table().get_Columns().
            get_Item("__Computed__Column__");

        if(col != null) {
            return;
        }
        col = new DataColumn("__Computed__Column__"
 
            + System.Convert.ToString(count));

        myDataView.get_Table().get_Columns().Add(col);
        col.set_Expression(value);
        expressionColumn = col;
    } //AddExpressionColumn

    // override the OnPaint method to paint the cell based on the expression.
    protected void Paint(Graphics g, Rectangle
 bounds, CurrencyManager source, 
        int rowNum, Brush backBrush, Brush foreBrush, boolean
 alignToRight)
    {
        boolean trueExpression = false;
        boolean hasExpression = false;
        DataRowView drv = (DataRowView)source.get_List().get_Item(rowNum);

        hasExpression = this.expressionColumn != null
 
            && this.expressionColumn.get_Expression()
 != null 
            && !(this.expressionColumn.get_Expression().Equals(String.Empty));
        
        Console.WriteLine(String.Format("hasExpressionValue {0}", 
            System.Convert.ToString(hasExpression)));

        // Get the value from the expression column.
        // For simplicity, we assume a True/False value for the 
        // expression column.
        if(hasExpression) {
            Object expr = 
                drv.get_Row().get_Item(expressionColumn.get_ColumnName());
            trueExpression = expr.Equals("True");
        }

        // Let the DataGridBoolColumn do the painting.
        if(!(hasExpression)) {
            super.Paint(g, bounds, source, rowNum, backBrush, foreBrush, 
                alignToRight);
        }

        // Paint using the expression color for true or false, as calculated.
        if(trueExpression) {
            super.Paint(g, bounds, source, rowNum, trueBrush, foreBrush, 
                alignToRight);
        }
        else {
            super.Paint(g, bounds, source, rowNum, falseBrush, foreBrush, 
                alignToRight);
        }
    } //Paint
} //DataGridBoolColumnInherit
継承階層継承階層
System.Object
   System.MarshalByRefObject
     System.ComponentModel.Component
       System.Windows.Forms.DataGridColumnStyle
        System.Windows.Forms.DataGridBoolColumn
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバ場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
DataGridBoolColumn メンバ
System.Windows.Forms 名前空間
DataColumn
DataGrid クラス
DataGridColumnStyle
GridColumnStylesCollection
GetType
Type



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「DataGridBoolColumn クラス」の関連用語

DataGridBoolColumn クラスのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



DataGridBoolColumn クラスのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.

©2025 GRAS Group, Inc.RSS