Page tree

Versions Compared

Key

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

...

您可以使用.NET的集合编辑器更改GridStyleCollection,以在运行时更改整个网格的外观,例如使列头中的标题文本居中,可以更改内置Heading 样式的HorizontalAlignment 属性为AlignHorzEnum.Center
以下声明的代码结果:
To write code in Visual Basic

Visual Basic

Me.C1TrueDBGrid1.Styles("Heading").HorizontalAlignment = AlignHorzEnum.Center

To write code in C#

C#

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="cefc84d1-6aa2-4538-aec8-7b60f8b7eaa3"><ac:plain-text-body><![CDATA[

this.c1TrueDBGrid1.Styles["Heading"].HorizontalAlignment = AlignHorzEnum.Center;

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

然而,它可以不必要使用C1TrueDBGrid 样式编辑器样式编辑器 或者在代码中控制GridStyleCollection 的成员命名,网格和它的控件对象给出了几个属性并返回了Style 对象,正如下一节所描述的,网格的外观可以直接通过这些对象进行微调,更多详细信息请参阅使用使用 C1TrueDBGrid样式编辑器样式编辑器 (Section 6.5)

...

Visual Basic

Dim myfont As New Font(Me.C1TrueDBGrid1.Font, FontStyle.Bold)
Me.C1TrueDBGrid1.CaptionStyle.Font = myfont

Me.C1TrueDBGrid1.Styles("Caption").Font = myfont

To write code in C#

C#

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="f4e3adde-6d88-4244-9757-694c5ea31c9b"><ac:plain-text-body><![CDATA[

Font myfont = new Font(this.c1TrueDBGrid1.Font, FontStyle.Bold); this.c1TrueDBGrid1.CaptionStyle.Font = myfont; this.c1TrueDBGrid1.Styles["Caption"].Font = myfont;

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

第一个声明指定了网格标题栏的字体,因为这不是一个根样式,所以命名标题样式也会改变。

...

Visual Basic

Dim myfont As Font
myfont = New Font (Me.C1TrueDBGrid1.Styles("Normal").Font, FontStyle.Bold)
Me.C1TrueDBGrid1.Styles("Normal").Font = myfont

To write code in C#

C#

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="aad3b00d-c95f-4dce-a07f-0dd405785158"><ac:plain-text-body><![CDATA[

Font myfont; myfont = new Font (this.c1TrueDBGrid1.Styles["Normal"].Font, FontStyle.Bold); this.c1TrueDBGrid1.Styles["Normal"].Font = myfont;

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

 示例2:仅影响第一个拆分的数据单元格

在本示例中,只影响第一个拆分的数据单元格,这是因为拆分标题,列头和列脚都从内置样式Caption, Heading和 Footing中分别继承字体。

以下代码仅影响第一个拆分的数据单元格:
To write code in Visual Basic

Visual Basic

Dim myfont As Font
myfont = New Font (Me.C1TrueDBGrid1.Splits(0).Style.Font, FontStyle.Bold)
Me.C1TrueDBGrid1.Splits(0).Style.Font = myfont

To write code in C#

C#

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="025badf6-dd91-4a21-bec2-4b6c2d0a1d46"><ac:plain-text-body><![CDATA[

Font myfont; myfont = new Font (this.c1TrueDBGrid1.Splits[0].Style.Font, FontStyle.Bold); this.c1TrueDBGrid1.Splits[0].Style.Font = myfont;

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

 示例3:仅在第一个拆分中影响所有元素

该示例将第一个的粗体在第一个拆分的所有元素中呈现,此外Style 属性对CaptionStyle, HeadingStyle, 及FooterStyle 属性的设置也是必要的。

以下代码将仅在第一个拆分中影响所有元素:
To write code in Visual Basic

Visual Basic

Dim myfont As Font
Dim myfont1 As Font
Dim myfont2 As Font
Dim myfont3 As Font
myfont = New Font (Me.C1TrueDBGrid1.Splits(0).Style.Font, FontStyle.Bold) Me.C1TrueDBGrid1.Splits(0).Style.Font = myfont

myfont1 = New Font (Me.C1TrueDBGrid1.Splits(0).CaptionStyle.Font, FontStyle.Bold) Me.C1TrueDBGrid1.Splits(0).CaptionStyle.Font =

...

myfont1 
myfont2 = New Font (Me.C1TrueDBGrid1.Splits(0).HeadingStyle.Font, FontStyle.Bold) Me.C1TrueDBGrid1.Splits(0).HeadingStyle.Font =

...

myfont2 
myfont3 = New Font (Me.C1TrueDBGrid1.Splits(0).FooterStyle.Font, FontStyle.Bold) Me.C1TrueDBGrid1.Splits(0).FooterStyle.Font = myfont3


To write code in C#

C#

Font myfont;
Font myfont1;
Font myfont2;

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="e66e31b3-e000-4991-9099-1cf4de047ff8"><ac:plain-text-body><![CDATA[

Font myfont3; myfont = new Font (this.c1TrueDBGrid1.Splits[0].Style.Font, FontStyle.Bold); this.c1TrueDBGrid1.Splits[0].Style.Font = myfont; myfont1 = new Font (this.c1TrueDBGrid1.Splits[0].CaptionStyle.Font, FontStyle.Bold); this.c1TrueDBGrid1.Splits[0].CaptionStyle.Font = myfont1; myfont2 = new Font (this.c1TrueDBGrid1.Splits[0].HeadingStyle.Font, FontStyle.Bold); this.c1TrueDBGrid1.Splits[0].HeadingStyle.Font = myfont2; myfont3 = new Font (this.c1TrueDBGrid1.Splits[0].FooterStyle.Font, FontStyle.Bold); this.c1TrueDBGrid1.Splits[0].FooterStyle.Font = myfont3;

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

 示例4:仅影响第一个拆分的第一个列中的数据单元格

...

Visual Basic

Dim myfont As Font
myfont = New Font (Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).Style.Font, FontStyle.Bold)
Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).Style.Font = myfont

To write code in C#

C#

Font myfont;

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="dc10de29-ec05-40bf-b58b-4b53b1d826d4"><ac:plain-text-body><![CDATA[

myfont = new Font (this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Style.Font, FontStyle.Bold); this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Style.Font = myfont;

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

 示例5:仅在第一个拆分的第一列影响所有元素

本示例将第一个拆分的第一列中的所有元素设置为粗体,此外Style 属性对HeadingStyle, 及FooterStyle 属性的设置也是必要的。

以下代码仅在第一个拆分的第一列影响所有元素:
To write code in Visual Basic

Visual Basic

Dim myfont As Font
Dim myfont1 As Font
Dim myfont2 As Font
myfont = New Font (Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).Style.Font, FontStyle.Bold)
Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).Style.Font = myfont
myfont1 = New Font (Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).HeadingStyle.Font, FontStyle.Bold)
Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).HeadingStyle.Font = myfont1
myfont2 = New Font (Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).FooterStyle.Font, FontStyle.Bold)
Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).FooterStyle.Font = myfont2

To write code in C#

C#

Font myfont;
Font myfont1;
Font myfont2;

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="324feb3a-8900-44a9-a9e1-0a445d939a44"><ac:plain-text-body><![CDATA[

myfont = new Font (this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Style.Font, FontStyle.Bold); this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Style.Font = myfont;

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


Wiki Markup
 \\
myfont1 = new Font (this.c1TrueDBGrid1.Splits\[0\].DisplayColumns\[0\].HeadingStyle.Font, FontStyle.Bold); this.c1TrueDBGrid1.Splits\[0\].DisplayColumns\[0\].HeadingStyle.Font = myfont1;  
myfont2 = new Font (this.c1TrueDBGrid1.Splits\[0\].DisplayColumns\[0\].FooterStyle.Font, FontStyle.Bold);
this.c1TrueDBGrid1.Splits\[0\].DisplayColumns\[0\].FooterStyle.Font = myfont2;

...

在本示例中,只有第一个拆分中的数据单元格被影响,这时因为拆分标题,列头与列脚分别从内置样式 Caption,
Heading, 及Footing继承背景颜色。

以下代码将值更改第一个拆分中的数据单元格:
To write code in Visual Basic

Visual Basic

Me.C1TrueDBGrid1.Splits(0).Style.BackColor = System.Drawing.Color.Lavender

To write code in C#

C#

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="4bdebefe-80a9-4818-8edd-e60c21d23ae9"><ac:plain-text-body><![CDATA[

this.c1TrueDBGrid1.Splits[0].Style.BackColor = System.Drawing.Color.Lavender;

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

 示例8:仅更改第一个拆分的第一列中的数据单元格

在本示例中,仅有第一个拆分中的第一列中的数据可以被影响,这时因为列头和列脚从内置样式Heading 和 Footing中分别继承它们的背景颜色。

以下代码会对第一个拆分中第一列数据单元格进行更改:
To write code in Visual Basic

Visual Basic

Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).Style.BackColor =
System.Drawing.Color.Lavender

To write code in C#

C#

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="93d96b45-ed62-4913-b8e1-ead0ce2f01e0"><ac:plain-text-body><![CDATA[

this.c1TrueDBGrid1.Splits[0].DisplayColumnsp[0].Style.BackColor =
]]></ac:plain-text-body></ac:structured-macro>
System.Drawing.Color.Lavender;

 示例9:设置C1DisplayColumn对象的对齐

...

Visual Basic

Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).Style.HorizontalAlignment =
C1.Win.C1TrueDBGrid.AlignHorzEnum.Center

To write code in C#

C#

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="89ff42f7-4cc7-4a80-81e1-6f73cbcdbf5e"><ac:plain-text-body><![CDATA[

this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Style.HorizontalAlignment =
]]></ac:plain-text-body></ac:structured-macro>
C1.Win.C1TrueDBGrid.AlignHorzEnum.Center;

 示例10:设置列标题的对齐

本示例阐述了列头和列脚的普通与特定对齐之间的区别,如果HeadingStyle (或FooterStyle) 属性的HorizontalAlignment 属性成员未被设置为AlignHorzEnum.General,此时头(或脚) 会根据数据单元格独立对齐。

以下代码设置了列头的对齐:
To write code in Visual Basic

Visual Basic

With Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0)
.HeadingStyle.HorizontalAlignment = C1.Win.C1TrueDBGrid.AlignHorzEnum.Near
.FooterStyle.HorizontalAlignment = C1.Win.C1TrueDBGrid.AlignHorzEnum.Far .Style.HorizontalAlignment = C1.Win.C1TrueDBGrid.AlignHorzEnum.Center
End With

To write code in C#

C#

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="722a8c44-6585-4a79-b379-b7e35caff569"><ac:plain-text-body><![CDATA[

this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].HeadingStyle.HorizontalAlignment = C1.Win.C1TrueDBGrid.AlignHorzEnum.Near;

]]></ac:plain-text-body></ac:structured-macro>
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="b1f704c4-5020-4ab8-8309-14e52dad35bd"><ac:plain-text-body><![CDATA[


this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].FooterStyle.HorizontalAlignment = C1.Win.C1TrueDBGrid.AlignHorzEnum.Far;

]]></ac:plain-text-body></ac:structured-macro>
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="517cebc7-9665-4ded-9df1-3e5bf33951ef"><ac:plain-text-body><![CDATA[


this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Style.HorizontalAlignment =


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

C1.Win.C1TrueDBGrid.AlignHorzEnum.Center;

 对单元格应用样式

WinForms版版True DBGrid 提供了三种方法控制单元格中字符的显示:

...

Visual Basic

Me.C1TrueDBGrid1.AddCellStyle(C1.Win.C1TrueDBGrid.CellStyleFlag.CurrentCell +
C1.Win.C1TrueDBGrid.CellStyleFlag.UpdatedCell, Me.C1TrueDBGrid1.Styles("RedBold"))

To write code in C#

C#

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="5351273f-46a7-4b07-b32b-58389947c207"><ac:plain-text-body><![CDATA[

this.c1TrueDBGrid1.AddCellStyle(C1.Win.C1TrueDBGrid.CellStyleFlag.CurrentCell+

C1.Win.C1TrueDBGrid.CellStyleFlag.UpdatedCell, this.c1TrueDBGrid1.Styles["RedBold"]);

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


Image Modified 注意注意: 当前单元格状态当MarqueeStyle 属性没有设置为MarqueeEnum.FloatingEditor时才会实现,浮动编辑器选取框总是使用由控制面板设置的系统高亮颜色。

虽然指定单元格条件的方法提供了更多的控制和灵活性,但它也需要写额外的代码应对某些常见的情况。调用AddCellStyle 即可立即起效,它可以用于交互效果并适用于整个网格特征。

...

C#

private void c1TrueDBGrid1_FetchCellStyle( object sender,
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="a8e15d91-8b01-45c9-907d-b10f36e01b7b"><ac:plain-text-body><![CDATA[ C1.Win.C1TrueDBGrid.FetchCellStyleEventArgs e) { int N; N = (int) this.c1TrueDBGrid1[e.Row, e.Col]; if ( N > 1000 ) {
]]></ac:plain-text-body></ac:structured-macro>
e.CellStyle.ForeColor = System.Drawing.Color.Blue; }
}

...

C#

private void c1TrueDBGrid1_FetchCellStyle( object sender,
C1.Win.C1TrueDBGrid.FetchCellStyleEventArgs e) { switch (e.Col) { case 4:
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="fbe64c0a-67ad-4c2f-b2ce-5474d0b29b2b"><ac:plain-text-body><![CDATA[ long Col1, long Col2; Col1 = (long)this.c1TrueDBGrid1[e.Row, 1]; Col2 = (long)this.c1TrueDBGrid1[e.Row, 2]; if ( Col1 - Col2 < 0 ) CellStyle.ForeColor = System.Drawing.Color.Red break; case 7:
]]></ac:plain-text-body></ac:structured-macro>
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="3f59752b-7e1e-41be-be00-63e5c5eeb16c"><ac:plain-text-body><![CDATA[
string S; S = this.c1TrueDBGrid1[e.Row, 7].ToString(); if ( S == TextBox1.Text ) {
]]></ac:plain-text-body></ac:structured-macro>

Font myfont = new Font(CellStyle.Font, FontStyle.Bold);

CellStyle.Font = myfont; } break; default: Console.WriteLine ("FetchCellStyle not handled: " + e.Col);
}
}


出于更有效的因素,可以只设置列的FetchStyle属性为True,因而您可以在FetchCellStyle事件中处理。

...

Visual Basic

Private Sub TDBGrid1_FetchRowStyle(ByVal sender As Object, ByVal e As
C1.Win.C1TrueDBGrid.FetchRowStyleEventArgs) Handles C1TrueDBGrid1.FetchRowStyle

To write code in C#

C#

private void TDBGrid1_FetchRowStyle( object sender,
C1.Win.C1TrueDBGrid.FetchRowStyleEventArgs e)

虽然FetchRowStyle 事件可以用于实现间隔行颜色方案,一个更容易且更有效的方法是使用AlternatingRows属性完成相同的任务,可以同时使用内置的EvenRow 样式和 OddRow 样式。
10.3.5 单元格样式评估顺序

...

Visual Basic

With Me.C1TrueDBGrid1.CaptionStyle
.BackgroundImage = System.Drawing.Image.FromFile("c:\bubbles.bmp")
.BackgroundPictureDrawMode =
C1.Win.C1TrueDBGrid.BackgroundPictureDrawModeEnum.Tile
.ForeColor = System.Drawing.Color.White
.Font = New Font(.Font, FontStyle.Bold)
End With

To write code in C#

C#

this.c1TrueDBGrid1.CaptionStyle.BackgroundImage = System.Drawing.Image.FromFile(@"c:\bubbles.bmp"); this.c1TrueDBGrid.BackgroundPictureDrawMode =
C1.Win.C1TrueDBGrid.BackgroundPictureDrawModeEnum.Tile; this.c1TrueDBGrid1.CaptionStyle.ForeColor = System.Drawing.Color.White;
this.c1TrueDBGrid1.CaptionStyle.Font = new Font(this.c1TrueDBGrid1.CaptionStyle.Font,
FontStyle.Bold);

该代码会调整标题文本的颜色,以及将它加粗,其效果如下显示。

为了在设计时实现相同的效果,也可以编辑C1TrueDBGrid Style Editor中的内置Caption样式,或者属性窗口中的 CaptionStyle属性成员。
默认情况下,网格元素中的背景图位置居中,根据背景位图的高度调整BackgroundPictureDrawMode 属性值以确保整个区域被填充,该属性决定了图片是否会居中,平铺或者拉伸以适应整个区域,其显示如下表。

...

C#

// 给出网格的一个平面外观并记录选择,行分隔和滚动条移除。
this.c1TrueDBGrid1.InactiveStyle.ForeColor = System.Drawing.Color.White; this.c1TrueDBGrid1.RecordSelectors = false; this.c1TrueDBGrid1.RowDivider.Style = LineStyleEnum.None; this.c1TrueDBGrid1.RowHeight = 16; this.c1TrueDBGrid1.HScrollBar.Style = ScrollBarStyleEnum.None; this.c1TrueDBGrid1.VScrolBar.Style = ScrollBarStyleEnum.None; this.c1TrueDBGrid1.MarqueeStyle = MarqueeEnum.NoMarquee;

// 设置背景模式用于默认的数据单元格(不会打断Normal样式)。


<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="da8e66b5-2957-4533-8993-7632ac69fb47"><ac:plain-text-body><![CDATA[

this.c1TrueDBGrid1.Splits[0].Style.BackgroundImage = System.Drawing.Image.FromFile("paper.bmp");
]]></ac:plain-text-body></ac:structured-macro>
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="94e7872e-1bee-4335-b30c-5f155028da10"><ac:plain-text-body><![CDATA[this.c1TrueDBGrid1.Splits[0].Style.BackgroundPictureDrawMode =
]]></ac:plain-text-body></ac:structured-macro>
BackgroundPictureDrawModeEnum.Tile;

// 在左侧创建一个空的非绑定列用以装载订书环,移除它的分隔线并设置它Style对象的BackroundBitmap属性。
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="0c5090a7-428f-4a2f-8faa-90d80ea21c14"><ac:plain-text-body><![CDATA[ C1TrueDBGrid.C1DataColumn col = new C1TrueDBGrid.C1DataColumn(); this.C1TrueDBGrid.Columns.InsertAt(0, col); C1TrueDBGrid.C1DisplayColumn C = this.c1TrueDBGrid1.Splits[0].DisplayColumns[col];
]]></ac:plain-text-body></ac:structured-macro>
C.Width = 48;
C.Visible = true;
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="1920f423-01b7-4ea9-9c41-bf46bc124919"><ac:plain-text-body><![CDATA[ C.Style.BackgroundImage = System.Drawing.Image.FromFile["rings.bmp"];
]]></ac:plain-text-body></ac:structured-macro>
C.HeaderDivider = false;
C.ColumnDivider.Style = LineStyleEnum.None;

// 滚动被绑定列到视图中。
this.c1TrueDBGrid1.Col = 0;

// 重新制定Title列的大小并移除它的头分隔线。
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="c70613c8-82a7-4157-be78-b6f492b32eed"><ac:plain-text-body><![CDATA[ C = this.c1TrueDBGrid1.Splits[0].DisplayColumns["Title"];
]]></ac:plain-text-body></ac:structured-macro>
C.Width = 380;
C.HeaderDivider = false;

// 使用订书环位图的一个小角作为列标题的一个背景,并调整相应的字体与文本颜色。
Font myfont;
this.c1TrueDBGrid1.HeadingStyle.BackgroundImage = System.Drawing.Image.FromFile("corner.bmp");
this.c1TrueDBGrid1.HeadingStyle.BackgroundPictureDrawMode = BackgroundPictureDrawModeEnum.Tile; myfont = new Font(.Font, 10, FontStyle.Bold); this.c1TrueDBGrid1.HeadingStyle.Font = myfont; this.c1TrueDBGrid1.HeadingStyle.ForeColor = System.Drawing.Color.White;


 显示前景图片

使用前景图片对静态网格元素提供可视化提示,如标题栏,列头以及列脚。前景图片由StyleForegroundImage 属性指定,前景图可以显示在除文本以外的地方,或者代替文本显示,但不可以覆盖文本显示。
前景图片有ForeGroundPicturePosition 属性,用以指定前景图片在单元文本中的相对位置,值与呈现如下图所示:
PositionDisplayNear Far

...