Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

C1TrueDBGridC1TrueDBDropDown 控件中的每一列由两个列对象,一个全局及一个特定拆分来表示,所有与数据访问和格式化相关属性都被包含在C1DataColumn 对象中,C1DataColumn对象中的属性均为全局的,C1DataColumn 属性的改变可以对所有列值,甚至跨拆分进行改变,C1DataColumn对象可以按照如下访问:
To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.Columns(0).Caption = "Region"


To write code in C#


C#

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="51a950ff-641a-4b9a-ad35-2d5d1b4a61e6"><ac:plain-text-body><![CDATA[

this.c1TrueDBGrid1.Columns[0].Caption = "Region";

]]></ac:plain-text-body></ac:structured-macro>


 C1DisplayColumnCollection

...

Visual Basic

Me.C1TrueDBGrid1.Splits(0,0).DisplayColumns(0).Style.ForeColor =
System.Drawing.Color.Blue


To write code in C#


C#

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="adc63b49-8a7d-4f1f-b53e-ad6ab7379ac8"><ac:plain-text-body><![CDATA[

this.c1TrueDBGrid1.Splits[0,0].DisplayColumns[0].Style.ForeColor =
]]></ac:plain-text-body></ac:structured-macro>
System.Drawing.Color.Blue;


 GroupedColumnCollection

...

Visual Basic

Me.C1TrueDBGrid1.Splits(0).Caption = "Split00"


To write code in C#


C#

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="7d5fcd66-8a89-4a67-bb89-4b2d46baf7f9"><ac:plain-text-body><![CDATA[

this.c1TrueDBGrid1.Splits[0].Caption = "Split00";

]]></ac:plain-text-body></ac:structured-macro>


 GridStyleCollection


C1TrueDBGridC1TrueDBDropDown 控件均在GridStyleCollection 对象中内置保存并用户自定义Style对象,可以在代码中通过名称访问集合成员,并应用他们到网格、列或拆分以控制控件对象的外观,该集合可以在WinForms
版版True DBGrid控件中使用Styles 属性来访问,此外,该集合和它的成员可以通过C1TrueDBGrid Style Editor 在.NET 中更改。

...

Style 对象封装了C1TrueDBGrid, C1TrueDBDropDown, Split, 或C1DisplayColumn对象的字体,颜色,图片以及格式信息,Style 对象是一个非常灵活且强大的工具,它提供了类似于Excel和Word的格式能力以控制网格显示的外观。
当创建了一个C1TrueDBGridC1TrueDBDropDown控件,它包含了十个内置的样式,您也可以在设计器或代码中更改内置样式或添加自定义样式,此外,通过使用Style对象将格式信息传递给每个单元格或者单元行,两个控件都可以实现几个可选的事件,对象可以通过以下方法访问额:
To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.Styles("Normal").Backcolor = System.Drawing.Color.Gray


To write code in C#


C#

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="06f3afb9-cc45-4f4a-8224-8a08920165d5"><ac:plain-text-body><![CDATA[

this.c1TrueDBGrid1.Styles["Normal"].Backcolor = System.Drawing.Color.Gray;

]]></ac:plain-text-body></ac:structured-macro>


 ValueItems


ValueItems 对象包含一个集合和一组属性,可以在网格中创建数据库值的交替显示,它可以为给定的C1DataColumn对象指定一个允许输入的值,或者它可以用于将原始数据转换为备用文本或者图像显示(例如,
Balance DuePaid in Full 替代数值数据0和1)。ValueItems 对象包含显示属性和ValueItem 对象的集合,该对象通过以下方式访问:
To write code in Visual Basic

...

Visual Basic

Me.C1TrueDBGrid.Columns(0).ValueItems.MaxComboItems = 5


To write code in C#


C#

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="48d94f8c-a8e9-4652-94ee-3156933c9db4"><ac:plain-text-body><![CDATA[

this.c1TrueDBGrid.Columns[0].ValueItems.MaxComboItems = 5;

]]></ac:plain-text-body></ac:structured-macro>


 ValueItemCollection


C1TrueDBGridC1TrueDBDropDown 控件中的每个C1DataColumn 对象将它的值/值对保存到对象中,并命名
ValueItem 对象,ValueItemCollection 对象这些值对的集合,该集合可以通过ValueItems对象的Values 属性访问,例如,想要在集合中选择第一个ValueItem,其代码如下:
To write code in Visual Basic

...

Visual Basic

Me.C1TrueDBGrid.Columns(0).ValueItems.Values(0).DisplayValue = "Canada"


To write code in C#


C#

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="905e927f-fcaa-48dc-85ab-2815a1bbf7d8"><ac:plain-text-body><![CDATA[

this.c1TrueDBGrid.Columns[0].ValueItems.Values[0].DisplayValue = "Canada";

]]></ac:plain-text-body></ac:structured-macro>


 ValueItem


ValueItem 对象由两个属性组成:DisplayValueValueValue 属性指定了数据库中基础值,DisplayValue 属性指定在网格中值的显示,这些对象可以包含在ValueItemCollection 对象中,并在.NET中的ValueItemCollection Editor编辑,该编辑器在ValueItems 对象中的C1TrueDBGrid Designer 下编辑,更多详细信息请参阅使用使用
ValueItemCollection 编辑器编辑器 (Section 6.4)

...

To write code in C#


C#

// 读取一个Split对象属性。
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="47a52d46-e58e-4928-bebb-8a35b030fb1b"><ac:plain-text-body><![CDATA[ variable = this.c1TrueDBGrid1.Splits[0].Property;
]]><
/ac:plain-text-body></ ac:structured-macro>
// 设置一个Split对象属性。
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="99ae8f81-0d7f-4e67-bbae-9f35e5a240ae"><ac:plain-text-body><![CDATA[ this.c1TrueDBGrid1.Splits[0].Property = variable;

]]></ac:plain-text-body></ac:structured-macro>


使用集合的Item 方法创建集合中对象的一个引用,以下代码创建网格默认Split对象一个引用:
To write code in Visual Basic

...

C#

// Declare Split0 as Split object.
C1.Win.C1TrueDBGrid.Split Split0;
// Set Split0 to reference the first Split in the collection.
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="b2ad661e-3fd4-48cc-85a1-e105d747844f"><ac:plain-text-body><![CDATA[ Split0 = this.c1TrueDBGrid1.Splits[0];

]]></ac:plain-text-body></ac:structured-macro>


注意之前的示例中使用了命名空间限定符,推荐使用命名空间限定符已解决与其他控件的潜在命名冲突,例如,如果其他控件也用于同一个项目,并定义一个名为Split的对象,此时WinForms版版True DBGrid 命名空间限定符就是必要的,命名控件限定符也用于其他控件。
因此Item方法对于隐含集合,它会被省略:
To write code in Visual Basic

...

C#

// 声明Split0为Split对象。
C1.Win.C1TrueDBGrid.Split Split0;

// 设置Split0为集合中第一个Split的引用。
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="8afa9c59-d612-4e9c-b3ae-e646fee5c6a3"><ac:plain-text-body><![CDATA[Split0 = this.c1TrueDBGrid1.Splits[0];

]]></ac:plain-text-body></ac:structured-macro>


使用Split0来读取或设置Split 对象属性或执行它的方法:
To write code in Visual Basic


Visual Basic

' 读取一个Split对象属性。
variable = Split0.Property

' 设置一个Split对象属性。
Split0.Property = variable

' 执行一个Split对象方法。
Split0.Method (arg1, arg2, ...)


To write code in C#


C#

// 读取一个Split对象属性。
variable = Split0.Property;

// 设置一个Split对象属性。
Split0.Property = variable;

// 执行一个Split对象方法。
Split0.Method (arg1, arg2, ...);


在很多时候,您需要读取和设置多个对象的属性,例如:
To write code in Visual Basic


Visual Basic

' 读取一个Split对象的属性。
variable1 = Me.C1TrueDBGrid1.Splits(0,0).Property1

variable2 = Me.C1TrueDBGrid1.Splits(0,0).Property2

' 设置一个Split对象的属性。
Me.C1TrueDBGrid1.Splits(0,0).Property1 = variable1
Me.C1TrueDBGrid1.Splits(0,0).Property2 = variable2


To write code in C#


C#

// 读取一个Split对象的属性。
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="8c9d52a1-7abc-44da-8d16-24ef1faa7176"><ac:plain-text-body><![CDATA[ variable1 = this.c1TrueDBGrid1.Splits[0,0].Property1;

variable2 = this.c1TrueDBGrid1.Splits[0,0].Property2;
]]></ac:plain-text-body></ ac:structured-macro>
// 设置一个Split对象的属性。
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="28b8d917-344c-4066-8070-f5422be7a14d"><ac:plain-text-body><![CDATA[ this.c1TrueDBGrid1.Splits[0,0].Property1 = variable1;

this.c1TrueDBGrid1.Splits[0,0].Property2 = variable2;

]]></ac:plain-text-body></ac:structured-macro>


该段代码效率是非常低下的,因为C1TrueDBGrid1.Splits(0,0)这个对象被访问的次数非常多,更有效的方法是对对象创建一个引用并可以反复的使用它:
To write code in Visual Basic

...

C#

// 声明Split0为一个Split对象。
C1TrueDBGrid.Split Split0;

// 设置Split0为集合中第一个Split的引用。
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="368a1222-6c8d-4553-bb28-a0ab94d6bd73"><ac:plain-text-body><![CDATA[ Split0 = this.c1TrueDBGrid1.Splits[0,0];
]]></ac:plain-text-body></ ac:structured-macro>
// 读取一个Split对象的属性。
variable1 = Split0.Property1;

variable2 = Split0.Property2; // Set a Split object's properties.
Split0.Property1 = variable1;
Split0.Property2 = variable2;

...

C#

// 声明Cols为一个Columns集合对象,此时将它设置为C1TrueDBGrid1的C1DataColumnCollection对象。
C1.Win.C1TrueDBGrid.C1DataColumnCollection Cols;
Cols = this.c1TrueDBGrid1.Columns;

// 声明Col0为一个C1DataColumn对象,此时将它设置为集合中第一个Column对象的引用。
C1.Win.C1TrueDBGrid.C1DataColumn Col0 = new C1TrueDBGrid.DataColumn();
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="8493a874-3967-4ed7-b9d3-d47f8d0b9354"><ac:plain-text-body><![CDATA[ Col0 = Cols[0];
]]><
/ac:plain-text-body></ ac:structured-macro>
// 读取并设置C1DataColumn对象的Property1。
variable1 = Col0.Property1; Col0.Property1 = variable1;

// 执行C1DataColumn对象的Method1 (声明为一个Sub)
Col0.Method1 (arg1, arg2, ...);

// 执行C1DataColumn对象的Method2 (声明为一个Function)。
variable2 = Col0.Method2(arg1);

...

Visual Basic 也提供高效的声明方式,可以不需要精确的分配变量就能设置对象的多个属性,例如下述代码设置网格中第一列多个属性(注意集合是从0开始的):
To write code in Visual Basic


Visual Basic

With Me.C1TrueDBGrid1.Columns(0)
.Property1 = variable1
.Property2 = variable2
End With


To write code in C#


C#

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="cbf41aed-3df6-4d31-b6b7-5255d986a345"><ac:plain-text-body><![CDATA[

this.c1TrueDBGrid1.Columns[0].Property1 = variable1;

this.c1TrueDBGrid1.Columns[0].Property2 = variable2;

]]></ac:plain-text-body></ac:structured-macro>


 添加成员


为了创建并添加一个对象到一个集合,需要使用集合的 Add 方法,该方法将对象作为它的唯一参数,例如:通过添加
一个ValueItem对象到ValueItemCollection对象中创建包含多个值项的列:
To write code in Visual Basic

...

Visual Basic

' 创建一个ValueItem对象。
Dim v As C1TrueDBGrid.ValueItem = new C1TrueDbGrid.ValueItem()
Me.C1TrueDBGrid1.Columns(0).ValueItems.Values.Add(v)


To write code in C#


C#

// 创建一个ValueItem对象。

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="53f7c813-ddeb-4cb3-b1f2-d1f15d4b13c3"><ac:plain-text-body><![CDATA[

C1TrueDBGrid.ValueItem v = new C1TrueDBGrid.ValueItem();

this.c1TrueDBGrid1.Columns[0].ValueItems.Values.Add(v);

]]></ac:plain-text-body></ac:structured-macro>


该代码添加了一个ValueItem 对象到C1TrueDBGrid1的ValueItemCollection中,或者创建了一个从索引1开始的ValueItem 对象插入方法:
To write code in Visual Basic

...

Visual Basic

' 创建了一个从索引1开始的Split对象。
Dim S As C1TrueDBGrid.ValueItem
Me.C1TrueDBGrid1.Columns(0).ValueItems.Values.Insert(1, S)


To write code in C#


C#

//创建了一个从索引开始的Split对象。

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="48493b2a-9d4e-465f-8790-f7b8b21ad25a"><ac:plain-text-body><![CDATA[

C1TrueDBGrid.ValueItem S; this.c1TrueDBGrid1.Columns[0].ValueItems.Values.Insert(1, S);

]]></ac:plain-text-body></ac:structured-macro>


唯一不能使用AddRemoveAt 方法添加或删除的对象是Split对象,Split对象的 InsertHorizontalSplit /
RemoveHorizontalSplitInsertVerticalSplit / RemoveVerticalSplit 方法必须正确使用添加或移除Splits,这些方法可以在设计时右键点击网格的上下文菜单使用。

...

To write code in C#


C#

// 从索引1开始移除Split对象。
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="62348a6e-d682-43a9-afe3-c974a68cf1d1"><ac:plain-text-body><![CDATA[ this.c1TrueDBGrid1.Columns[0].ValueItems.Values.RemoveAt(1);

]]></ac:plain-text-body></ac:structured-macro>


当该语句被执行后,集合中的所有索引值大于1的splits都会下调1并填充移除split的空间,注意到RemoveAt 方法的参数是待移除成员的位置。 5.18.1.3 使用Count属性
使用集合的Count属性决定集合中对象的编号:
To write code in Visual Basic

...

C#

for (n = 0; n < this.c1TrueDBGrid1.Columns.Count; n++) {
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="0127d7a2-e049-4ff5-9b31-f767ef1838bb"><ac:plain-text-body><![CDATA[ Console.WriteLine(this.c1TrueDBGrid1.Columns[n].Caption);
]]></ac:plain-text-body></ac:structured-macro>

}


Count 属性也可以用于追加和移除列:
To write code in Visual Basic

...

Visual Basic

' 决定列数。
Dim NumCols As Integer
NumCols = Me.C1TrueDBGrid1.Columns.Count

' 在Columns集合后面追加一个列。
Dim C As C1TrueDBGrid.C1DataColumn = New C1TrueDBGrid.C1DataColumn()
Me.C1TrueDBGrid1.Columns.Insert(NumCols, C) 
' 让新的列可见,默认情况下在运行时创建的列是不可见的。
Me.C1TrueDBGrid1.Splits(0).DisplayColumns(C).Visible =

...

True 
' 网格中的所有列将通过循环全部移除。
While Me.C1TrueDBGrid1.Columns.Count
Me.C1TrueDBGrid1.Columns.RemoveAt(0)
End While




To write code in C#


C#

// 决定列数。
int NumCols; NumCols = this.c1TrueDBGrid1.Columns.Count;

// 在Columns集合后面追加一个列。
C1TrueDBGrid.C1DataColumn C = new C1TrueDBGrid.C1DataColumn(); this.c1TrueDBGrid1.Columns.Insert(NumCols, C);

// 让新的列可见,默认情况下在运行时创建的列是不可见的。
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="3c1a0556-9afc-45fc-95ee-6a4f943dd4d4"><ac:plain-text-body><![CDATA[ this.c1TrueDBGrid1.Splits[0].DisplayColumns[C].Visible = true;
]]></ac:plain-text-body></ ac:structured-macro>
// 网格中的所有列将通过循环全部移除。
while ( this.c1TrueDBGrid1.Columns.Count > 0 )

{ this.c1TrueDBGrid1.Columns.RemoveAt(0);
}

...

C#

C1TrueDBGrid.C1DataColumn c;

foreach (c In this.c1TrueDBGrid1.Columns) {
Console.WriteLine(c);
}

...