Page tree
Skip to end of metadata
Go to start of metadata

此基于任务的帮助假设你很熟悉在Visual Studio里编程,并且知道一般如何使用C1TrueDBGrid控件。如果你不熟悉True
DBGrid for WinForms 产品,第一步请参见, WinForms的的True DBGrid教程教程 (Section 12) 。在此章节的每一个主题都使用True DBGrid for WinForms产品提供了指定任务的解决方案。
每一个基于任务的帮助主题也设想你已经创建了一个新的.NET工程。一些例子中,引用被默认安装在Documents\ComponentOne Samples\Common上的C1NWind.mdb 数据库。


 添加新行到C1TrueDBGrid


增加一个新的行到C1TrueDBGrid,使用AllowAddNew 属性和UpdateData 方法。完成下面的步骤:


  1. 设置AllowAddNew 属性值为True.


在此设计器中在此设计器中
在属性窗口中放置AllowAddNew 属性并设置它的值为True. 在代码中在代码中添加下面的代码到Form_Load事件:
To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.AllowAddNew = True


To write code in C#


C#

this.c1TrueDBGrid1.AllowAddNew = true;


  1. 通过添加下面的代码到Form_Load事件,移动到网格最后一列:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.MoveLast()


To write code in C#


C#

this.c1TrueDBGrid.MoveLast();


  1. 选择一个新行:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.Row = Me.C1TrueDBGrid1.Row + 1
Me.C1TrueDBGrid1.Select()


To write code in C#


C#

this.c1TrueDBGrid1.Row = this.c1TrueDBGrid1.Row + 1; this.c1TrueDBGrid1.Select();


  1. 给前三列赋值:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.Columns(0).Text = "New Row"
Me.C1TrueDBGrid1.Columns(1).Text = "New Row"
Me.C1TrueDBGrid1.Columns(2).Text = "New Row"


To write code in C#


C#

this.c1TrueDBGrid1.Columns[0].Text = "New Row"; this.c1TrueDBGrid1.Columns[1].Text = "New Row"; this.c1TrueDBGrid1.Columns[2].Text = "New Row";


  1. 更新数据到数据集中:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.UpdateData()


To write code in C#


C#

this.c1TrueDBGrid1.UpdateData();


你已经完成了


在这个例子中,新的行已经被添加到了C1NWind.mdb:

有一个 SelectedRows 属性指出一个集合,该集合包含一个在网格中的所有被选中的行的引用。


 选择行


高亮一行不选择该行。为了被选中的行,其必须被添加到SelectedRowCollection。 使用Add方法完成。
添加下面的代码到Select按钮的Click事件:
To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.SelectedRows.Add(Me.C1TrueDBGrid1.Bookmark)


To write code in C#


C#

this.c1TrueDBGrid1.SelectedRows.Add(this.c1TrueDBGrid1.Bookmark);


你已经完成了


使用该例子,当前行被选中:

参见教程教程5: 使用书签选择多行使用书签选择多行 (Section 12.5)为例,Add 方法被使用。


 访问网格中选中行的值


访问在网格中被选中行的值,你必须访问SelectedRows 集合。使用下面的代码来输出被选中的每一行到调试窗口:
To write code in Visual Basic


Visual Basic

Dim row As Integer
For Each row In Me.C1TrueDBGrid1.SelectedRows
Debug.WriteLine(Me.C1TrueDBGrid1.Columns(0).CellValue(row))
Next


To write code in C#


C#

int row; foreach (int row in this.c1TrueDBGrid1.SelectedRows) {
Debug.WriteLine(this.c1TrueDBGrid1.Columns(0).CellValue(row));
}


你可以使用网格的下标来访问行。使用下面的代码:
To write code in Visual Basic


Visual Basic

Dim row As Integer
For Each row In Me.C1TrueDBGrid1.SelectedRows
Debug.WriteLine(Me.C1TrueDBGrid1(row, 0).ToString())


Next
To write code in C#


C#

int row; foreach (int row in this.c1TrueDBGrid1.SelectedRows) {
Debug.WriteLine(this.c1TrueDBGrid1(row, 0).ToString());
}


在这个例子中,下面的代码被添加到了教程教程5: 使用书签选择多行使用书签选择多行 (Section 12.5)Button1_Click 事件:
To write code in Visual Basic


Visual Basic

Dim row As Integer
For Each row In Me.C1TrueDBGrid1.SelectedRows
Debug.WriteLine(Me.C1TrueDBGrid1(row, 1).ToString())
Next


To write code in C#


C#

int row; foreach (int row in this.c1TrueDBGrid1.SelectedRows) {
Debug.WriteLine(this.c1TrueDBGrid1(row, 1).ToString());
}


你已经完成了


选择行的每一个composer的Last名字被输出到调试窗口中:


 控制网格之间的交互


下面的基于任务的帮助主题详细地介绍了,你如何限制你的用户同True DBGrid for WinForms之间的交互。例如,你可以通过排序,编辑等阻止用户和网格的交互。


 禁用列分类


使列排序不可用,设置AllowSort 属性为False。该属性可以在设计器中或者在代码中被设置。
在设计器中
在属性窗口中放置AllowSort属性并设置它的值为False.


在代码中


添加下面的代码到Form_Load 事件以便设置AllowSort 属性为False.
To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.AllowSort = False


To write code in C#


C#

this.c1TrueDBGrid1.AllowSort = false;


你所完成的单击First列不排序该类:


 从正在编辑的单元格锁定一个单元格


你可能想要阻止最终用户编辑特殊单元格中的数据。你可以使用FetchCellStyle事件锁住单独的网格单元格在运行时阻止其被编辑。为了锁住单元格(1, 0)中的值,完成下面的步骤:
1. 设置包含单元格的列的FetchStyle 属性值为True.
在设计器中在设计器中
打开C1TrueDBGrid Designer。。如何访问C1TrueDBGrid设计器设计器,参见访问访问C1TrueDBGrid 设计器设计器
(Section 6.6.1)。在右边窗格,通过单击它的猎头来选择First 列。它也能从工具条中的下拉框中被选择。在左边窗格,单击 Display Columns标签。
设置FetchStyle属性值为True. 单击OK来关闭设计器。
在代码中在代码中添加下面的代码到Form_Load事件:
To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).FetchStyle = True


To write code in C#


C#

this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].FetchStyle = true;


2. 只为行1设置CellStyle对象的Locked属性为True :
To write code in Visual Basic


Visual Basic

Private Sub C1TrueDBGrid1_FetchCellStyle(ByVal sender As Object, ByVal e As
C1.Win.C1TrueDBGrid.FetchCellStyleEventArgs) Handles
C1TrueDBGrid1.FetchCellStyle If e.Row = 1 Then
e.CellStyle.Locked = True End If
End Sub


To write code in C#


C#

private void C1TrueDBGrid1_FetchCellStyle(object sender,
C1.Win.C1TrueDBGrid.FetchCellStyleEventArgs e) { if (e.Row == 1) {
e.CellStyle.Locked = true; }
}


你所完成的


在该单元格(1, 0) 的值不能被编辑:


 冻结列


使网格中的列冻结,设置Frozen属性值为True。冻结列阻止其以及索引小于它的列滚动。该属性可以在设计器中或者代码中被设置。


在设计器中


  1. 打开 C1TrueDBGrid Designer。提供参考关于如何访问 C1TrueDBGrid设计器,参见访问访问C1TrueDBGrid 设计设计器器 (Section 6.6.1)
  2. 在设计器中,在右边窗格中,通过点击它来选择Last 列。


该列也能通过选择Last 从工具条中的下拉列表被选择。


  1. 在左边窗格选择Display Column标签。
  2. 定位Frozen属性并设置它的值为True。。
  3. 单击 OK以关闭设计器。在代码中


添加下面的代码到Form_Load 事件以使Last列被冻结:
To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.Splits(0).DisplayColumns("Last").Frozen = True


To write code in C#


C#

this.c1TrueDBGrid1.Splits[0].DisplayColumns["Last"].Frozen = true;


你所完成的


FirstLast列columns都被冻结,并且当Grid被滚动到最右边时将还在网格中保留:


 在指定的列中限制编辑


在指定列中限制编辑,设置Locked 属性的值为True。该属性可以在设计器或者代码中被设置。


在设计器中


完成下面的步骤以锁定Last 列:


  1. 打开 C1TrueDBGrid 设计器设计器。如何让访问C1TrueDBGrid 设计器设计器,参见 访问访问C1TrueDBGrid设计器设计器 


  1. 在设计器中,通过点击右边窗格上的Last列来选择它。


该列也可以通过工具条上的下拉列表选择Last使其被选中。


  1. 在左边窗格单击Display Column标签。
  2. 定位Locked属性并且设置它的值为True。。
  3. 单击OK 以关闭设计器。


在代码中


添加下面的代码到Form_Load事件以锁定Last 列:
To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.Splits(0).DisplayColumns("Last").Locked = True


To write code in C#


C#

this.c1TrueDBGrid1.Splits[0].DisplayColumns["Last"].Locked = true;


你所完成的Last 列中的单元格不能被编辑,但是其他的列可以被编辑:


 设置网格的外观


下面的基于任务的帮助主题详细地描述了你可以改变True DBGrid for WinForms 控件的外观。例如,你可以添加渐变,改变字体,设置背景颜色和行高度等。


 为列添加渐变的填充


为了添加渐变来填充列,设置GradientModeBackColor,和 BackColor2 属性。而且,设置the GammaCorrection属性为True以便渐变色有一个统一的强度。这些属性可以在设计器中或者代码中被设置。


在任务菜单


完成下面的步骤,使用C1TrueDBGrid Tasks 菜单来设置渐变填充:


  1. 在网格中选择Last 列并且单击它来打开C1TrueDBGrid Tasks 菜单.



  1. 从菜单中选择 Column Style。。



  1. 单击Fill Effects 标签。
  2. 设置BackColor 2的值为Aqua.
  3. 设置Gradient mode的值为ForwardDiagonal.
  4. 选中 Gamma correction复选框.



  1. 单击Ok来关闭Column Style(Last) 对话框。在设计器中


渐变填充也可以通过C1TrueDBGrid Designer被设置。为了使用设计器设置渐变填充,完成下面的步骤:


  1. 打开C1TrueDBGrid Designer。提供更多的信息关于如何访问C1TrueDBGrid Designer,参见Accessing the


C1TrueDBGrid Designer (Section 6.6.1).


  1. 通过点击右边窗格上的Last 列来选择它。该类也可以被选择,通过从工具条上的下拉列表选择Last
  2. 在左边窗格上选择Display Column 标签。
  3. 单击紧邻着Style 属性的 ellipse按钮来打开Style Editor.
  4. Style Editor中,单击Fill Effects 标签。
  5. 设置BackColor 2 的值为Aqua.
  6. 设置Gradient mode的值为ForwardDiagonal.
  7. 选择Gamma correction复选框。



  1. 单击Ok来关闭Style Editor.
  2. 单击OK来关闭C1TrueDBGrid Designer.


在代码中


  1. 通过添加下面的代码到Form_Load事件,来设置GradientMode 的值为ForwardDiagonal:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.Splits(0).DisplayColumns("Last").Style.GradientMode =
C1.Win.C1TrueDBGrid.GradientModeEnum.ForwardDiagonal


To write code in C#


C#

this.c1TrueDBGrid1.Splits[0].DisplayColumns["Last"].Style.GradientMode = C1.Win.C1TrueDBGrid.GradientModeEnum.ForwardDiagonal;


  1. 设置BackColor2的值为Aqua:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.Splits(0).DisplayColumns("Last").Style.BackColor2 = Color.Aqua


To write code in C#


C#

this.c1TrueDBGrid1.Splits[0].DisplayColumns["Last"].Style.BackColor2 =Color.Aqua;


  1. 设置GammaCorrection的值为True:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.Splits(0).DisplayColumns("Last").Style.GammaCorrection = True


To write code in C#


C#

this.c1TrueDBGrid1.Splits[0].DisplayColumns["Last"].Style.GammaCorrection = true;


这是你所完成的


Last 列已经有一个白色到浅绿色的正向对角线填充的渐变:


 通过指定的标准格式化行


为了基于指定的标准格式化行,使用FetchRowStyles属性和FetchRowStyle 事件。在这个例子中,BirthDeath列没有值的行将被绿色高亮,其他所有的行将被锁定且用钢蓝色,Tahoma字体格式化。


  1. 设置FetchRowStyles的属性值为True.


在设计器中在设计器中在属性窗口中定位 FetchRowStyles属性并且这是它的值为True。。在代码中在代码中添加下面的代码到Form_Load 事件:
To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.FetchRowStyles = True


To write code in C#


C#

this.c1TrueDBGrid1.FetchRowStyles = true;


  1. 添加 FetchRowStyle 事件:


To write code in Visual Basic


Visual Basic

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

End Sub


To write code in C#


C#

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

}


  1. 声明变量以在BirthDeath 列获取值并通过添加下面的代码到FetchRowStyle事件:


To write code in Visual Basic


Visual Basic

' Declare variables to get the values in the columns.
Dim bday As String =
Me.C1TrueDBGrid1.Columns("Birth").CellText(e.Row).ToString Dim ddate As String =
Me.C1TrueDBGrid1.Columns("Death").CellText(e.Row).ToString


To write code in C#


C#

// Declare variables to get the values in the columns.
string bday = this.c1TrueDBGrid1.Columns["Birth"].CellText(e.Row).ToString;



string ddate = this.c1TrueDBGrid1.Columns["Death"].CellText(e.Row).ToString;



  1. 如果在BirthDeath列没有空的单元格使其不能编辑,改变字体。在第三步之后的代码添加下面的代码:


To write code in Visual Basic


Visual Basic

' If the Birth or Death column does not contain an empty cell, disable editing and change the font.

If (bday <> "" AndAlso ddate <> "") And (bday <> "" OrElse ddate <> "") Then e.CellStyle.Locked = True
e.CellStyle.Font = New Font("Tahoma", 9)
e.CellStyle.ForeColor = Color.SteelBlue
End If


To write code in C#


C#

// If the Birth or Death column does not contain an empty cell, disable editing and change the font.
if ((bday != "" && ddate != "") And (bday != ""ddate != "")) {
e.CellStyle.Locked = true;
e.CellStyle.Font = new Font("Tahoma", 9);
e.CellStyle.ForeColor = Color.SteelBlue;
}


  1. 通过在第四步之后添加下面的代码来高亮包含空单元格的行:


To write code in Visual Basic


Visual Basic

' If the Birth or Death column contains an empty cell, highlight the row.

If bday = "" Or ddate = "" Then
e.CellStyle.BackColor = Color.PaleGreen
End If


To write code in C#


C#

// If the Birth or Death column contains an empty cell, highlight the row.

if (bday == ""ddate == "") {
e.CellStyle.BackColor = Color.PaleGreen;
}


这是你所完成的


Birth或者Death列中值为空的行被高亮,并且所有其他的行以不同的字体显示也不可编辑。添加一个值到空的单元格中,将改变该单元格的格式。


 隐藏记录选择器列


记录选择器列默认出现在控件的最左边,并且它包含了一个图标来指出选中的行。为了隐藏记录选择器列,设置RecordSelectors属性的值为 False。隐藏记录选择器列限制选择行。该属性可以在设计器中或者在代码中被设置。在设计器中
使用C1TrueDBGrid Designer来设置RecordSelectors属性:


  1. 打开C1TrueDBGrid Designer。提供更多的信息如何访问C1TrueDBGrid Designer,参见访问访问C1TrueDBGrid设设计器计器 (Section 6.6.1)
  2. 在设计器中,在工具条中单击Record Selectors 来隐藏列。



  1. 单击OK来关闭C1TrueDBGrid Designer。。在属性窗口中


在属性窗口中RecordSelectors属性也可以被设置。在属性窗口中设置 RecordSelectors:
在属性窗口中定位RecordSelectors属性并且设置它的值为False. 在代码中
添加下面的代码到Form_Load 事件来隐藏记录选择器列:
To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.RecordSelectors = False


To write code in C#


C#

this.c1TrueDBGrid1.RecordSelectors = false;


这是你所完成的记录选择器列不可见:


 高亮选中单元格的行


为了高亮选中单元格的行,设置MarqueeStyle 属性值为HighlightRow。 这样可以在设计器或者代码中被设置。


在设计器中


使用设计器完成下面的步骤来高亮选中的行:


  1. 在属性窗体中,定位MarqueeStyle 属性并且设置它的值为HighlightRow



  1. 在属性窗口,单击紧邻着HighlightRowStyle 属性的 ellipsis 按钮,来打开Style Editor.
  2. Contents 标签来设置 ForeColor的值为 WhiteSmoke。。
  3. Fill Effects标签,设置BackColor 值为Navy。。



  1. 单击Ok 以关闭Style Editor。。在代码中


使用代码来高亮选中单元格的行,完成下面的步骤:


  1. 通过添加下面的代码到Form_Load事件,来设置MarqueeStyle属性的值为HighlightRow :


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.HighlightRow


To write code in C#


C#

this.c1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.HighlightRow;


  1. 设置高亮的ForeColor值为WhiteSmoke:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.HighLightRowStyle.ForeColor = Color.WhiteSmoke


To write code in C#


C#

this.c1TrueDBGrid1.HighLightRowStyle.ForeColor = Color.WhiteSmoke;


  1. 设置高亮的BackColor 值为Navy:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.HighLightRowStyle.BackColor = Color.Navy


To write code in C#


C#

this.c1TrueDBGrid1.HighLightRowStyle.BackColor = Color.Navy;


这是你所完成的


当单元格被选中时,整行被高亮,前景色为WhiteSmoke背景色为Navy:


 禁用选中高亮


你可以通过设置MarqueeStyleSelectedStyle属性禁用单元格高亮。对于选中的高亮行,设置 MarqueeStyle属性值为NoMarquee。参见高亮当前行或者单元格高亮当前行或者单元格 (Section 8.6)详细地描述。为了禁用使选中的样式,改变SelectedStyle属性的值。


在设计器中


使用设计器完成下面的步骤来高亮选中单元格对应的行:


  1. 在属性窗体定位MarqueeStyle 属性并且设置它的值为NoMarquee
  2. 在属性窗体单击紧邻着SelectedStyle 属性的ellipsis按钮来打开Style Editor
  3. Contents标签设置ForeColor 的值为Black。。
  4. Fill Effects标签设置BackColor 的值为Transparent。。
  5. 单击Ok 以关闭Style Editor。。在代码中


使用代码来高亮选中单元格对应的行,完成下面的步骤:


  1. 通过添加下面的代码到Form_Load 事件,来设置MarqueeStyle属性的值为NoMarquee:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.NoMarquee


To write code in C#


C#

this.c1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.NoMarquee;


  1. 设置高亮的 ForeColor值为Black:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.SelectedStyle.ForeColor = Color.Black


To write code in C#


C#

this.c1TrueDBGrid1.SelectedStyle.ForeColor = Color.Black;


  1. 设置高亮的BackColor值为Transparent:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.Selected.BackColor = Color.Transparent


To write code in C#


C#

this.c1TrueDBGrid1.Selected.BackColor = Color.Transparent;


这是你所完成的
选中的单元格,行和列将不再显示任何表示性的高亮。


 在列头放置图片


为了在一个列头中放置一张图片,设置ForegroundImageForeGroundPicturePosition 属性。这些属性可以在设计器中或者在代码中被设置。在任务菜单
使用C1TrueDBGrid Tasks菜单为了在一个列头中放置一张图片: 1. 在网格中选择Last列并且单击它来打开C1TrueDBGrid Tasks 菜单。


  1. 从菜单中选择Caption Style。。



  1. 点击Images标签。
  2. 单击紧邻着 Foreground Imageellipsis按钮。浏览图片并单击 Open。。



  1. 使用Foreground Picture Position 下拉框来指定图片的位置。
  2. 单击Ok来关闭Caption Style(Last) 对话框。


C1DisplayColumn集合编辑器


使用C1DisplayColumn Collection Editor,一张图片在设计时也可以被放置在列头。


  1. 在Visual Studio 属性窗体中,单击网格中紧邻着Splits属性的ellipsis 按钮(...)。 Split Collection Editor 就会出现。
  2. 单击紧邻着DisplayColumns属性的ellipsis按钮,则产生了C1DisplayColumn Collection Editor.
  3. 在左边窗格,从Members 列表中选择列头。



  1. 在右边窗格,扩展HeadingStyle 属性。
  2. 点击紧邻着ForegroundImage属性的ellipsis按钮。



  1. 观察到一个图形并单击Open.
  2. 使用ForeGroundPicturePosition属性,指定图形的位置。
  3. 单击OK以关闭C1DisplayColumn Collection Editor.
  4. 再次单击OK 以关闭Split Collection Editor. 在代码中


添加下面的代码到Form_Load 事件:


  1. 在头中指定图片并出现:


To write code in Visual Basic


Visual Basic

Dim bmp As New Bitmap("c:\sort.bmp")


To write code in C#


C#

Bitmap bmp = new Bitmap("c:
sort.bmp");


  1. 指定图片应该出现的位置:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.Splits(0).DisplayColumns(1).HeadingStyle.ForegroundImage = bmp
Me.C1TrueDBGrid1.Splits(0).DisplayColumns(1).HeadingStyle.ForeGroundPicturePosition =
C1.Win.C1TrueDBGrid.ForeGroundPicturePositionEnum.LeftOfText


To write code in C#


C#

this.c1TrueDBGrid1.Splits[0].DisplayColumns[1].HeadingStyle.ForegroundImage = bmp; this.c1TrueDBGrid1.Splits[0].DisplayColumns[1].HeadingStyle.ForeGroundPicturePosition= C1.Win.C1TrueDBGrid.ForeGroundPicturePositionEnum.LeftOfText;


这是你所完成的


在这个例子中,图片出现在Last 列头上的文字的左边:


 为行设置多个高度值


为行设置多个高度值,设置the AllowRowSizing 属性值为IndividualRows然后对行分配高度值。完成下面的步骤:


  1. 设置AllowRowSizing属性值为IndividualRows.


在设计器中在设计器中
在属性窗体中定位AllowRowSizing属性并设置它的值为IndividualRows.

在代码中在代码中
添加下面的代码到Form_Load 事件:
To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.AllowRowSizing =
C1.Win.C1TrueDBGrid.RowSizingEnum.IndividualRows


To write code in C#


C#

this.c1TrueDBGrid1.AllowRowSizing =
C1.Win.C1TrueDBGrid.RowSizing.IndividualRows;


  1. 通过添加下面的代码到Form_Load 事件,分配不同的行高到前两个行上:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.Splits(0).Rows(0).Height = 25
Me.C1TrueDBGrid1.Splits(0).Rows(1).Height = 50


To write code in C#


C#

this.c1TrueDBGrid1.Splits[0].Rows[0].Height = 25;

this.c1TrueDBGrid1.Splits[0].Rows[1].Height = 50;


这是你所完成的


第一个行高度被设置为25 并且第二个行高度被设置为50:


 设置行背景色


为了设置行的背景颜色,设置FetchRowStyles属性的值来触发FetchRowStyle事件. 完成下面的步骤:


  1. 设置FetchRowStyles 属性的值为True.


在设计器中在设计器中
在属性窗体中定位FetchRowStyles 属性并且设置它的值为True. 在代码中在代码中
添加下面的代码到Form_Load 事件:
To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.FetchRowStyles = True


To write code in C#


C#

this.c1TrueDBGrid1.FetchRowStyles = true;


  1. 使用FetchRowStyle事件来指定你所期望的行的背景颜色:


To write code in Visual Basic
Visual Basic


Private Sub C1TrueDBGrid1_FetchRowStyle(ByVal sender As Object, ByVal e As
C1.Win.C1TrueDBGrid.FetchRowStyleEventArgs) Handles C1TrueDBGrid1.FetchRowStyle Dim S As String = C1TrueDBGrid1.Columns("Country").CellText(e.Row).ToString If S <> "Germany" Then
e.CellStyle.BackColor = System.Drawing.Color.LemonChiffon End If
End Sub


To write code in C#


C#

private void c1TrueDBGrid1_FetchRowStyle(object sender,
C1.Win.C1TrueDBGrid.FetchRowStyleEventArgs e) { string S = c1TrueDBGrid1.Columns("Country").CellText(e.Row).ToString; if (S != "Germany") {
e.CellStyle.BackColor = System.Drawing.Color.LemonChiffon; }
}


这是你所完成的在这个例子中,在Country 列中不包含单词"Germany"的行,背景颜色为柠檬绸色:


 设置列标题高度


为了设置列标题的高度,设置ColumnCaptionHeight 属性。这样可以在设计器或者在代码中被设置。


在设计器中


为了在设计器中设置列标题的高度,完成下面的步骤:


  1. 打开C1TrueDBGrid Designer。提供更多的信息关于如何访问 C1TrueDBGrid Designer,参见,参见Accessing the


C1TrueDBGrid Designer 


  1. 在左边窗格单击Split标签。
  2. 定位ColumnCaptionHeight属性并设置它的值为34
  3. 单击Column标签。
  4. 定位Caption 属性并且将它的值从First改变为"Composer's First Name".
  5. 单击OK以关闭C1TrueDBGrid Designer. 在代码中


为了在代码中设置列标题的高度,完成下面的步骤:


  1. 通过添加下面的代码到Form_Load 事件,设置ColumnCaptionHeight属性来满足两行高度:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.Splits(0).ColumnCaptionHeight = Me.C1TrueDBGrid1.Splits(0).ColumnCaptionHeight * 2


To write code in C#


C#

this.c1TrueDBGrid1.Splits[0].ColumnCaptionHeight = this.c1TrueDBGrid1.Splits[0].ColumnCaptionHeight * 2;


  1. 设置Caption 属性:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.Columns(0).Caption = "Composer's First Name"


To write code in C#


C#

this.c1TrueDBGrid1.Columns[0].Caption = "Composer's First Name";


这是你所完成的


包含名的列的标题被设置为Composer's First Name并且跨度两行:


 设置列的字体样式


一个列的字体样式可以在设计器中或者在代码中被设置。


在任务菜单中


为了设置字体样式使用 C1TrueDBGrid任务任务菜单,完成下面的步骤:


  1. 在网格中选择Country 列并单击它以打开C1TrueDBGrid任务任务菜单。



  1. 从菜单中选择Column Style。。



  1. 点击Font 属性后面的ellipsis按钮以打开Font 对话框。



  1. 设置Font的的值为Times New RomanFont style的值为Bold,并单击OK以关闭Font对话框。



  1. 单击OK 以关闭Column Style(Country)对话框。


在设计器中


字体样式也可以通过C1TrueDBGrid 设计器设计器被设置。使用设计器设置字体样式:


  1. 打开C1TrueDBGrid设计器设计器。提供更多信息关于如何访问C1TrueDBGrid 设计器设计器,参见 访问访问C1TrueDBGrid设计设计器器 (Section 6.6.1).
  2. 从右边的窗格,通过选择它的列头来选择Country 列。


列也可以从工具条上的下拉列表中选择Country 列来被选择。


  1. 设置字体为Times New Roman并且在工具条上单击Bold。。



  1. 单击确定确定来关闭设计器。在代码中


使用代码来设置字体样式,完成下面的步骤:


  1. 声明新的字体变量:


To write code in Visual Basic


Visual Basic

Dim fntFont As Font


To write code in C#


C#

Font fntFont;


  1. 为新的字体变量设置期望的列的字体:


To write code in Visual Basic


Visual Basic

fntFont = New Font("Times New Roman",
Me.C1TrueDBGrid1.Splits(0).DisplayColumns.Item("Country").Style.Font.Size, FontStyle.Bold)
Me.C1TrueDBGrid1.Splits(0).DisplayColumns.Item("Country").Style.Font = fntFont


To write code in C#


C#

fntFont = new Font("Times New Roman",
this.c1TrueDBGrid1.Splits[0].DisplayColumns["Country"].Style.Font.Size, FontStyle.Bold); this.c1TrueDBGrid1.Splits[0].DisplayColumns["Country"].Style.Font = fntFont;


这是你所完成的


在这个例子中,Country 列的行目前是Times New Roman字体并且是加粗的:

为获取关于特殊的单元格样式的更多信息,参见应用样式到单元格应用样式到单元格 (Section 10.3)


 使列头对齐


你可能选择对其列头或者不对齐列头。在下面的例子中,Last 列的标题被居中:
To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.Splits(0).DisplayColumns("Last").HeadingStyle.HorizontalAlignment =
AlignHorzEnum.Center


To write code in C#


C#

this.c1TrueDBGrid1.Splits[0].DisplayColumns["Last"].HeadingStyle.HorizontalAlignment = AlignHorzEnum.Center;


这是你所完成的


First 列已经被中心对齐了:

为了对齐网格中的所有列头,循环每一个列。


 在代码中移动焦点


在运行时,网格中单元格的焦点通过用户的鼠标和键盘与网格之间的交互被决定。然而,你可以使用网格中的ColRow属性来设置网格中的列和行获得焦点。
在此主题中,你可以添加两个NumbericUpDown 控件到表单中。当这些框中的值改变时,网格的获得焦点的列和行将改变。完成下面的步骤:


  1. 导航到Visual Studio工具框,并添加两个Label控件和两个NumberUpDown控件到窗体中。
  2. 安排Label1紧邻着NumberUpDown1,并且Label2紧邻着NumericUpDown2,并为这些控件设置下面的属性: 设置Label1.Text值为"Column:".


设置Label2.Text 值为"Row:".


  1. 双击NumbericUpDown1来创建ValueChanged 事件处理器,并转换到代码视图中。
  2. 添加下面的代码到NumericUpDown1_ValueChanged事件:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.Col = Me.NumericUpDown1.Value


To write code in C#


C#

this.c1TrueDBGrid1.Col = this.numericUpDown1.Value;


  1. 返回到设计器视图并且双击NumbericUpDown2来创建ValueChanged 事件处理器并且转换到代码视图。
  2. 添加下面的代码到NumericUpDown2_ValueChanged事件:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.Row = Me.NumericUpDown2.Value


To write code in C#


C#

this.c1TrueDBGrid1.Row = this.numericUpDown2.Value;


这是你所完成的改变在NumericUpDown 中的值。注意网格的焦点的改变,和网格的滚动使列和行的焦点进入到视图中:


 为C1TrueDBGrid添加自定义错误检查


当创建一个工程时,C1TrueDBGrid为任何一个错误显示一个消息。你必须关闭内部错误处理。
完成下面的步骤:


  1. 为此,在网格的Error事件中为Handled属性的值设置为True。它将关闭网格的内部错误检查:


To write code in Visual Basic


Visual Basic

Private Sub C1TrueDBGrid1_Error(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.ErrorEventArgs) Handles C1TrueDBGrid1.Error e.Handled = True
End Sub


To write code in C#


C#

private void c1TrueDBGrid1_Error(object sender,
C1.Win.C1TrueDBGrid.ErrorEventArgs e) {
e.Handled = true;
}


  1. 你可以添加你自己的错误处理代码。例如:


To write code in Visual Basic


Visual Basic

Private Sub C1TrueDBGrid1_Error(ByVal sender As Object, ByVal e As
C1.Win.C1TrueDBGrid.ErrorEventArgs) Handles C1TrueDBGrid1.Error If C1TrueDBGrid1.Columns(C1TrueDBGrid1.Col).DataField = "CategoryID" Then e.Handled = True MessageBox.Show("Your User Friendly Message") Else
e.Handled = False MessageBox.Show("Enter a string")
End If
End Sub


To write code in C#


C#

private void c1TrueDBGrid1_Error(object sender, C1.Win.C1TrueDBGrid.ErrorEventArgs e)

{ if (c1TrueDBGrid1.Columns[c1TrueDBGrid1.Col].DataField == "CategoryID")

{
e.Handled = true; MessageBox.Show("Your User Friendly Message"); }

else {
e.Handled = false; MessageBox.Show("Enter a string");
}
}


 在网格中改变列顺序


为了改变网格中列的顺序,在代码中使用C1TrueDBGrid Designer 或者在代码中设置RemoveAtInsert 方法。在设计器中
为了改变设计器中网格中列的顺序,完成下面的步骤:


  1. 打开C1TrueDBGrid Designer。。为了获取更多信息关于如何访问C1TrueDBGrid Designer,参见访问访问


C1TrueDBGrid设计器设计器 (Section 6.6.1)


  1. 在设计器中,从右边窗格选择Country列。
  2. 点击和拖拽Country列到左边。一个红色的箭头将出现在列能被下拉的地方。



  1. First 列的前面下拉Country列。
  2. 单击OK来关闭设计器。


在代码中


在代码中为了改变网格中列的顺序,完成下面的步骤:


  1. 通过添加下面的代码到Form_Load 事件中,为Country列声明变量:


To write code in Visual Basic


Visual Basic

Dim dispColumn As C1.Win.C1TrueDBGrid.C1DisplayColumn dispColumn = Me.C1TrueDBGrid1.Splits(0).DisplayColumns(2)


To write code in C#


C#

C1.Win.C1TrueDBGrid.C1DisplayColumn dispColumn;
dispColumn = this.c1TrueDBGrid.Splits[0].DisplayColumns[2];


  1. 移动Country列在First 列的前面:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.Splits(0).DisplayColumns.RemoveAt(2)
Me.C1TrueDBGrid1.Splits(0).DisplayColumns.Insert(0, dispColumn)


To write code in C#


C#

this.c1TrueDBGrid1.Splits[0].DisplayColumns.RemoveAt(2); this.c1TrueDBGrid1.Splits[0].DisplayColumns.Insert(0, dispColumn);


这是你所完成的


Country列出现在网格中First 列的前面:


 当网格改变尺寸时改变列的尺寸


当网格改变尺寸时,为了伸展或收缩列,设置SpringMode属性的值为True并且为每一列设置MinWidth属。这些可以在设计器或者代码中完成。


在设计器中


在设计器中为了扩展或者收缩列,完成下面的步骤:


  1. 打开C1TrueDBGrid设计器设计器。为了获取更多信息关于如何访问 C1TrueDBGrid Designer,参见访问访问


C1TrueDBGrid设计器设计器 (Section 6.6.1)


  1. 在左边窗格中单击Split 标签。
  2. 定位SpringMode属性并设置它的值为True.


SpringMode 属性也可以在属性窗口中被设置。


  1. 在右边窗格中选择First列并单击它。


该列也可以在工具条中的下拉列表中通过选择First 被选择。


  1. 在左边窗格中选择Display Column标签。
  2. 定位MinWidth属性并且设置它的值为50.
  3. 单击OK来关闭设计器 。


在代码中


在代码中,当网格改变尺寸时为了伸展或者收缩这些列,完成下面的步骤:


  1. 通过添加下面的代码到Form_Load 事件,来设置SpringMode 属性的值为True:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.SpringMode = True


To write code in C#


C#

this.c1TrueDBGrid1.SpringMode = true;


  1. First 列设置MinWidth属性的值为50:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.Splits(0).DisplayColumns("First").MinWidth = 50


To write code in C#


C#

this.c1TrueDBGrid1.Splits[0].DisplayColumns["First"].MinWidth = 50;


这是你所完成的当网格被水平方向改变尺寸时,这些列将成比例地伸展或者收缩,除过First 列将只收缩到50:


 导出网格数据


网格数据可以作为分隔文本文件,Excel, HTML, PDF,或者RTF 文件被导出。下面的表格描述了一些方法,这些方法被用作导出文件类型:


文件类型

方法

描述

All

ExportTo

打开一个对话框,在该对话框中用户可以选择一个导出格式。

Delimited
Text

ExportToDelimitedFile

从网格中导出指定的行到指定的文件,该文件作为分隔文本文件。

Excel

ExportToExcel

导出网格到一个Excel文件。

 

 

 

HTML

ExportToHTML

导出网格到一个HTML文件。

PDF

ExportToPDF

导出网格到一个PDF文件。

RTF

ExportToRTF

导出网格到一个RTF文件。

注意注意: C1TrueDBGrid的导出特征使Reports for WinForms的内部组件,如果你接收了一个Assembly相关的错误,你可能需要引用 Reports for WinForms程序集(C1.Win.C1Report 和C1.C1Report)。


为了设置导出方法的其中一个,添加合适的代码到Export 按钮的Click事件:


 导出到所有可以获得的文件


为了设置ExportTo方法,添加下面的代码到Export 按钮的Click事件:
To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.ExportTo()


To write code in C#


C#

this.c1TrueDBGrid1.ExportTo();

注意注意: C1TrueDBGrid的导出特征使用Reports for WinForms的内部组件,如果你接收了一个Assembly相关的错误,你可能需要引用Reports for WinForms的程序集 (C1.Win.C1Report和C1.C1Report) 。


此主题阐明如下:
单击Export按钮打开TrueDBGrid Print/Export Options对话框。


  1. Action下拉框列表,选择文件类型,包括图元文件和图片文件。
  2. 单击紧邻着File name 框的ellipsis按钮,来打开Export To对话框。观察一个位置来保存文件并在File name框框中键入文件名。单击OK来关闭Export To 对话框。
  3. 在在Page Headers and Footers的下面,添加Header textFooter text。。



  1. 单击OK来导出文件。最后的输出将同下面的图片看起来一样:



 导出到分隔文本文件


为了设置ExportToDelimitedFile方法,添加下面的代码到Export 按钮的Click事件:
To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.ExportToDelimitedFile("c:\temp\composers.csv",
C1.Win.C1TrueDBGrid.RowSelectorEnum.AllRows, ",")


To write code in C#


C#

this.c1TrueDBGrid1.ExportToDelimitedFile(@"c:\temp\composers.csv", 
C1.Win.C1TrueDBGrid.RowSelectorEnum.AllRows, ","); 



注意注意: C1TrueDBGrid的导出特征使用Reports for WinForms的内部组,如果你接收了一个Assembly相关的错误,你可能需要引用Reports for WinForms的程序集 (C1.Win.C1Report 和C1.C1Report)中。


这是你所完成的


单击Export 按钮,在代码中指定的临时目录上创建一个分隔文本文件。在文件中的每一个值都通过逗号分隔开:


 导出到Excel


为了设置ExportToExcel 方法,添加下面的代码到Export 按钮的Click 事件:
To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.ExportToExcel("c:\temp\composers.xls")


To write code in C#


C#

this.c1TrueDBGrid1.ExportToExcel(@"c:\temp\composers.xls");

注意注意: C1TrueDBGrid的导出特征使用Reports for WinForms的内部组,如果你接收了一个Assembly相关的错误,你可能需要引用Reports for WinForms的程序集 (C1.Win.C1Report 和C1.C1Report)。

这是你所完成的


单击Export按钮,在代码中指明的临时目录上创建一个Excel文件:


 导出到HTML


为了设置ExportToHTML方法,添加下面的代码到Export 按钮的Click事件:
To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.ExportToHTML("c:\temp\composers.html")


To write code in C#


C#

this.c1TrueDBGrid1.ExportToHTML(@"c:\temp\composers.html");

注意注意: C1TrueDBGrid的导出特征使用Reports for WinForms的内部组,如果你接收了一个Assembly相关的错误,你可能需要引用Reports for WinForms的程序集 (C1.Win.C1Report 和C1.C1Report)。

这是你所完成的


单击Export 按钮,在代码中指明的临时的目录上创建一个HTML文件:


 导出到PDF


为了设置ExportToPDF 方法,添加下面的代码到Export 按钮的Click事件:
To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.ExportToPDF("c:\temp\composers.pdf")


To write code in C#


C#

this.c1TrueDBGrid1.ExportToPDF(@"c:\temp\composers.pdf");

注意注意: C1TrueDBGrid的导出特征使用Reports for WinForms的内部组,如果你接收了一个Assembly相关的错误,你可能需要引用Reports for WinForms的程序集 (C1.Win.C1Report 和C1.C1Report)。

这是你所完成的


单击Export按钮,在临时的目录上创建一个PDF文件:


 导出到RTF


设置 ExportToRTF方法,添加下面的代码到Export 按钮的Click 事件:
To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.ExportToRTF("c:\temp\composers.rtf")


To write code in C#


C#

this.c1TrueDBGrid1.ExportToRTF(@"c:\temp\composers.rtf");

注意注意: C1TrueDBGrid的导出特征使用Reports for WinForms的内部组,如果你接收了一个Assembly相关的错误,你可能需要引用Reports for WinForms的程序集 (C1.Win.C1Report 和C1.C1Report)。

这是你所完成的


单击Export按钮,在代码中指明的临时的目录上创建一个RTF文件:

 获得排序和过滤后的DataRow
当排序和过滤被应用到网格上时,它使用DataSourceDataMember的底层的DataView。。 为了获得排序、过滤后的DataRow,使用下面的代码在网格中访问相同的底层列表:
To write code in Visual Basic


Visual Basic

If Me.C1TrueDBGrid1.FocusedSplit.Rows(Me.C1TrueDBGrid1.Row).RowType =
C1.Win.C1TrueDBGrid.RowTypeEnum.DataRow Then
Dim dr As System.Data.DataRowView =
CType(Me.C1TrueDBGrid1(Me.C1TrueDBGrid1.RowBookmark(Me.C1TrueDBGrid1.Row)), System.Data.DataRowView)
End If


To write code in C#


C#

if (this.c1TrueDBGrid1.FocusedSplit.Rows[this.c1TrueDBGrid1.Row].RowType == C1.Win.C1TrueDBGrid.RowTypeEnum.DataRow)
{
System.Data.DataRowView dr =
(System.Data.DataRowView)this.c1TrueDBGrid1[this.c1TrueDBGrid1.RowBookmark(this.c1TrueDBGrid1.Row)];
}


 修改连接字符串


为了改变C1NWind.mdb 引用的位置,你可以编辑OleDbConnectionConnectionString属性,你可以参见Data Binding (Section 7) 为获取绑定网格的更多的信息。
完成下面的步骤:


  1. C1TrueDBGrid 任务任务菜单中,从紧邻着选择数据源选择数据源的下拉框中选择添加工程数据源。添加工程数据源。



  1. 数据源配置向导数据源配置向导出现,在选择数据源类型选择数据源类型页面上选择数据库数据库,并单击下一步。下一步。
  2. 单击新的连接新的连接按钮来创建一个新的连接或者从下拉列表中选择一个连接。
  3. 单击观察观察按钮来指定数据的位置并键入正确的登陆方式。单击测试连接测试连接按钮确定你已经成功地连接到数据库或者服务器,并单击OK。新的字符串出现在选择你的数据连接选择你的数据连接页面上。



  1. 单击下一步下一步按钮并继续。一个弹框将出现并询问你是否想要添加文件到你的工程,并修改连接字符串。单击否否.
  2. 通过检查 Yes, save the connection as 框,在应用配置文件中保存连接字符串,并键入名称,单击下一步下一步按钮并继续。
  3. 在选择你的数据库对象选择你的数据库对象页面,在你的数据集中选择你想要的表格和字段。在DataSet name 框中为你的DataSet 键入名称,并单击完成完成来退出向导。



一个数据集合连接字符串被添加到你的工程。另外,Visual Studio自动创建代码来填充数据集。


 移动到AddNew行


当程序运行时,为了使AddNew行为当前行,使用AllowAddNew属性,MoveLastSelect 方法。完成下面的步骤:


  1. 在属性窗口中设置AllowAddNew 属性值为True 或者通过添加下面的代码到Form_Load 事件:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.AllowAddNew = True


To write code in C#


C#

this.c1TrueDBGrid1.AllowAddNew = true;


  1. 通过添加下面的代码到Form_Load 事件,从网格中移动到最后一条记录:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.MoveLast()


To write code in C#


C#

this.c1TrueDBGrid.MoveLast();


  1. 通过添加下面的代码到Form_Load 事件中,来移动到AddNew行:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.Row = Me.C1TrueDBGrid1.Row + 1


To write code in C#


C#

this.c1TrueDBGrid1.Row = this.c1TrueDBGrid1.Row + 1;


  1. 通过添加下面的代码到Form_Load 事件中,来设置网格的焦点:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.Select()


To write code in C#


C#

this.c1TrueDBGrid1.Select();


这是你所完成的


当程序运行时,当前行是AddNew行:


 保存网格外观


为了保存网格的外观,使用SaveLayout方法,该方法将在XML 文件中保存外观。可以在设计器中或者代码中完成。


在设计器中


完成下面的步骤以保存网格的外观:


  1. 打开C1TrueDBGrid 设计器设计器。为了获取更多信息关于如何访问 C1TrueDBGrid 设计器设计器,参见访问访问C1TrueDBGrid 设计器设计器 (Section 6.6.1)
  2. 在设计器中,在工具条中单击Save Layout来打开Save As对话框。



  1. File Name 框中观察位置并键入一个文件名称。
  2. 单击Save 来保存外观为一个XML 文件。
  3. 单击OK来关闭设计器。


在代码中


添加下面的代码到一个按钮的 Click事件来保存网格的外观:
To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.SaveLayout("c:\temp\ComposerLayout.xml")


To write code in C#


C#

this.c1TrueDBGrid1.SaveLayout(@"c:\temp\ComposerLayout.xml");


这是你所完成的
你已经学习到了如何使用SaveLayout 方法来保存外观到一个XML文件中。


 搜索列中条目


使用增强的搜索,对一个列的条目进行搜索,添加Timer组件到窗体上,然后设置KeyPressTick 事件。
完成下面的步骤:


  1. 从Visual Studio 工具条添加Timer组件到表单中。



  1. 设置定时器的Interval属性值为1秒。


在设计器中在设计器中
在属性框中为Timer1 定位Interval属性并且设置它的值为1000.
在代码中在代码中
添加下面的代码到Form_Load事件:
To write code in Visual Basic


Visual Basic

Me.Timer1.Interval = 1000


To write code in C#


C#

this.timer1.Interval = 1000;


  1. 在窗体级声明搜索字符串变量:


To write code in Visual Basic


Visual Basic

Dim searchString As String = String.Empty


To write code in C#


C#

string searchString = string.Empty;


  1. 添加KeyPress 事件:


To write code in Visual Basic


Visual Basic

Private Sub C1TrueDBGrid1_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles C1TrueDBGrid1.KeyPress

' Handle the keystroke.
e.Handled = True
Me.searchString += e.KeyChar
Dim count As Integer = Me.C1TrueDBGrid1.Splits(0).Rows.Count
Dim start As Integer = Me.C1TrueDBGrid1.Row Dim current As Integer = (start + 1) Mod count

' Stop if search returns to the starting position.
While current <> start

' Get the value.
Dim s As String = Me.C1TrueDBGrid1(current,
Me.C1TrueDBGrid1.Col).ToString()

' If a match is found, exit.
If s.Substring(0, Me.searchString.Length).ToUpper() =
Me.searchString.ToUpper() Then
Exit While
End If


' Search the next row, wrapping the column if needed. current = (current + 1) Mod count End While
' Update the grid's current row.
Me.C1TrueDBGrid1.Row = current
' Highlight the entry.
Me.C1TrueDBGrid1.MarqueeStyle =
C1.Win.C1TrueDBGrid.MarqueeEnum.HighlightCell
' Clear the search string at 1 second.
Me.Timer1.Enabled = True
End Sub
To write code in C#


C#

private void c1TrueDBGrid1_KeyPress(object sender,
System.Windows.Forms.KeyPressEventArgs e)
{
// Handle the keystroke.
e.Handled = true;

this.searchString += e.KeyChar;

int count = this.c1TrueDBGrid1.Splits[0].Rows.Count;

int start = this.c1TrueDBGrid1.Row;

int current = (start + 1) % count;

// Stop if search returns to the starting position. while( current != start ) {
// Get the value.

string s = this.c1TrueDBGrid1[current, this.c1TrueDBGrid1.Col].ToString();
// If a match is found, exit.

if( s.Substring(0, this.searchString.Length).ToUpper() == this.searchString.ToUpper() )

break;
// Search the next row, wrapping the column if needed.

current = (current + 1) % count; }

// Update the grid's current row.

this.c1TrueDBGrid1.Row = current;
// Highlight the entry.

this.c1TrueDBGrid1.MarqueeStyle =
C1.Win.C1TrueDBGrid.MarqueeEnum.HighlightCell;



// Clear the search string at 1 second.
this.timer1.Enabled = true; }
5. 为定时器添加Tick事件:
To write code in Visual Basic


Visual Basic

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Me.searchString = String.Empty
Me.Timer1.Enabled = False
End Sub


To write code in C#


C#

private void timer1_Tick(object sender, System.EventArgs e) { this.searchString = string.Empty; this.timer1.Enabled = false;
}


这是你所完成的


当用户输入,该搜索将高亮包含字母的单元格。在这个例子中,在Last 列键入V,则高亮"Varese".
如果不止一个条目以相同的字母开始,键入下一个字母将高亮含这些字母的条目。例如,在Last 列键入Viv ,将高亮"Vivaldi":


Note: 1秒后搜索结果将被重置。




 为新行设置默认值


为这些新的行设置默认的值,在OnAddNew事件中设置列的Value属性。如果添加多个相同信息的行,这会很有用的。完成下面的步骤:


  1. 设置AllowAddNew属性的值为True.


在设计器中在设计器中
在属性框中定位AllowAddNew属性并设置它的值为True. 在代码中在代码中添加下面的代码到Form_Load事件中:
To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.AllowAddNew = True


To write code in C#


C#

this.c1TrueDBGrid1.AllowAddNew = true;


  1. 添加下面的代码到窗体的OnAddNew事件:


To write code in Visual Basic


Visual Basic

Private Sub C1TrueDBGrid1_OnAddNew(ByVal sender As Object, ByVal e As
System.EventArgs) Handles C1TrueDBGrid1.OnAddNew
Me.C1TrueDBGrid1.Columns("Country").Value = "United States"
End Sub


To write code in C#


C#

private void c1TrueDBGrid1_OnAddNew(object sender, System.EventArgs e) { this.c1TrueDBGrid1.Columns["Country"].Value = "United States";

}


这是你所完成的


当一个新行被添加时,在Country 列中的值自动添加为"United States":


 在页脚显示列总数


你可以很容易地显示网格底部的所有值的总和。这样做,你将需要通过设置ColumnFooters属性的值为True,来使列脚
可见;然后你将创建一个方法以计算列的总和。注意在下面的例子中,网格已经被绑定到Northwind 数据库中的Products表。
完成下面的步骤来计算UnitsInStock 列的总和:


  1. 在代码编辑器中添加下面的代码:


To write code in Visual Basic


Visual Basic

Public Sub CalculateFooter()
Dim i As Integer
Dim sum As Double For i = 0 To Me.C1TrueDBGrid1.Splits(0).Rows.Count - 1 sum += Me.C1TrueDBGrid1.Columns("UnitsInStock").CellValue.Next
Me.C1TrueDBGrid1.Columns("UnitsInStock").FooterText = sum
End Sub


To write code in C#


C#

public void CalculateFooter()

{ int i = 0; double sum = 0; for (i = 0; i <= this.c1TrueDBGrid1.Splits[0].Rows.Count - 1; i++) { sum +=

Convert.ToDouble(this.c1TrueDBGrid1.Columns["UnitsInStock"].CellValue);



}
this.c1TrueDBGrid1.Columns["UnitsInStock"].FooterText =
Convert.ToString(sum);
}
这些代码创建CalculateFooter 方法来计算UnitsInStock 列的总和。



  1. 添加下面的代码到 Form_Load 事件:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.ColumnFooters = True
CalculateFooter()


To write code in C#


C#

c1TrueDBGrid1.ColumnFooters = true; CalculateFooter();


该代码设置列脚可见并初始化CalculateFooter 方法。这是你所完成的
UnitsInStock 列的列的总和显示在网格的底部:


 显示当前列和行


使用RowCol 属性,你可以获得当前选中的单元格的行和列的下标。在下面的例子中,你将添加两个文本框到你的网格的应用上,一个显示当前选中的行而另一个显示当前的列。完成下面的步骤,显示当前的行和列:


  1. 从Visual Studio工具框中添加两个Label和两个TextBox 控件。
  2. 改变尺寸并安排该控件,以至于Label1紧邻着TextBox1并且Label2 紧邻着TextBox2.
  3. 在属性窗体,设置下面的属性:


设置 Label1Text属性值为"Row".
设置 Label2Text属性值为"Column".


  1. 在代码编辑器中添加下面的RowColChange 事件:


To write code in Visual Basic


Visual Basic

Private Sub C1TrueDBGrid1_RowColChange(ByVal sender As System.Object, ByVal e As
C1.Win.C1TrueDBGrid.RowColChangeEventArgs) Handles C1TrueDBGrid1.RowColChange
Me.TextBox1.Text = C1TrueDBGrid1.Row
Me.TextBox2.Text = C1TrueDBGrid1.Col
End Sub


To write code in C#


C#

private void c1TrueDBGrid1_RowColChange(object sender, RowColChangeEventArgs e)

{ this.textBox1.Text = c1TrueDBGrid1.Row; this.textBox2.Text = c1TrueDBGrid1.Col;
}


此代码将设置当前的行和列的下标,使其出现在文本框中。
这是你所完成的运行你的应用程序并观察行和列的文本框,为选中的网格的单元格显示行和列的下标:

选择不同的单元格,并注意文本框中文本的改变,并显示当前选中的单元格的行和列的下标。


 在列中显示日期和时间


True DBGrid for WinForms先前的版本中,在列的DateTime 上的DataType 中默认的行为,是在列中既显示日期又显示时间。当前版本默认的行为是只显示日期。在下面的步骤中。你将设置列的NumberFormat 属性值为"g" (该值根据你当前的文化格式显示简短的日期和简短的时间) ,在运行时,为了日期和时间被显示,你将会禁用DateTimePicker用于编辑日期和时间。


在设计器中


完成下面的步骤,在一个列中既显示日期又显示时间:


  1. 在属性窗体上,单击紧邻着Columns 集合的ellipsis 按钮来打开C1TrueDBGrid 设计器设计器。为了获取更多的信息关于如何访问C1TrueDBGrid 设计器设计器,参见访问访问C1TrueDBGrid设计器设计器 (Section 6.6.1)
  2. 在设计器的右边窗格,选择你想改变的列。
  3. 在左边窗格,选择Column标签以显示列的属性。
  4. 在属性网格,选择紧邻着列的NumberFormat属性的下拉键头,并设置它的值为"g".
  5. 选择紧邻着列的EnableDateTimeEditor属性德下拉箭头,并设置它的值为False.
  6. 单击OK来保存和关闭设计器。


在代码中


添加下面的代码到Form_Load事件,在第二列中既显示日期又显示时间:
To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.Columns(1).EnableDateTimeEditor = False
Me.C1TrueDBGrid1.Columns(1).NumberFormat = "g"


To write code in C#


C#

this.c1TrueDBGrid1.Columns[1].EnableDateTimeEditor = false; this.c1TrueDBGrid1.Columns[1].NumberFormat = "g";


这是你所完成的
选中的列既显示日期又显示时间。


 编程进入编辑模式


在运行时的进入单元格编辑模式通常通过用户的鼠标和键盘同网格的相互作用。然而,如果你选择,也可以用代码设置当前获得焦点的单元格进入编辑模式。为了进入编辑模式,简单地设置EditActive属性值为True.
在下面的步骤中,你将添加两个标签和文本框到你的工程中,来选择一个单元格进行编辑,一个按钮来改变单元格的焦点,并且另一个按钮输入获得焦点的单元格到编辑模式。
完成下面的步骤:


  1. 导航到Visual Studio工具框并且添加两个Label控件和两个TextBox 控件到窗体上。
  2. 分配Label1 紧邻着 TextBox1 而且Label2 紧邻着 TextBox2,在属性窗体上,为控件设置下面的属性:


设置 Label1.Text 值为 "Column:". 设置 TextBox1.Text 值为 "0". 设置 Label2.Text 值为 "Row:".
设置 TextBox2.Text 值为 "0".


  1. 导航到Visual Studio工具框并添加两个Button控件到窗体上。
  2. 分配 Button控件紧邻着LabelTextBox 控件,并且在属性窗体上设置下面的属性:


5.
设置 Button11.Text 值为 "Set Focus".
设置 Button2.Text 值为 "Edit Cell".


  1. 双击Button1 来创建Click 事件处理器并且转换到代码视图。
  2. 添加下面的代码到Button1_Click 事件:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.Col = Me.TextBox1.Text
Me.C1TrueDBGrid1.Row = Me.TextBox2.Text


To write code in C#


C#

this.c1TrueDBGrid1.Col = this.textBox1.Text; this.c1TrueDBGrid1.Row = this.textBox2.Text;


  1. 返回到设计视图并双击Button2来创建Click事件处理器并转换到代码视图。
  2. 添加下面的代码到Button2_Click 事件:


To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.EditActive = True


To write code in C#


C#

this.c1TrueDBGrid1.EditActive = true;


这是你所完成的


使用文本框和按钮,你可以改变单元格使其获得焦点,而且你可以让选中的单元格进入编辑模式。完成下面的步骤:运行你的应用程序.


  1. 改变ColumnRow文本框中的值,例如 "2"和"3",并单击 Set Focus 按钮. 网格焦点的改变,如果需要,网格会滚动将获得焦点的列和行显示在视图内。
  2. Click the Edit Cell button.


选中的单元格将输入编辑模式:


13 改变过滤语言


为了改变列过滤编辑器的语言,你可以使用Language 属性。


  1. 右键你的网格并设置Properties 显示到Visual Studio属性窗体上.
  2. 确认AllowFilter 属性的值被设置为True.
  3. 单击紧邻着语言属性的下拉键头,并选择一种语言 (例如, Danish).
  4. 运行工程,并单击列头的其中一个的下拉键头,来打开列过滤编辑器。列过滤编辑器的语言匹配在语言属性中指定的语言。


在代码中


添加下面的代码到 Form_Load 事件:
To write code in Visual Basic


Visual Basic

Me.C1TrueDBGrid1.AllowFilter = True
Me.C1TrueDBGrid1.Language = C1.Util.Localization.Language.Danish


To write code in C#


C#

this.c1TrueDBGrid1.AllowFilter = true;
this.c1TrueDBGrid1.Language = C1.Util.Localization.Language.Danish;


这个主题阐明了下面这些:
列过滤编辑器的语言匹配在Language属性中指定的语言。


 创建自定义打印预览


你可以创建一个自定义的打印预览,并且自定义你的网格在打印时如何显示。你这样做可以使用Init 方法。为了
FormBorderStyle, MaximizeBox, MinimizeBox, ControlBox一样重载属性,因此从
C1.Win.C1TrueDBGrid.PrintForm中继承窗体,重载PrintFormInit 方法。第一步调用base.Init(),然后设置你想设置的属性。完成下面的步骤:


  1. 导航到工具框并且双击SplitContainer面板并添加它到窗体上。
  2. 导航到属性窗体,并选择 SplitContainer 面板的Orientation属性值为Horizontal.
  3. 单击SplitContainer的面板的顶部,导航到工具框并双击Button 控件将其添加到该应用上。
  4. 在属性窗体,设置Button 控件的Text 属性值为"Preview"。
  5. 单击C1SplitContainerlick面板的底部,导航到工具框,并定位然后双击C1TrueDBGrid 控件将其添加到该应用上。
  6. 单击C1TrueDBGrid 控件的小标签并且从Tasks 菜单上选择Dock in Parent Container 选项。
  7. 在解决方案窗体右键工程并选择Add Reference。在Add Reference 对话框,定位并且选择C1.C1ReportC1.Win.C1Report 程序集并单击OK。这是打印预览所需要的。
  8. 双击Form 来转换代码视图并且创建Form_Load事件处理器。
  9. 添加下面的代码到Form_Load 事件:


To write code in Visual Basic


Visual Basic

FillGrid()


To write code in C#


C#

FillGrid();


  1. 只在Form_Load 事件的下面添加FillGrid 事件:


To write code in Visual Basic


Visual Basic

Private Sub FillGrid()
Dim maxrows As Integer = 5

Dim dt As New DataTable("testdatatable")

Dim dc As DataColumn
Dim dr As DataRow

' set up an integer column

dc = New DataColumn() dc.DataType = System.Type.[GetType]("System.DateTime") dc.ColumnName = "DT1" dt.Columns.Add(dc)

' do string

dc = New DataColumn()

dc.DataType = System.Type.[GetType]("System.DateTime") dc.ColumnName = "DT2" dt.Columns.Add(dc)

' do string

dc = New DataColumn()

dc.DataType = System.Type.[GetType]("System.DateTime") dc.ColumnName = "DT3" dt.Columns.Add(dc)

Dim rnd As New Random() For i As Integer = 0 To maxrows - 1 dr = dt.NewRow() dr("DT1") = DateTime.Now.AddDays

dr("DT2") = DateTime.Now.AddMonths

dr("DT3") = DateTime.Now.AddYears

dt.Rows.Add(dr) Next
Me.C1TrueDBGrid1.DataSource = dt
Me.C1TrueDBGrid1.Columns("DT1").EnableDateTimeEditor = True
Me.C1TrueDBGrid1.Columns("DT2").EnableDateTimeEditor = True Me.C1TrueDBGrid1.Columns("DT3").EnableDateTimeEditor = True
End Sub


To write code in C#


C#

private void FillGrid() { int maxrows = 5;
DataTable dt = new DataTable("testdatatable");

DataColumn dc;
DataRow dr;

// set up an integer column

dc = new DataColumn(); dc.DataType = System.Type.GetType("System.DateTime"); dc.ColumnName = "DT1"; dt.Columns.Add(dc);
// do string

dc = new DataColumn(); dc.DataType = System.Type.GetType("System.DateTime"); dc.ColumnName = "DT2"; dt.Columns.Add(dc);
// do string

dc = new DataColumn(); dc.DataType = System.Type.GetType("System.DateTime");

dc.ColumnName = "DT3";

dt.Columns.Add(dc);

Random rnd = new Random();

for (int i = 0; i < maxrows; i++)

{ dr = dt.NewRow(); dr["DT1"] = DateTime.Now.AddDays;

dr["DT2"] = DateTime.Now.AddMonths;

dr["DT3"] = DateTime.Now.AddYears;

dt.Rows.Add(dr); }

this.c1TrueDBGrid1.DataSource = dt; this.c1TrueDBGrid1.Columns["DT1"].EnableDateTimeEditor = true;

this.c1TrueDBGrid1.Columns["DT2"].EnableDateTimeEditor = true;

this.c1TrueDBGrid1.Columns["DT3"].EnableDateTimeEditor = true; }




  1. 在解决方案窗体,右键工程并选择Add | Windows Form。在 Add New Item 对话框,名称为"PrintForm1"的窗体并单击 Add 按钮.
  2. 双击新的窗体来转换到代码视图。
  3. 编辑类声明从C1.Win.C1TrueDBGrid.PrintForm中继承:


To write code in Visual Basic


Visual Basic

Public Class PrintForm1
Inherits C1.Win.C1TrueDBGrid.PrintForm


To write code in C#


C#

public partial class PrintForm1 : C1.Win.C1TrueDBGrid.PrintForm


  1. 在类声明的下面添加下面的代码:


To write code in Visual Basic


Visual Basic

Protected Overrides Sub Init()
MyBase.Init()
FormBorderStyle = FormBorderStyle.Sizable
Me.ControlBox = True
Me.MinimizeBox = False
Me.MaximizeBox = False
End Sub


To write code in C#


C#

protected override void Init()

{

base.Init();

FormBorderStyle = FormBorderStyle.Sizable;

this.ControlBox = true;

this.MinimizeBox = false;

this.MaximizeBox = false; }




  1. 在设计视图添加Form1并双击Button ,使其转换到代码视图,并创建Button_Click 事件处理器.
  2. 添加下面的代码到Button_Click 事件处理器,确信用你的工程名字代替"ProjectName" :


To write code in Visual Basic


Visual Basic

C1TrueDBGrid1.PrintInfo.PreviewFormClassName = "ProjectName.PrintForm"
C1TrueDBGrid1.PrintInfo.PrintPreview()


To write code in C#


C#

c1TrueDBGrid1.PrintInfo.PreviewFormClassName = "ProjectName.PrintForm1"; c1TrueDBGrid1.PrintInfo.PrintPreview();


这是你所完成的


运行应用并且注意该应用出现一个按钮和网格显示的数据。单击预览按钮并且观察到自定义的打印预览窗体的出现。此窗体只包括Close 按钮没有MinimizeMaximize 按钮。

  • No labels