DataGridViewCheckBoxCell.ThreeState Property
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Gets or sets a value indicating whether ternary mode has been enabled for the hosted check box control.
public:
property bool ThreeState { bool get(); void set(bool value); };
public bool ThreeState { get; set; }
member this.ThreeState : bool with get, set
Public Property ThreeState As Boolean
Property Value
true
if ternary mode is enabled; false
if binary mode is enabled. The default is false
.
Examples
The following code example uses a DataGridViewCheckBoxCell to track the status of office lighting. The FalseValue property associates "turnedOff" with false
, the TrueValue property associates "turnedOn" with true
, and the IndeterminateValue property associates "unknown" to indeterminate.
#using <System.Windows.Forms.dll>
#using <System.dll>
#using <System.Drawing.dll>
using namespace System;
using namespace System::IO;
using namespace System::Collections::Generic;
using namespace System::Windows::Forms;
public enum class LightStatus
{
Unknown,
TurnedOn,
TurnedOff
};
public ref class TriValueVirtualCheckBox: public Form
{
private:
DataGridView^ dataGridView1;
private:
const int initialSize;
private:
Dictionary<int, LightStatus>^ store;
public:
TriValueVirtualCheckBox() : Form(), initialSize(500)
{
dataGridView1 = gcnew DataGridView();
store = gcnew Dictionary<int, LightStatus>();
Text = this->GetType()->Name;
for(int i = 0; i < initialSize; i++)
{
store->Add(i, LightStatus::Unknown);
}
Controls->Add(dataGridView1);
dataGridView1->VirtualMode = true;
dataGridView1->AllowUserToDeleteRows = false;
dataGridView1->CellValueNeeded +=
gcnew DataGridViewCellValueEventHandler(
this, &TriValueVirtualCheckBox::dataGridView1_CellValueNeeded);
dataGridView1->CellValuePushed +=
gcnew DataGridViewCellValueEventHandler(
this, &TriValueVirtualCheckBox::dataGridView1_CellValuePushed);
dataGridView1->Columns->Add(CreateCheckBoxColumn());
dataGridView1->Rows->AddCopies(0, initialSize);
}
private:
DataGridViewCheckBoxColumn^ CreateCheckBoxColumn()
{
DataGridViewCheckBoxColumn^ dataGridViewCheckBoxColumn1
= gcnew DataGridViewCheckBoxColumn();
dataGridViewCheckBoxColumn1->HeaderText = "Lights On";
dataGridViewCheckBoxColumn1->TrueValue = LightStatus::TurnedOn;
dataGridViewCheckBoxColumn1->FalseValue =
LightStatus::TurnedOff;
dataGridViewCheckBoxColumn1->IndeterminateValue
= LightStatus::Unknown;
dataGridViewCheckBoxColumn1->ThreeState = true;
dataGridViewCheckBoxColumn1->ValueType = LightStatus::typeid;
return dataGridViewCheckBoxColumn1;
}
#pragma region "data store maintance"
private:
void dataGridView1_CellValueNeeded(Object^ sender,
DataGridViewCellValueEventArgs^ e)
{
e->Value = store[e->RowIndex];
}
private:
void dataGridView1_CellValuePushed(Object^ sender,
DataGridViewCellValueEventArgs^ e)
{
store[e->RowIndex] = (LightStatus) e->Value;
}
#pragma endregion
};
[STAThread]
int main()
{
Application::Run(gcnew TriValueVirtualCheckBox());
}
using System;
using System.IO;
using System.Collections.Generic;
using System.Windows.Forms;
public class TriValueVirtualCheckBox:Form
{
DataGridView dataGridView1 = new DataGridView();
const int initialSize = 500;
Dictionary<int, LightStatus> store
= new Dictionary<int, LightStatus>();
public TriValueVirtualCheckBox() : base()
{
Text = this.GetType().Name;
int index = 0;
for(index=0; index<=initialSize; index++)
store.Add(index, LightStatus.Unknown);
Controls.Add(dataGridView1);
dataGridView1.VirtualMode = true;
dataGridView1.AllowUserToDeleteRows = false;
dataGridView1.CellValueNeeded += new
DataGridViewCellValueEventHandler(dataGridView1_CellValueNeeded);
dataGridView1.CellValuePushed += new
DataGridViewCellValueEventHandler(dataGridView1_CellValuePushed);
dataGridView1.Columns.Add(CreateCheckBoxColumn());
dataGridView1.Rows.AddCopies(0, initialSize);
}
private DataGridViewCheckBoxColumn CreateCheckBoxColumn()
{
DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn1
= new DataGridViewCheckBoxColumn();
dataGridViewCheckBoxColumn1.HeaderText = "Lights On";
dataGridViewCheckBoxColumn1.TrueValue = LightStatus.TurnedOn;
dataGridViewCheckBoxColumn1.FalseValue = LightStatus.TurnedOff;
dataGridViewCheckBoxColumn1.IndeterminateValue
= LightStatus.Unknown;
dataGridViewCheckBoxColumn1.ThreeState = true;
dataGridViewCheckBoxColumn1.ValueType = typeof(LightStatus);
return dataGridViewCheckBoxColumn1;
}
#region "data store maintance"
private void dataGridView1_CellValueNeeded(object sender,
DataGridViewCellValueEventArgs e)
{
e.Value = store[e.RowIndex];
}
private void dataGridView1_CellValuePushed(object sender,
DataGridViewCellValueEventArgs e)
{
store[e.RowIndex] = (LightStatus) e.Value;
}
#endregion
[STAThreadAttribute()]
public static void Main()
{
Application.Run(new TriValueVirtualCheckBox());
}
}
public enum LightStatus
{
Unknown,
TurnedOn,
TurnedOff
};
Imports System.IO
Imports System.Collections.Generic
Imports System.Windows.Forms
Public Class TriValueVirtualCheckBox
Inherits System.Windows.Forms.Form
Dim WithEvents dataGridView1 As New DataGridView
Const initialSize As Integer = 500
Dim store As New Dictionary(Of Integer, LightStatus)
Public Sub New()
MyBase.New()
Text = Me.GetType().Name
Dim index As Integer = 0
For index = 0 To initialSize
store.Add(index, LightStatus.Unknown)
Next
Controls.Add(dataGridView1)
dataGridView1.VirtualMode = True
dataGridView1.AllowUserToDeleteRows = False
dataGridView1.Columns.Add(CreateCheckBoxColumn())
dataGridView1.Rows.AddCopies(0, initialSize)
End Sub
Private Function CreateCheckBoxColumn() As DataGridViewCheckBoxColumn
Dim dataGridViewCheckBoxColumn1 _
As New DataGridViewCheckBoxColumn()
dataGridViewCheckBoxColumn1.HeaderText = "Lights On"
dataGridViewCheckBoxColumn1.TrueValue = LightStatus.TurnedOn
dataGridViewCheckBoxColumn1.FalseValue = LightStatus.TurnedOff
dataGridViewCheckBoxColumn1.IndeterminateValue = _
LightStatus.Unknown
dataGridViewCheckBoxColumn1.ThreeState = True
dataGridViewCheckBoxColumn1.ValueType = GetType(LightStatus)
Return dataGridViewCheckBoxColumn1
End Function
#Region "data store maintance"
Private Sub dataGridView1_CellValueNeeded(ByVal sender As Object, _
ByVal e As DataGridViewCellValueEventArgs) _
Handles dataGridView1.CellValueNeeded
e.Value = store(e.RowIndex)
End Sub
Private Sub dataGridView1_CellValuePushed(ByVal sender As Object, _
ByVal e As DataGridViewCellValueEventArgs) _
Handles dataGridView1.CellValuePushed
store.Item(e.RowIndex) = CType(e.Value, LightStatus)
End Sub
#End Region
<STAThreadAttribute()> _
Public Shared Sub Main()
Application.Run(New TriValueVirtualCheckBox())
End Sub
End Class
Public Enum LightStatus
Unknown
TurnedOn
TurnedOff
End Enum
Remarks
The third state in ternary mode typically represents an uninitialized or indeterminate value.
Setting the ThreeState property of the owning column also sets the ThreeState property of every cell in the column and refreshes the column display. To override the specified value for individual cells, set the cell values after you set the column value.
Unlike the column ThreeState property, the cell ThreeState property does not automatically update the NullValue property of the associated cell style when you change its value. When you change the cell ThreeState property value to true
, be sure to set the NullValue property of the object returned by the Style property to Indeterminate. When you change the ThreeState property value to false
, be sure to set the NullValue property to false
.