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

假定您熟悉 Visual Studio .NET 下基于任务的帮助编程,并知道如何使用一般的绑定与非绑定控件。如果你对于 ComponentOne FlexGrid for WinForms 控件产品来说是一个新手的话,请先查看 FlexGrid for WinForms 教程章节
每个主题中,通过使用 ComponentOne FlexGrid for WinForms 控件,来为具体任务提供了一个解决方案。按照帮助中所述的步骤实现之后,您将能够创建项目来展示各种 C1FlexGrid 功能。
每个基于任务的帮助主题还假定您已经知道如何创建一个新的.NET 工程。


 访问 C1FlexGrid 编辑器


C1FlexGrid 编辑器可以通过 C1FlexGrid 任务菜单、上下文菜单或者属性窗口来访问。有两个 C1FlexGrid 编辑器,一个是 C1FlexGrid 列编辑器 ,另一个是
C1FlexGrid 样式编辑器,其中样式编辑器可以允许你在设计时控制 C1FlexGrid 的布局和外观。如果要对列进行重新排序、调整列宽、设置列属性、插入或删除一列,请使用 C1FlexGrid 列编辑器。 要更改现有的样式或者添加自定义样式,以便将它们指定到单元格、行、列上,请使用 C1FlexGrid 样式编辑器


 访问 C1FlexGrid 列编辑器


要访问 C1FlexGrid 列编辑器,请使用 C1FlexGrid 任务菜单、上下文菜单或者属性窗口。更多使用 C1FlexGrid 列编辑编辑列的信息,请查看 C1FlexGrid 列编辑器章节
C1FlexGrid 任务菜单
单击 C1FlexGrid 右上角的智能标记( )来打开 C1FlexGrid 任务菜单,之
后选择设计器。 上下文菜单 在窗体上右键单击并在上下文菜单中选择设计器
属性窗口
在属性窗口中,点击 Cols 属性旁边的省略号按钮。


 访问 C1FlexGrid 样式编辑器


要访问 C1FlexGrid 样式编辑器,请使用 C1FlexGrid 任务菜单、上下文菜单或者属性窗口。想要了解更多关于使用 C1FlexGrid 样式编辑器来定制单元格外观样式的信息,请查看 C1FlexGrid 样式编辑器 章节。
C1FlexGrid 任务菜单
单击 C1FlexGrid 右上角的智能标记( )来打开 C1FlexGrid 任务菜单,
之后选择样式。 上下文菜单 在窗体上右键单击并在上下文菜单中选择样式
属性窗口
在属性窗口中,点击 Styles 属性旁边的省略号按钮。


 向单元格中添加图片和文本


要向单元格中添加图片和文本,请使用 SetData 和 SetCellImage 方法。添加
如下代码到 Form_Load 事件中去:
1. 调整单元格以适应图像的高度和宽度属性。


  • Visual Basic


Me.C1FlexGrid1.Rows(1).Height = 90 Me.C1FlexGrid1.Cols(1).Width = 150


  • C#



this.c1FlexGrid1.Rows[1].Height = 90; this.c1FlexGrid1.Cols[1].Width = 150;


Me.C1FlexGrid1.SetCellImage(1, 1, Image.FromFile("c:\c1logo.bmp"))
2. 使用 SetCellImage 方法来添加图片:



  • Visual Basic


Me.C1FlexGrid1.SetCellImage(1, 1, Image.FromFile("c:\c1logo.bmp"))


  • C#


this.c1FlexGrid1.SetCellImage(1, 1, Image.FromFile(@"c:\c1logo.bmp"));
3. 使用 SetData 方法来添加文本:


  • Visual Basic


Me.C1FlexGrid1.SetData(1, 1, "ComponentOne")


  • C#


this.c1FlexGrid1.SetData(1, 1, "ComponentOne");
4. 设置图片的对齐方式为 CenterTop,设置文本的对齐方式为 CenterBottom:


  • Visual Basic


Me.C1FlexGrid1.Styles.Normal.ImageAlign =
C1.Win.C1FlexGrid.ImageAlignEnum.CenterTop
Me.C1FlexGrid1.Styles.Normal.TextAlign =
C1.Win.C1FlexGrid.TextAlignEnum.CenterBottom


  • C#


this.c1FlexGrid1.Styles.Normal.ImageAlign = C1.Win.C1FlexGrid.ImageAlignEnum.CenterTop; this.c1FlexGrid1.Styles.Normal.TextAlign =
C1.Win.C1FlexGrid.TextAlignEnum.CenterBottom;
本主题演示如下: 您的表格将如下面所示,一张图片和文本内容在同一个单元格内。

注意: 要将文本放置到图片的上方,将文本对齐方式改为 CenterTop,图片对齐方式改为 CenterBottom


 向固定列中添加行号


向固定列中添加行号,比如 Microsoft Excel,请使用 OwnerDrawCell 时间来在固定列中画出数字并左对齐。
1. 添加下面的代码到 Form_Load 事件中,触发 OwnerDrawCell 事件:


  • Visual Basic

    Me.C1FlexGrid1.DrawMode =
    C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw

  • C#

    this.c1FlexGrid1.DrawMode =
    C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw;


    2. 添加 OwnerDrawCell 事件:

  • Visual Basic

    Private Sub C1FlexGrid1_OwnerDrawCell(ByVal sender As Object, ByVal e
    As C1.Win.C1FlexGrid.OwnerDrawCellEventArgs) Handles
    C1FlexGrid1.OwnerDrawCell
    If e.Row >= Me.C1FlexGrid1.Rows.Fixed And e.Col =
    Me.C1FlexGrid1.Cols.Fixed - 1 Then
    Dim rowNumber As Integer = e.Row - Me.C1FlexGrid1.Rows.Fixed + 1 e.Text = rowNumber.ToString()
    End If
    End Sub

  • C#


private void c1FlexGrid1_OwnerDrawCell(object sender,
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs e)
{
if ((e.Row >= this.c1FlexGrid1.Rows.Fixed) & (e.Col ==
(this.c1FlexGrid1.Cols.Fixed - 1)))
{
e.Text = ((e.Row - this.c1FlexGrid1.Rows.Fixed) + 1).ToString();
}
}
本主题演示如下: 行号出现在第一列,它是固定的并左对齐,就像 Microsoft Excel 一样。


 向标题行添加三维文字


要向表的标题行添加三维文字,将文字的 TextEffect 属性设置为 Raised,意思是文字有阴影,向右边偏移一个像素并位于文字下方,或者将 TextEffect 属性设置为 Inset,意思是阴影向文字左边偏移一个像素并位于文字上方。将
TextEffect 属性设置为 Flat 将没有任何效果。
1. 创建一个新的样式名为 3DText。
在设计器中:


  • 打开 C1FlexGrid 样式编辑器。 想要了解更多关于如何访问 C1FlexGrid 样式编辑器的细节,请查看访问 C1FlexGrid 样式编辑器 章节。
  • 点击 Add 来创建一个新的样式。
  • 双击 CustomStyle1,将它改名为 3DText,完成后请按回车键。
  • 不要退出 C1FlexGrid 样式编辑器。


在代码中:
将下面的代码添加到 Form_Load 事件中去:


  • Visual Basic


Dim tdt As C1.Win.C1FlexGrid.CellStyle tdt = Me.C1FlexGrid1.Styles.Add("3DText")


  • C#


C1.Win.C1FlexGrid.CellStyle tdt = this.c1FlexGrid1.Styles.Add("3Dtext");
2. 设置 TextEffect 属性为 Raised。
在设计器中: 在右侧窗格中找到 TextEffect 属性并将它设置为 Raised。
在代码中:
将下面的代码添加到 Form_Load 事件中:


  • Visual Basic


tdt.TextEffect = C1.Win.C1FlexGrid.TextEffectEnum.Raised


  • C#


tdt.TextEffect = C1.Win.C1FlexGrid.TextEffectEnum.Raised;
3. 应用该样式到标题行,将以下代码添加到 Form_Load 事件中:


  • Visual Basic



Me.C1FlexGrid1.Rows(0).Style = Me.C1FlexGrid1.Styles("3DText")


  • C#



this.c1FlexGrid1.Rows[0].Style = this.c1FlexGrid1.Styles["3DText"];



本主题演示如下: 表中应该有一个类似下面图片的标题行,浮起的文字效果。



 使用内置的样式向标题行添加三维文字


TextEffect 属性可以使用 C1FlexGrid 的内置样式添加一个三维文本效果。要使用样式添加一个三维文本标题行,将 TextEffect 属性设置为内置的 Raised 样式,意思是文字有阴影,向右边偏移一个像素并位于文字下方,或者将
TextEffect 属性设置为 Inset,意思是阴影向文字左边偏移一个像素并位于文字上方。将 TextEffect 属性设置为 Flat 将没有任何效果。这个属性可以在设计器中或在代码中设置:
在设计器中:


  1. 打开 C1FlexGrid 样式编辑器。想要了解更多关于如何访问 C1FlexGrid 样式编辑器的细节,请查看访问 C1FlexGrid 样式编辑器 章节(第 143 页)。
  2. 在内置样式中选择 Fixed。
  3. 在右侧窗格中,找到 TextEffect 属性并设置为 Raised
  4. 点击 OK 来关闭编辑器。


在代码中:
将下面代码添加到 Form_Load 事件中,设置固定列的 TextEffect 属性样
式。


  • Visual Basic


Me.C1FlexGrid1.Styles("Fixed").TextEffect = C1.Win.C1FlexGrid.TextEffectEnum.Raised


  • C#



this.c1FlexGrid1.Styles["Fixed"].TextEffect =


C1.Win.C1FlexGrid.TextEffectEnum.Raised;
本主题演示如下:
通过设置固定列样式的 TextEffect 属性,只有表中固定的单元格会拥有三维效果。TextEffect 属性可以被设为任何内置样式。查看 CellStyleEnum 枚举集来了解内置样式列表和描述。



 添加 ToolTips 用来显示 UserData


要添加 ToolTips 用来显示 UserData,请使用 C1FlexGridMouseMove
件来拿到 UserData 属性并将它显示在 ToolTip 控件中。ToolTips 可以被设置到一列、一行、一个单元格范围、单元格样式或单个的单元格。


 列上的 UserData ToolTips


要添加 ToolTips 用来在一列上显示 UserData,请使用 C1FlexGridMouseMove 事件来拿到 UserData 属性并将它显示在 ToolTip 控件中。


  1. 在工具箱中找到 ToolTip 控件,并将它添加到窗体中。
  2. 在 Form_Load 事件中,将 AtomicMass 列的 UserData 属性设置为:


  • Visual Basic


Me.C1FlexGrid1.Cols("AtomicMass").UserData = "in atomic mass units (u)"


  • C#



this.c1FlexGrid1.Cols["AtomicMass"].UserData = "in atomic mass units (u)";



3. 添加下面的代码到 MouseMove 事件中:



  • Visual Basic


Private Sub C1FlexGrid1_MouseMove(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles C1FlexGrid1.MouseMove Dim tip As String
tip = C1FlexGrid1.Cols(C1FlexGrid1.MouseCol).UserData
ToolTip1.SetToolTip(C1FlexGrid1, tip) End Sub


  • C#


private void c1FlexGrid1_MouseMove(object sender,
System.Windows.Forms.MouseEventArgs e)
{

string tip; tip = (string)c1FlexGrid1.Cols[c1FlexGrid1.MouseCol].UserData; toolTip1.SetToolTip(c1FlexGrid1, tip);


}
本主题演示如下:
ToolTip 将会出现在整个 AtomicMass 列中。



 单元格区域中的 UserData ToolTips


要添加 ToolTips 用来在单元格范围中显示 UserData,请使用 C1FlexGridMouseMove 来拿到 CellRange.UserData 属性并将它显示在 ToolTip 控件中。


  1. 在工具箱中找到 ToolTip 控件,并将它添加到窗体中。
  2. 在 Form_Load 事件中,将包含了一组非金属元素的单元格区域的 UserData 属性设置为:


  • Visual Basic


' 取得非金属元素的单元格区域
Dim rng As C1.Win.C1FlexGrid.CellRange = Me.C1FlexGrid1.GetCellRange(6,
1, 10, 10)
' 将背景色改变一下,这样便于看到设置的单元格区域
rng.StyleNew.BackColor = Color.AliceBlue
' 为这一区域设置 UserData
rng.UserData = "Non-Metallic"


  • C#




//取得非金属元素的单元格区域
C1.Win.C1FlexGrid.CellRange rng = this.c1FlexGrid1.GetCellRange(6, 1,
10, 10);
//将背景色改变一下,这样便于看到设置的单元格区域
rng.StyleNew.BackColor = Color.AliceBlue;
//为这一区域设置 UserData
rng.UserData = "Non-Metallic";



3. 将下面的代码添加到 MouseMove 事件中去:


  • Visual Basic


Private Sub C1FlexGrid1_MouseMove(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles C1FlexGrid1.MouseMove Dim tip As String
tip = Me.C1FlexGrid1.GetUserData(C1FlexGrid1.MouseRow,
C1FlexGrid1.MouseCol)
ToolTip1.SetToolTip(C1FlexGrid1, tip) End Sub


  • C#


private void c1FlexGrid1_MouseMove(object sender,
System.Windows.Forms.MouseEventArgs e)
{
string tip; tip = (string)this.c1FlexGrid1.GetUserData(c1FlexGrid1.MouseRow, c1FlexGrid1.MouseCol);
toolTip1.SetToolTip(c1FlexGrid1, tip);
}
本主题演示如下:
ToolTip 将会出现在整个单元格区域中。


 单元格样式中的 UserData ToolTips


要添加 ToolTips 用来在单元格样式中显示 UserData,请使用 C1FlexGrid
MouseMove 事件来拿到 CellStyle.UserData 属性并将它显示在 ToolTip 控件中。


  1. 在工具箱中找到 ToolTip 控件,并将它添加到窗体中。
  2. Form_Load 事件中,为列和行分别创建一个自定义的 CellStyle,然后将这两个样式指定到表格中的一列和一行上。想要了解关于如何创建 CellStyles 的信息,请查看为列和行设置背景色


  • Visual Basic

    ' 为列创建一个 CellStyle 。
    Dim cc As C1.Win.C1FlexGrid.CellStyle cc = Me.C1FlexGrid1.Styles.Add("ColumnColor")
    cc.BackColor = Color.Cornsilk
    ' 将样式名称添加到 UserData。
    cc.UserData = "ColumnColor Style"
    ' 为行创建一个 CellStyle 。
    Dim rs As C1.Win.C1FlexGrid.CellStyle rs = Me.C1FlexGrid1.Styles.Add("RowColor") rs.BackColor = Color.PowderBlue
    ' 将样式名称添加到 UserData。
    rs.UserData = "RowColor Style"
    ' 将创建的列样式指定到一列上。
    Me.C1FlexGrid1.Cols(2).Style = Me.C1FlexGrid1.Styles("ColumnColor")
    ' 将创建的行样式指定到一行上。
    Me.C1FlexGrid1.Rows(8).Style = Me.C1FlexGrid1.Styles("RowColor")

  • C#




//为列创建一个 CellStyle 。
C1.Win.C1FlexGrid.CellStyle cc; cc = this.c1FlexGrid1.Styles.Add("ColumnColor"); cc.BackColor = Color.Cornsilk;
//将样式名称添加到 UserData。
cc.UserData = "ColumnColor Style";
//为行创建一个 CellStyle 。
C1.Win.C1FlexGrid.CellStyle rs; rs = this.c1FlexGrid1.Styles.Add("RowColor"); rs.BackColor = Color.PowderBlue;
//将样式名称添加到 UserData。
rs.UserData = "RowColor Style";
//将创建的列样式指定到一列上。

this.c1FlexGrid1.Cols[2].Style = this.c1FlexGrid1.Styles["ColumnColor"];


//将创建的行样式指定到一行上。

this.c1FlexGrid1.Rows[8].Style = this.c1FlexGrid1.Styles["RowColor"];




3. 将下面的代码添加到 MouseMove 事件中:


  • Visual Basic

    Private Sub C1FlexGrid1_MouseMove(ByVal sender As Object, ByVal e As
    System.Windows.Forms.MouseEventArgs) Handles C1FlexGrid1.MouseMove Dim tip As String
    If C1FlexGrid1.MouseCol <> C1FlexGrid1.Cols.Fixed - 1 And C1FlexGrid1.MouseRow <> C1FlexGrid1.Rows.Fixed - 1 Then tip = C1FlexGrid1.Cols(C1FlexGrid1.MouseCol).Style.UserData ToolTip1.SetToolTip(C1FlexGrid1, tip)
    End If
    End Sub

  • C#

    private void c1FlexGrid1_MouseMove(object sender,
    System.Windows.Forms.MouseEventArgs e)
    {
    string tip; if (c1FlexGrid1.MouseCol != c1FlexGrid1.Cols.Fixed - 1 & c1FlexGrid1.MouseRow != c1FlexGrid1.Rows.Fixed - 1)
    {

    tip = (string)c1FlexGrid1.Cols[c1FlexGrid1.MouseCol].Style.UserData; toolTip1.SetToolTip(c1FlexGrid1, tip);


    }
    }


    本主题演示如下:
    ToolTip 将会出现在拥有 CellStyle 的范围内。

     行上的 UserData ToolTips

    要添加 ToolTips 用来在一行上显示 UserData,请使用 C1FlexGridMouseMove 事件来拿到 UserData 属性并将它显示在 ToolTip 控件中。


  1. 在工具箱中找到 ToolTip 控件,并将它添加到窗体中。
  2. 在 Form_Load 事件中,将包含 Oxygen 行的 UserData 属性设置为:


  • Visual Basic


Me.C1FlexGrid1.Rows(8).UserData = "Oxygen makes up approximately 1/5 of the earth's atmosphere."


  • C#



this.c1FlexGrid1.Rows[8].UserData = "Oxygen makes up approximately 1/5 of the earth's atmosphere.";


3. 将下面的代码添加到 MouseMove 事件中:



  • Visual Basic


Private Sub C1FlexGrid1_MouseMove(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles C1FlexGrid1.MouseMove Dim tip As String
tip = C1FlexGrid1.Rows(C1FlexGrid1.MouseRow).UserData
ToolTip1.SetToolTip(C1FlexGrid1, tip) End Sub


  • C#


private void c1FlexGrid1_MouseMove(object sender,
System.Windows.Forms.MouseEventArgs e)
{
string tip;

tip = (string)c1FlexGrid1.Rows[c1FlexGrid1.MouseRow].UserData; toolTip1.SetToolTip(c1FlexGrid1, tip);


}
本主题演示如下:
ToolTip 将会出现在整行。



 单一单元格上的 UserData ToolTips


要添加 ToolTips 用来在一个单元格上显示 UserData,请使用 C1FlexGridMouseMove 事件来拿到 UserData 并将它显示在 ToolTip 控件中。


  1. 在工具箱中找到 ToolTip 控件,并将它添加到窗体中。
  2. 将下面的 SetUserData 方法添加到 Form_Load 事件中:


  • Visual Basic


Me.C1FlexGrid1.SetUserData(1, "Element", "Hydrogen is a highly flammable gas.")


  • C#


this.c1FlexGrid1.SetUserData(1, "Element", "Hydrogen is a highly flammable gas.");
3. 将下面的代码添加到 MouseMove 事件中:


  • Visual Basic


Private Sub C1FlexGrid1_MouseMove(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles C1FlexGrid1.MouseMove Dim tip As String
tip = Me.C1FlexGrid1.GetUserData(C1FlexGrid1.MouseRow,
C1FlexGrid1.MouseCol)
ToolTip1.SetToolTip(C1FlexGrid1, tip) End Sub


  • C#


private void c1FlexGrid1_MouseMove(object sender,
System.Windows.Forms.MouseEventArgs e)
{
string tip; tip = (string)this.c1FlexGrid1.GetUserData(c1FlexGrid1.MouseRow, c1FlexGrid1.MouseCol);
toolTip1.SetToolTip(c1FlexGrid1, tip);
}
本主题演示如下:
当鼠标移动到 Element 列下的第一行上面时,关于 Hydrogen 的信息就会出现。


 为一个单元格区域应用渐变背景色


想要为一个单元格区域添加渐变背景色,请使用 OwnerDrawCell 事件来创建自定义绘制单元格。
1. 创建一个 LinearGradient 画刷并定义一个单元格区域,将下面的代码添加到窗体的类中去:


  • Visual Basic


Dim GradientStyleBrush As System.Drawing.Drawing2D.LinearGradientBrush Dim rng As C1.Win.C1FlexGrid.CellRange


  • C#


System.Drawing.Drawing2D.LinearGradientBrush GradientStyleBrush; C1.Win.C1FlexGrid.CellRange rng;
2. 通过添加下面的代码到 Form_Load 事件中,可以将 C1FlexGrid 的 DrawMode 属性设置为 OwnerDraw:


  • Visual Basic

    Me.C1FlexGrid1.DrawMode =
    C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw

  • C#

    this.c1FlexGrid1.DrawMode =
    C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw;

    3. 使用 GetCellRange 方法来设置 CellRange:

  • Visual Basic


rng = Me.C1FlexGrid1.GetCellRange(2, 2, 4, 4)


  • C#


rng = this.c1FlexGrid1.GetCellRange(2, 2, 4, 4);
4. 设置 LinearGradient 画刷的颜色和渐变的角度:


  • Visual Basic


GradientStyleBrush = New
System.Drawing.Drawing2D.LinearGradientBrush(ClientRectangle, Color.Navy, Color.Transparent, 270)


  • C#


GradientStyleBrush = new
System.Drawing.Drawing2D.LinearGradientBrush(ClientRectangle,
Color.Navy, Color.Transparent, 270);
5. 添加 OwnerDrawCell 事件来在 CellRange 中画渐变:
 Visual Basic
Private Sub C1FlexGrid1_OwnerDrawCell(ByVal sender As Object, ByVal e
As C1.Win.C1FlexGrid.OwnerDrawCellEventArgs) Handles
C1FlexGrid1.OwnerDrawCell
' 使用渐变画刷来绘制单元格的背景色
If (e.Row >= rng.r1) And (e.Row <= rng.r2) Then
If (e.Col >= rng.c1) And (e.Col <= rng.c2) Then
' 画背景色
e.Graphics.FillRectangle(GradientStyleBrush, e.Bounds)
' 让表格绘制内容
e.DrawCell(C1.Win.C1FlexGrid.DrawCellFlags.Content)
' 完成绘制
e.Handled = True
End If
End If
End Sub
 C#


private void c1FlexGrid1_OwnerDrawCell(object sender,
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs e)
{
//使用渐变画刷来绘制单元格的背景色 if ((e.Row >= rng.r1) & (e.Row <= rng.r2))
{
if ((e.Col >= rng.c1) & (e.Col <= rng.c2))
{
//画背景色
e.Graphics.FillRectangle(GradientStyleBrush, e.Bounds);
//让表格绘制内容
e.DrawCell(C1.Win.C1FlexGrid.DrawCellFlags.Content);
//完成绘制
e.Handled = true;
}
}
}


本主题演示如下: 从透明到深蓝色的渐变背景色只出现在指定的单元格区域内。


 在表格中改变列的顺序


要改变表格中的列顺序,可以在表格中拖动一列到一个新的位置或者使用
C1FlexGrid 列编辑器,还可以在代码中使用 MoveRange 方法:在设计器中:


  1. 在表格中,选择一个你想要移动的列。在本例中,Element 列将会被移动。



  1. 点击并拖动这一列到左边去。一个垂直的虚线出现,这个虚线说明了这一列可以被放置在哪里。
  2. 将 Element 列拖到到 AtomicNumber 列前面。


另外, 可以使用表格中的 C1FlexGrid 列编辑器将这些列重新排序:


  1. 打开 C1FlexGrid 列编辑器。想要了解更多关于如何访问 C1FlexGrid 列编辑器的细节,请查看访问 C1FlexGrid 列编辑器 章节(第 143 页)。
  2. 在设计器中,选择一个你想要移动的列。在本例中,我们来移动 Element 这一列。
  3. 点击并将这一列拖到左边。一个垂直的虚线出现,这个虚线说明了这一列可以被放置在哪里。
  4. 将 Element 列放到 AtomicNumber 列的前面。
  5. 点击 OK 来关闭编辑器。


在代码中:
将下面的代码添加到 Form_Load 事件中,用来将第二列(在本例中是
Element 列)移动到第一列的位置上去:


  • Visual Basic


Me.C1FlexGrid1.Cols.MoveRange(2, 1, 1)


  • C#


this.c1FlexGrid1.Cols.MoveRange(2, 1, 1);

本主题演示如下: 现在 Element 这一列出现在 AtomicNumber 列的前面。


 根据值过滤


想要使用 ValueFilter,遵循以下步骤:


  1. 选中表格并点击快速标签来打开 C1FlexGrid 任务菜单。
  2. 勾选 Enable Column Filtering 复选框。
  3. 点击设计器连接。打开 C1FlexGrid 列编辑器。
  4. 点击 AllowFiltering 属性旁边的下拉列表箭头并选择 ByValue。 在代码中: 将下面的代码添加到 Form_Load 事件中去:


  • Visual Basic


Me.C1FlexGrid1.AllowFiltering = True
Me.C1FlexGrid1.Cols(1).AllowFiltering = AllowFiltering.ByValue


  • C#



this.c1FlexGrid1.AllowFiltering = true; this.c1FlexGrid1.Cols[1].AllowFiltering = AllowFiltering.ByValue


本主题演示如下: 在本例中,第二列将会使用值排序:



 根据条件过滤


想要使用条件过滤器,遵循以下步骤:


  1. 选中表格并点击快速标签来打开 C1FlexGrid 任务菜单
  2. 勾选 Enable Column Filtering 复选框。
  3. 点击设计器连接。打开 C1FlexGrid 列编辑器。
  4. 点击 AllowFiltering 属性旁边的下拉列表箭头并选择 ByCondition


在代码中: 将下面的代码添加到 Form_Load 事件中去:


  • Visual Basic


Me.C1FlexGrid1.AllowFiltering = True
Me.C1FlexGrid1.Cols(1).AllowFiltering = AllowFiltering.ByCondition


  • C#


this.c1FlexGrid1.AllowFiltering = true;

this.c1FlexGrid1.Cols[1].AllowFiltering = AllowFiltering.ByCondition


本主题演示如下: 在本例中,第二列将会按照条件来排序:



 更改过滤器语言


想要更改在列过滤器中使用的语言,你可以使用 Language 属性。


  1. 右键点击表格并选择 Properties 来查看 Visual Studio 属性窗口。
  2. 将 AllowFiltering 属性设置为 True
  3. 点击 Language 属性旁边的下拉列表箭头并选择一个语言。
  4. 运行程序并点击列头上的下拉列表箭头来打开列过滤器。这一列的语言过滤将会与你在 Language 属性中指定的相同。


在代码中: 将下面的代码添加到 Form_Load 事件中去:


  • Visual Basic


Me.C1FlexGrid1.AllowFiltering = True
Me.C1FlexGrid1.Language = C1.Util.Localization.Language.Danish


  • C#


this.c1FlexGrid1.AllowFiltering = true; this.c1FlexGrid1.Language = C1.Util.Localization.Language.Danish;
本主题演示如下:

请注意,列过滤器的语言匹配的是你 Language 属性中指定的语言。


 清除树视图


想要在 C1FlexGrid 中清除树视图,将能够编辑的行数设置为 0。想要了解
更多关于创建数的信息,请查看 FlexGrid for WinForms 教程概述和汇总数据

将下面的代码添加到 Button1_Click 事件中。这些代码会将可编辑的行数设
置为 0,当点击 Clear 按钮时树视图将会被清空。


  • Visual Basic


Me.C1FlexGrid1.Rows.Count = Me.C1FlexGrid1.Rows.Fixed


  • C#


this.c1FlexGrid1.Rows.Count = this.c1FlexGrid1.Rows.Fixed;


本主题演示如下:

一旦你点击了这个按钮,树视图就会消失。


 清除 C1FlexGrid


要清除 C1FlexGrid,请使用 Clear 方法。Clear 方法将会清除内容、样式、 UserData 或所有这三者。
下面的图片展示了在没有清除内容、样式、UserData 之前的表格样子。


 清除内容


要清除 C1FlexGrid 里的内容,添加下面的 Clear 方法。在本例中,这些代码都将被添加到 Clear Contents 按钮的 Click 事件中去。


  • Visual Basic


Me.C1FlexGrid1.Clear(C1.Win.C1FlexGrid.ClearFlags.Content)


  • C#


this.c1FlexGrid1.Clear(C1.Win.C1FlexGrid.ClearFlags.Content);
本主题演示如下:
点击 Clear Content 按钮只会清除内容,不会清除表格上的样式或者
UserData。


 清除样式


要清除 C1FlexGrid 上的显示样式和格式,添加下面的 Clear 方法。在本例
中,这些代码都将被添加到 Clear Styles 按钮的 Click 事件中去。


  • Visual Basic


Me.C1FlexGrid1.Clear(C1.Win.C1FlexGrid.ClearFlags.Style)


  • C#


this.c1FlexGrid1.Clear(C1.Win.C1FlexGrid.ClearFlags.Style);


本主题演示如下:
点击 Clear Styles 按钮只会清除显示样式和格式化,不会清除表格上的
UserData 和内容。


 清除 UserData


要清除 C1FlexGrid 的 UserData,添加下面的 Clear 方法。在本例中,这些代
码都将被添加到 Clear UserData 按钮的 Click 事件中去。


  • Visual Basic


Me.C1FlexGrid1.Clear(C1.Win.C1FlexGrid.ClearFlags.UserData)


  • C#


this.c1FlexGrid1.Clear(C1.Win.C1FlexGrid.ClearFlags.UserData);
请注意,当你点击清除 UserData 时,画面上将不会出现任何变化,除非 UserData 存储了这个程序很有用的内容。


 清除内容、样式和 UserData


想要一次性清除 C1FlexGrid 上的内容、样式和 UserData,添加下面的 Clear
方法。在本例中,这些代码都将被添加到 Clear All 按钮的 Click 事件中去。


  • Visual Basic


Me.C1FlexGrid1.Clear(C1.Win.C1FlexGrid.ClearFlags.All)


  • C#



本主题演示如下:
this.c1FlexGrid1.Clear(C1.Win.C1FlexGrid.ClearFlags.All);
点击 Clear All 将会清除表格上的内容、样式和 UserData,只留下一个空的表格。


 将列上的字母转换为大写字母


要将列的字母从小写转换为大写,添加下面的 SetupEditor 事件到窗体上:


  • Visual Basic

    Private Sub C1FlexGrid1_SetupEditor(ByVal sender As Object, ByVal e As
    C1.Win.C1FlexGrid.RowColEventArgs) Handles C1FlexGrid1.SetupEditor
    If Me.C1FlexGrid1.Cols(e.Col).Name = "UCASECOL" Then Dim tb As TextBox = Me.C1FlexGrid1.Editor tb.CharacterCasing = CharacterCasing.Upper
    End If
    End Sub

  • C#


 使用视觉样式来自定义外观


想要使用视觉样式自定义 C1FlexGrid 的外观 ,将 VisualStyle 属性设置为
Custom、Office2007Black、 Office2007Blue、 Office2007Silver、Office2010Blue、 Office2010Black、Office2010Silver、或者 System。这个属性可以在设计器中或在
代码中设置。下面的列表描述了每种视觉样式:


视觉样式

 

描述

 

private void c1FlexGrid1_SetupEditor(object sender,
C1.Win.C1FlexGrid.RowColEventArgs e)
{

if (this.c1FlexGrid1.Cols[e.Col].Name == "UCASECOL")


{
TextBox tb = this.c1FlexGrid1.Editor as TextBox; tb.CharacterCasing = CharacterCasing.Upper;
}
}


 

 

Custom

 

不适用任何视觉样式,只使用样式和属性来构造控件。

 

Office2007Black

 

不适用任何视觉样式,只使用样式和属性来构造控件。

 

Office2007Blue

 

不适用任何视觉样式,只使用样式和属性来构造控件。

 

Office2007Silver

 

使用基于 Office 2007 的银色配色方案来构造控件的外观。

 

System

 

使用基于当前系统配色方案来构造控件的外观。

 

Office2010Black

 

使用基于当前系统 的银色配色方案来构造控件的外观。

 

Office2010Silver

 

使用基于 Office 2010 的银色配色方案来构造控件的外观。

 

Office2010Blue

 

使用基于 Office 2010 的蓝色配色方案来构造控件的外观。

 


在设计器中: 在属性窗口中找到 VisualStyle 属性,将它设置为 Custom、
Office2007Black、Office2007Blue、Office2007Silver、Office2010Blue、
Office2010Black、Office2010Silver 或者 System。在本例中,VisualStyle 属性将被设为 Office2007Blue。在代码中: 将代码添加到 Form_Load 事件中,将 VisualStyle 属性设置为 Custom、
Office2007Black、Office2007Blue、Office2007Silver、Office2010Blue、
Office2010Black、Office2010Silver 或者 System。下面的代码将 VisualStyle 属性设置为 Office2007Blue:


  • Visual Basic


Me.C1FlexGrid1.VisualStyle = C1.Win.C1FlexGrid.VisualStyle.Office2007Blue


  • C#


this.c1FlexGrid1.VisualStyle =
C1.Win.C1FlexGrid.VisualStyle.Office2007Blue;
自定义视觉样式 没有视觉样式应用的样子:

Office2007Black 视觉样式
Office 2007 黑色方案:

Office2007Blue 视觉样式
Office 2007 蓝色方案:

Office2007Silver 视觉样式
Office 2007 银色方案:

Office2010Blue 视觉样式
Office 2010 蓝色方案:

Office2010Silver 视觉样式
Office 2010 银色方案:

Office2010Black 视觉样式
Office 2010 黑色方案:

System 视觉样式 当前系统设置:


 只在单元格中输入数字


想要只允许在单元格中输入数字,请使用 KeyPressEdit 事件并当按下无效
按键时,将它的 e.Handled 参数设置为 True。请使用下面的代码将第四列设置为只能按数字、BACKSPACE、DELETE 和·键:


  • Visual Basic

    Private Sub C1FlexGrid1_KeyPressEdit(ByVal sender As Object, ByVal e As
    C1.Win.C1FlexGrid.KeyPressEditEventArgs) Handles
    C1FlexGrid1.KeyPressEdit If e.Col = 3 Then
    ' 如果输入不在 0-9、PERIOD、DELETE 或 BACKSPACE 之间。
    If Not (e.KeyChar = Chr(48) Or e.KeyChar = Chr(49) Or _ e.KeyChar = Chr(50) Or e.KeyChar = Chr(51) Or _
    e.KeyChar = Chr(52) Or e.KeyChar = Chr(53) Or _
    e.KeyChar = Chr(54) Or e.KeyChar = Chr(55) Or _
    e.KeyChar = Chr(56) Or e.KeyChar = Chr(57) Or _
    e.KeyChar = Chr(46) Or e.KeyChar = Chr(127) Or _
    e.KeyChar = Chr(8)) Then
    ' 禁止输入非法的按键值到控件上
    e.Handled = True
    End If
    End If
    End Sub

  • C#


private void c1FlexGrid1_KeyPressEdit(object sender,
C1.Win.C1FlexGrid.KeyPressEditEventArgs e)
{
if( e.Col == 3 )
{
//如果输入不在 0-9、PERIOD、DELETE 或 BACKSPACE 之间
if( !((e.KeyChar == 48) || (e.KeyChar == 49) ||
(e.KeyChar == 50) || (e.KeyChar == 51) || (e.KeyChar == 52) ||
(e.KeyChar == 53) || (e.KeyChar == 54) || (e.KeyChar == 55) ||
(e.KeyChar == 56) || (e.KeyChar == 57) || (e.KeyChar == 46) ||
(e.KeyChar == 127) || (e.KeyChar == 8)))
//禁止输入非法的按键值到控件上
e.Handled = true;
}
}


 格式化单元格


通过格式化单元格操作,允许您控制单个单元格或多单元格的数据输入和表现形式。下面的话题向你展示了如何设置单元格为只读,如何将单元格格式化为显示货币值,如何将单元格格式化为根据内容来显示相应的格式。


 将单元格设置为只读


要想将单个或多个单元格设置为只读,请使用 BeforeEdit 事件。 将单个单元格设置为只读
你可以将表格中任何一个单元格设置为只读,以便其中的数据不能被更
改。例如,添加下面的代码,将第一行第一列的单元格设置为只读:


  • Visual Basic


Private Sub C1FlexGrid1_BeforeEdit(ByVal sender As Object, ByVal e As
C1.Win.C1FlexGrid.RowColEventArgs) Handles C1FlexGrid1.BeforeEdit If e.Row = 1 And e.Col = 1 Then e.Cancel = True
End If
End Sub


  • C#


private void c1FlexGrid1_BeforeEdit(object sender,
C1.Win.C1FlexGrid.RowColEventArgs e)
{
if (e.Row == 1 & e.Col == 1)
{
e.Cancel = true;
}
}
将多单元格设置为只读
你也许想要将表格中多个单元格一次性设置为只读。假设你有一个可以编
辑的表格,用于输入客户的信息,如客户 ID、地址、订单。其中订单和地址会改变,但客户 ID 不会。下面的代码假定你有一个九行的表格,你想将第一列
(客户 ID 列)的所有行,设置为只读的。请输入以下代码:


  • Visual Basic

    Private Sub C1FlexGrid1_BeforeEdit(ByVal sender As Object, ByVal e As
    C1.Win.C1FlexGrid.RowColEventArgs) Handles C1FlexGrid1.BeforeEdit
    Dim i As Integer
    For i = 1 To 9
    If e.Col = 1 And e.Row = i Then e.Cancel = True
    End If
    Next
    End Sub

  • C#


private void c1FlexGrid1_BeforeEdit(object sender,
C1.Win.C1FlexGrid.RowColEventArgs e)
{
for (int i = 1; i <= 9; i++)
{
if (e.Col == 1 & e.Row == i)
{
e.Cancel = true;
}
}
}
本主题演示如下: 请注意,在 CustomerID 列中,没有一行是可以编辑的。


 将单元格格式化为显示十进制内容


想要将单元格格式化为只显示十进制数字,请在设计器中或者在代码中设
置 Format 属性。在本例中,已经在第一列中输入的数字将被格式化为十进制的金额。
在设计器中:


  1. 在表格中选择 Column 1。这将会打开 Column 1 的列任务菜单。
  2. 点击 Format String 旁边的省略号按钮来打开 Format String 对话框。
  3. 在 Format type 下面选择 Custom 之后将它设置为 Custom format:$#,##0.00。
  4. 点击 OK 来关闭 Format String 对话框。


另外, Format 属性也可以使用 C1FlexGrid 列编辑器来设置:


  1. 打开 C1FlexGrid 列编辑器。想要了解更多关于如何访问 C1FlexGrid 列编辑器的信息,请查看访问 C1FlexGrid 列编辑器 章节(第 143 页)。
  2. 在右侧窗格中选择 Column 1 并在左侧窗格中将 Format 属性设置为$#,##0.00
  3. 点击 OK 来关闭编辑器。


在代码中:
将下面的代码添加到 Form_Load 事件中去:


  • Visual Basic


Me.C1FlexGrid1.Cols(1).Format = "$#,##0.00"


  • C#



this.c1FlexGrid1.Cols[1].Format = "$#,##0.00";



注意:格式串中的说明符完全遵守标准的.NET 约定。使用',' 表示千位分隔符,使用'.'表示十进制数字,跟区域无关。
本主题演示如下: 在本例中,在第一列中的数字将会转换为美元金额。



 基于内容格式化单元格


要有条件的格式化基于内容的单元格,请创建一个新的样式并使用
CellChanged 事件。
1. 创建一个新的 CellStyle 名为 LargeValue 并将它的 BackColor 属性设置为
Gold
在设计器中:
打开 C1FlexGrid 样式编辑器。想要了解更多关于如何访问 C1FlexGrid 样式编辑器的信息,请查看访问 C1FlexGrid 样式编辑器 章节。


  1. 点击 Add 创建一个新样式。
  2. 双击 CustomStyle1,将它重命名为 LargeValue,完成之后请按下 ENTER。
  3. 在右侧窗格中选择 BackColor 属性并将它设置为 Gold。
  4. 找到 Font 属性之后点击省略号按钮来打开 Font 对话框。
  5. 将 Font style 设置为 Italic。
  6. 点击 OK 来关闭 Font 对话框。
  7. 点击 OK 来关闭 C1FlexGrid 样式编辑器。


在代码中:
1. 将下面的代码添加到 Form_Load 事件中去:


  • Visual Basic


' 为大数据创建一个自定义样式。
Dim cs As C1.Win.C1FlexGrid.CellStyle cs = Me.C1FlexGrid1.Styles.Add("LargeValue") cs.Font = New Font(Font, FontStyle.Italic) cs.BackColor = Color.Gold


  • C#


//为大数据创建一个自定义样式。
C1.Win.C1FlexGrid.CellStyle cs; cs = this.c1FlexGrid1.Styles.Add("LargeValue"); cs.Font = new Font(Font, FontStyle.Italic); cs.BackColor = Color.Gold;
2. 在 CellChanged 事件中基于单元格内容进行格式化


    • Visual Basic

      ' 根据单元格的内容来格式化。
      Private Sub C1FlexGrid1_CellChanged(ByVal sender As Object, ByVal e As
      C1.Win.C1FlexGrid.RowColEventArgs) Handles C1FlexGrid1.CellChanged
      ' 标记当货币值> 50,000 作为 LargeValues。 ' 将其他的样式重置为 Nothing。
      Dim cs As C1.Win.C1FlexGridCellStyle
      If Val(Me.C1FlexGrid1(e.Row, e.Col)) >= 50000 Then cs = Me.C1FlexGrid1.Styles("LargeValue")
      End If
      Me.C1FlexGrid1.SetCellStyle(e.Row, e.Col, cs)
      End Sub

    • C#





//根据单元格的内容来格式化。
private void c1FlexGrid1_CellChanged(object sender,
C1.Win.C1FlexGrid.RowColEventArgs e)
{
//标记当货币值> 50,000 作为 LargeValues。 //其他的样式重置为 Nothing。
C1.Win.C1FlexGrid.CellStyle cs; if (Val(this.c1FlexGrid1(e.Row, e.Col)) >= 50000)
{
cs = this.c1FlexGrid1.Styles("LargeValue");
}
this.c1FlexGrid1.SetCellStyle(e.Row, e.Col, cs);
}



本主题演示如下: 在本例中,单元格中如果包含大于等于 50,000 时将会高亮斜体为金色。


格式化边框样式


格式化边框样式允许您自定义表格的外观。无论是控件还是表格的边框的
样式都可以被设置。


 格式化控件的边框样式


想要格式化控件的边框样式,请将 ScrollableControl.BorderStyle 属性设置为
Fixed3D、FixedSingle、Light3D、None 或者 XpThemes。这个属性在设计器中或者在代码中设置。下面的列表描述了每一种边框样式:


Border

描述

Fixed3D

一个三维的边框。这是默认值。

FixedSingle

单线条的边框。

Light3D

一个轻微凹陷的边框。

None

没有边框。

XpThemes

一个使用 XP 样式的边框。


在设计器中:
在属性窗口中找到 BorderStyle 属性并将它设置为 Fixed3D、FixedSingle、 Light3D、None 或者 XpThemes。在本例中, BorderStyle 属性将被设置为
Fixed3D。
在代码中: 将代码添加到 Form_Load 事件中,设置 BorderStyle 属性为 Fixed3D、 FixedSingle、Light3D、None 或者 XpThemes。下面的代码将 BorderStyle 属性设置为 Fixed3D:


      • Visual Basic



Me.C1FlexGrid1.BorderStyle =
C1.Win.C1FlexGrid.Util.BaseControls.BorderStyleEnum.Fixed3D


      • C#


this.c1FlexGrid1.BorderStyle =
C1.Win.C1FlexGrid.Util.BaseControls.BorderStyleEnum.Fixed3D;
三维边框 边框将是 3D 立体的。

单线条边框 边框将是单线条的。

轻微凹陷的边框
边框将是轻微凹陷并且是三维的。
无边框将没有任何边框。

XP Theme 边框
边框将是 XP 样式的。


边框

描述

Dotted

虚线边框。

Double

双层边框。

Fillet

圆角边框。

Flat

实心平边框。

Groove

凹陷型边框。

Inset

分段边框。

None

没有边框。这是默认设置。

Raised

突起边框。


 格式化显示表格的边框样式


想要格式化表格的边框样式,请将 Style 设置为 Dotted、Double、Fillet、
Flat、Groove、Inset、None 或者 Raised。这个属性可以使用 C1FlexGrid 的内建样式,它可以在设计器中或者在代码中被设置。下面的列表描述了每一种边框样式。
在设计器中:


      1. 打开 C1FlexGrid 样式编辑器。想要了解更多关于如何访问 C1FlexGrid 样式编辑器的信息,请查看访问 C1FlexGrid 样式编辑器 章节(第 143 页)。
      2. 在内置样式中选择 Normal 。在右边的列中,找到 Border 属性并展开它。设置 Style


属性为 Dotted、Double、Fillet、Flat、Groove、Inset、None 或者 Raised。在本例中,
Style 属性被设置为 Dotted。


      1. 点击 OK 来关闭编辑器



在代码中: 将下面的代码添加到 Form_Load 事件中,用来将 Style 属性指定为
Normal。下面的代码将 Style 设置为 Dotted


      • Visual Basic


Me.C1FlexGrid1.Styles("Normal").Border.Style = C1.Win.C1FlexGrid.BorderStyleEnum.Dotted


      • C#



this.c1FlexGrid1.Styles["Normal"].Border.Style = C1.Win.C1FlexGrid.BorderStyleEnum.Dotted;


Dotted 边框 单元格的边框将会是虚线。

Double 边框
单元格边框将会是双线。

Fillet 边框
单元格边框是圆角的。

Flat 边框
单元格边框是一条平铺的线。

Groove 边框
单元格边框将是凹陷的。

Inset 边框
单元格边框将是嵌入式的。

无边框将没有边框。

Raised 边框
单元格边框将是突起的。



 冻结行和列


想要允许用户通过鼠标来冻结行和列,设置 AllowFreezing 属性到 Columns 上将会只冻结列,设置到 Rows 上将会只冻结行,或者 Both 来冻结两者。反过来,想要去掉冻结,请将 AllowFreezing 设置为 None,这当然也是默认值。这个属性可以在设计器中或者在代码中来设置。
在设计器中:
在属性窗口中,找到 AllowFreezing 属性并将它设置为 Both
在代码中:
将下面的代码添加到 Form_Load 事件中,将 AllowFreezing 设置为 Both


      • Visual Basic


Me.C1FlexGrid1.AllowFreezing =
C1.Win.C1FlexGrid.AllowFreezingEnum.Both


      • C#

        this.c1FlexGrid1.AllowFreezing =
        C1.Win.C1FlexGrid.AllowFreezingEnum.Both;


        本主题演示如下:
        当光标变为行锁状态图标 或者列锁状态图标 ,点击并拖动鼠标到想要冻结的列或行上。在本例中,Element 列将会被冻结,它将会一直保持在界面上,无论是否滚动到最右边。
        在本例中,包含了 Hydrogen 的这一行将会被冻结,它会一直保持在界面上,无论是否滚动到最底。
        注意: 将 AllowFreezing 属性设置为 Both 将会允许同时冻结列和行,例如上图。

         读取和保存 Open XML 文件

        你可以使用 C1FlexGrid 控件来读取和保存 Microsoft Excel 2007 Open XML 文件。Open XML 是由微软推出 Office2007 时带来的一个开放的,基于标准的格式。Open XML 文件包含一些使用 Zip 压缩的 XML 文件。因为这些文件被压缩过,所以 Open XML 比通常的文件体积要小(例如 XLS 文件)。
        默认情况下,C1FlexGrid 中的 LoadSave 方法会根据文件的扩展名选择适
        当的文件格式,任何的以"XLSX"或者"ZIP"的扩展名将会被对待为 Open
        XML 文件。
        LoadGrid 和 SaveGrid 方法同样拥有一些文件类型参数的重载方法。这将会允许你的控件根据文件格式来判断而不是依靠扩展名。举个例子,你的应用程序也许会使用 Open XML 格式文件来作为数据文件,但使用的是"XLSX"以外的其他扩展名。你可以指定文件的类型为"Excel"并使用 FileFlags 枚举选项中的 OpenXml 选项。
        想要将表格保存和读取一个 OpenXml 文件,完成下面的步骤:


      1. 在包含 C1FlexGrid 的窗体上添加三个按钮,并在他们的 Text 属性中输入Save、Clear 和 Load。



      1. 在设计器中,双击 Save(Button_1)按钮,并将下面的代码添加到 Button1_Click 事件中去:


      • Visual Basic


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Me.C1FlexGrid1.SaveGrid("C:\test\myfile.xlsx",
FileFormatEnum.Excel, FileFlags.OpenXml) End Sub


      • C#


private void button1_Click(object sender, EventArgs e)
{
this.c1FlexGrid1.SaveGrid(@"C:\test\myfile.xlsx",
FileFormatEnum.Excel, FileFlags.OpenXml);
}
注意:你必须添加 Imports 或者 using 代码块到你的窗体代码的最上方,使
得这段代码能够工作正常。如果编写 Visual Basic 请使用 Imports
C1.Win.C1FlexGrid。如果编写 C#请使用 using C1.Win.C1FlexGrid;。
3. 请将下面的代码添加到 Button2_Click 事件中去,作为 Clear 按钮的内容:


      • Visual Basic


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Me.C1FlexGrid1.Clear(ClearFlags.All) End Sub


      • C#


private void button2_Click(object sender, EventArgs e)
{
this.c1FlexGrid1.Clear(ClearFlags.All);
}
4. 将下面的代码输入到 Button3_Click 事件中去,作为 Load 按钮的行为:


      • Visual Basic


Private Sub button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
Me.C1FlexGrid1.LoadGrid("C:\test\myfile.xlsx",
FileFormatEnum.Excel, FileFlags.OpenXml) End Sub


      • C#


private void button3_Click(object sender, EventArgs e)
{
this.c1FlexGrid1.LoadGrid(@"C:\test\myfile.xlsx",
FileFormatEnum.Excel, FileFlags.OpenXml);
}
运行这个程序:


      1. 在表格中输入你需要的内容。
      2. 点击 Save 按钮。表格将会保存为一个 Open XML 文件,后缀名为.xlsx,文件将会保存到"C:\test"
      3. 目录下。如果文件夹不存在的话,你必须创建这个文件夹。



      1. 点击 Clear 按钮来清空表格。
      2. 点击 Load 按钮,之前你保存的表格将会被重新读取出来。


 用数据填充一个非绑定的表格


想要用数据填充非绑定表格,请使用表格的索引器来填充列、行或者一个
单元格。要填充一个单元格区域,请使用 Data 属性。


 用数据填充一列


想要用数据填充一列,在窗体加载的时候,用表格的索引设置一个循环来
填充列。将下面的代码添加到 Form_Load 事件中,将 0 填充到第一列的所有行:


      • Visual Basic


Dim r As Integer
For r = C1FlexGrid1.Rows.Fixed To C1FlexGrid1.Rows.Count - 1
Me.C1FlexGrid1(r, 1) = 0 Next


      • C#


int r;
for (r = c1FlexGrid1.Rows.Fixed; r <= c1FlexGrid1.Rows.Count -1;r++)
{

this.c1FlexGrid1[r, 1] = 0;


}
本主题演示如下: 用 0 来填充第一列。



 用数据填充一个单元格区域


想要用数据填充一个单元格区域,在窗体加载的时候,为 CellRange 设置
Data 属性。添加下面的代码到 Form_Load 事件中,设置 Data 属性为 0:


      • Visual Basic

        Dim rng As C1.Win.C1FlexGrid.CellRange = Me.C1FlexGrid1.GetCellRange(1,
        1,
        3, 3) rng.Data = 0

      • C#


C1.Win.C1FlexGrid.CellRange rng = this.c1FlexGrid1.GetCellRange(1,1,3,3); rng.Data = 0;
本主题演示如下:
所有的单元格区域都被 0 填满了。


 用数据填充一行


想要用数据填充一行,在窗体加载的时候,用表格的索引设置一个循环来
填充行。添加下面的代码到 Form_Load 事件中,将第一行的所有列填充为 0:


      • Visual Basic


Dim r As Integer
For r = C1FlexGrid1.Cols.Fixed To C1FlexGrid1.Cols.Count - 1
Me.C1FlexGrid1(1, r) = 0 Next


      • C#


int r;
for (r = c1FlexGrid1.Cols.Fixed; r <= c1FlexGrid1.Cols.Count -1;r++)
{

this.c1FlexGrid1[1, r] = 0;


}
本主题演示如下: 第一行被 0 填满了。



 用数据填充一个单元格


想要用数据填充一个单元格,在窗体加载的时候,用表格的索引来设置数
据。添加下面的代码到 Form_Load 事件中, 设置单元格的文本:


      • Visual Basic


Me.C1FlexGrid1(3, 2) = "Cell Text"


      • C#



this.c1FlexGrid1[3, 2] = "Cell Text";


本主题演示如下: 文本 Cell Text 在第四行第三列。



 限制表格的编辑


想要禁止编辑整个表格,特定行或者特定列,设置 AllowEditing 属性为
False
相反地,要允许编辑的话,将 AllowEditing 属性设置为 True,这也是默认值。


 在整个表格内禁止编辑


想要禁止整个表格内的编辑操作,可以把 AllowEditing 属性设置为 False
这个操作在设计器中或者在代码中都可以完成: 在设计器中: 在 C1FlexGrid 任务菜单中,取消 Enable Editing 的勾选框。
另外, 在属性窗口中找到 AllowEditing 属性并将它设置为 False
在代码中: 将下面的代码添加到 Form_Load 事件中去:


      • Visual Basic


Me.C1FlexGrid1.AllowEditing = False


      • C#


this.c1FlexGrid1.AllowEditing = false;


 禁止某一列的编辑


想要禁止某一列的编辑操作,可以设置 AllowEditing 属性为 False,这个操
作可以在设计器中或者在代码中完成:在设计器中:


      1. 在表格中选中你想编辑的一列。这将会打开这一列的列任务菜单
      2. 取消 Allow Editing 前的勾选框。


另外, AllowEditing 也可以通过 C1FlexGrid 列编辑器来设置:
1. 打开 C1FlexGrid 列编辑器。想要了解更多关于如何访问 C1FlexGrid 列编辑器的信息,请查看访问 C1FlexGrid 列编辑器 章节。


      1. 在右侧的窗格中选中你希望编辑的列,并在左侧窗格中将这一列的 AllowEditing 属性设置为 False
      2. 点击 OK 来关闭编辑器。


在代码中:
将下面的代码添加到 Form_Load 事件中来限制 AtomicMass 列的编辑操
作:


      • Visual Basic


Me.C1FlexGrid1.Cols("AtomicMass").AllowEditing = False
' 与这段代码相同: Me.C1FlexGrid1.Cols(4).AllowEditing = False


      • C#



this.c1FlexGrid1.Cols["AtomicMass"].AllowEditing = false;


//与这段代码相同: this.c1FlexGrid1.Cols[4].AllowEditing = false;




禁止某一行的编辑


想要禁止某一列的编辑操作,可以设置 AllowEditing 属性为 False。在本例
中,代码将会限制第六行的编辑:


      • Visual Basic


Me.C1FlexGrid1.Rows(5).AllowEditing = False


      • C#



this.c1FlexGrid1.Rows[5].AllowEditing = false;




 限制一列的排序


想要限制一列的排序,可以在设计器中或者在代码中将 AllowSorting 属性设置为 False: 在设计器中:


      1. 在表格中选择你想要编辑的一列。这将会打开这一列的列任务菜单
      2. 取消 Allow Sorting 前的勾选框。


另外, AllowSorting 属性也可以通过 C1FlexGrid 列编辑器来设置:


      1. 打开 C1FlexGrid 列编辑器. 打开 C1FlexGrid 列编辑器。想要了解更多关于如何访问 C1FlexGrid 列编辑器的信息,请查看访问 C1FlexGrid 列编辑器章节(第 143 页)。
      2. 在右侧的窗格中选中你希望编辑的列,并在左侧窗格中将这一列的 AllowSorting 属性设置为 False
      3. 点击 OK 来关闭编辑器。


在代码中:
将下面的代码添加到 Form_Load 事件中来限制 AtomicNumber 列的排序操
作:


      • Visual Basic


Me.C1FlexGrid1.Cols("AtomicNumber").AllowSorting = False
'与这段代码相同: Me.C1FlexGrid1.Cols(1).AllowEditing = False


      • C#



this.c1FlexGrid1.Cols["AtomicNumber"].AllowSorting = false;


//与这段代码相同: this.c1FlexGrid1.Cols[1].AllowEditing = false;




 缩放图像


当表格中的某一行的大小发生变换,想要在列中缩放图像,将 ImageAlign 属性设置为 Scale
1. 将这一行的高度设置为第一行高度的两倍。将下面的代码添加到 Form_Load 事件中:


      • Visual Basic


Me.C1FlexGrid1.Rows(1).Height = 2 * Me.C1FlexGrid1.Rows.DefaultSize
Me.C1FlexGrid1.Rows(2).Height = 2 * Me.C1FlexGrid1.Rows.DefaultSize


      • C#



this.c1FlexGrid1.Rows[1].Height = 2 * this.c1FlexGrid1.Rows.DefaultSize; this.c1FlexGrid1.Rows[2].Height = 2 * this.c1FlexGrid1.Rows.DefaultSize;


2. 在这一列中缩放图像。
在设计器中:
打开 C1FlexGrid 列编辑器. 打开 C1FlexGrid 列编辑器。想要了解更多关于如
何访问 C1FlexGrid 列编辑器的信息,请查看访问 C1FlexGrid 列编辑器章节(第 143 页)。
在右侧窗格中选择一个包含有图像的列,然后在左侧窗格中将 ImageAlign
属性设置为 Scale。点击 OK 来关闭编辑器。
代码中在: 将下面的代码添加到步骤 1 之后:



      • Visual Basic

        Me.C1FlexGrid1.Cols(3).ImageAlign =
        C1.Win.C1FlexGrid.ImageAlignEnum.Scale

      • C#


        this.c1FlexGrid1.Cols[3].ImageAlign =


        C1.Win.C1FlexGrid.ImageAlignEnum.Scale;


        本主题演示如下:
        通过使用 ImageAlign 属性,图像将被缩放,以适应单元格内的最大区域,同时保留图片的原始宽高比。

         在整个表格中缩放图像

        想要在整个表格中缩放图像,不只是一列中,请将 Normal 样式中的
        ImageAlign 属性设置为 Scale。 在设计器中:


      1. 打开 C1FlexGrid 样式编辑器。想要了解更多关于如何访问 C1FlexGrid 样式编辑器的信息,请查看访 C1FlexGrid 样式编辑器 章节(第 143 页)。
      2. 置样式列表中选择 Normal。
      3. 在右侧窗格中,找到 ImageAlign 属性并将它设置为 Scale。
      4. 点击 OK 来关闭编辑器。


在代码中:
将下面的代码添加到 Form_Load 事件中去:


      • Visual Basic


Me.C1FlexGrid1.Styles("Normal").ImageAlign = C1.Win.C1FlexGrid.ImageAlignEnum.Scale


      • C#



this.c1FlexGrid1.Styles["Normal"].ImageAlign = C1.Win.C1FlexGrid.ImageAlignEnum.Scale;




 搜寻列中的条目


在用户输入中搜索需要的条目,请将 AutoSearch 属性设置为 FromCursor 来开始从当前行搜索,或者设置为 FromTop 来开始从第一个滚动的行搜索。相反,要想禁用搜索,将 AutoSearch 属性设置为 None,这也是默认值。这个属性可以在设计器或者在代码中设置。
在设计器中:
在属性窗口中找到 AutoSearch 属性并将它设置为 FromTop
在代码中:
将下面的代码添加到 Form_Load 事件中来设置 AutoSearch 属性为
FromTop:


      • Visual Basic


Me.C1FlexGrid1.AutoSearch = C1.Win.C1FlexGrid.AutoSearchEnum.FromTop


      • C#

        this.c1FlexGrid1.AutoSearch =
        C1.Win.C1FlexGrid.AutoSearchEnum.FromTop;


        本主题演示如下:
        对于用户输入的搜索结果,将会高亮包含这个字母的单元格。在本例中,在 Element 列中输入 C 将会高亮 Carbon。
        注意:如果多个条目以同一个字母开头,输入下个字母将会高亮包含这两个字母的条目。举个例子,在 Element 列中输入 He 将会高亮 Helium。

         当用户按下 Delete 键时清空单元格

        要想设置当用户按下 DELETE 键时清空单元格,请使用 C1FlexGridKeyDown 事件来获取 DELETE 键被按下的事件。添加下面的 KeyDown 事件代码到你的窗体中
      • Visual Basic


Private Sub C1FlexGrid1_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles C1FlexGrid1.KeyDown
If (e.KeyCode = Keys.Delete) Then
C1FlexGrid1(C1FlexGrid1.Row, C1FlexGrid1.Col) = 0
End If
End Sub


      • C#


private void c1FlexGrid1_KeyDown(object sender,
System.Windows.Forms.KeyDownEventArgs e)
{
if (e.KeyCode == Keys.Delete)
{
c1FlexGrid1(c1FlexGrid1.Row, c1FlexGrid1.Col) = 0;
}
}


 将行设置为标题行


要将行设置为标题行,请为每一行设置 Caption 和 DataType 属性。
1. 将下面的代码添加到 Form_Load 事件中来设置将会出现在表格中的行数和列数。


      • Visual Basic


Me.C1FlexGrid1.Cols.Count = 5
Me.C1FlexGrid1.Rows.Count = 7


      • C#


this.c1FlexGrid1.Cols.Count = 5; this.c1FlexGrid1.Rows.Count = 7;
2. 向 RowCollection 中添加行:


      • Visual Basic


Dim row As C1.Win.C1FlexGrid.RowCollection = Me.C1FlexGrid1.Rows


      • C#


C1.Win.C1FlexGrid.RowCollection row = this.c1FlexGrid1.Rows;

3. 为每一行设置 Caption 和 DataType 属性。


      • Visual Basic

        row(1).Caption = "Date" row(1).DataType = GetType(DateTime) row(2).Caption = "Contact" row(2).DataType = GetType(String) row(3).Caption = "Phone" row(3).DataType = GetType(String) row(3).EditMask = "(999) 999-9999;*" row(4).Caption = "Platform" row(4).DataType = GetType(String)
        row(4).ComboList = "|Windows XP|Windows 2000|Windows ME|Windows NT|Windows 98|Windows 95" row(5).Caption = "Error Code" row(5).DataType = GetType(Integer) row(6).Caption = "Resolved" row(6).DataType = GetType(Boolean)

      • C#

        row[1].Caption = "Date"; row[1].DataType = typeof(DateTime); row[2].Caption = "Contact"; row[2].DataType = typeof(string); row[3].Caption = "Phone"; row[3].DataType = typeof(string); row[3].EditMask = "(999) 999-9999;*"; row[4].Caption = "Platform"; row[4].DataType = typeof(string);


        row[4].ComboList = "|Windows XP|Windows 2000|Windows ME|Windows NT|Windows 98|Windows 95"; row[5].Caption = "Error Code"; row[5].DataType = typeof(int); row[6].Caption = "Resolved"; row[6].DataType = typeof(bool);

        1. 将标题行的字体格式化为 Tahoma, 9pt, Bold。
      • Visual Basic


Me.C1FlexGrid1.Styles("Fixed").Font = New Font("Tahoma", 9, FontStyle.Bold)


      • C#



this.c1FlexGrid1.Styles["Fixed"].Font = new Font("Tahoma", 9, FontStyle.Bold);




        1. 合并固定行并添加标题行:


      • Visual Basic

        Me.C1FlexGrid1.AllowMerging =
        C1.Win.C1FlexGrid.AllowMergingEnum.FixedOnly row(0).AllowMerging = True
        Dim rng As C1.Win.C1FlexGrid.CellRange = C1FlexGrid1.GetCellRange(0, 1,
        0, 4) rng.Data = "Call Log"

      • C#


this.c1FlexGrid1.AllowMerging =

C1.Win.C1FlexGrid.AllowMergingEnum.FixedOnly; row[0].AllowMerging = true;


C1.Win.C1FlexGrid.CellRange rng = c1FlexGrid1.GetCellRange(0,1,0,4); rng.Data = "Call Log";
本主题演示如下: 标题行将会出现在第一列并且每一行将会被格式化为它自己拥有的
DataType 属性:



 为行或者列设置背景色


要为列和行设置背景色,创建一个新的样式并将它指定到一行或者一列。
为列设置背景色
1. 为这一列创建一个新的样式。
在设计器中:


      • 打开 C1FlexGrid 样式编辑器。想要了解更多关于如何访问 C1FlexGrid 样式编辑器的信息,请查看访问 C1FlexGrid 样式编辑器 章节(第 143 页)。
      • 点击 Add 来创建一个新的样式。
      • 双击 CustomStyle1 将它重命名为 ColumnColor,然后按下 ENTER。
      • 不要退出 C1FlexGrid 样式编辑器.


在代码中: 将下面的代码添加到 Form_Load 事件中去:


      • Visual Basic


Dim cc As C1.Win.C1FlexGrid.CellStyle cc = Me.C1FlexGrid1.Styles.Add("ColumnColor")


      • C#


C1.Win.C1FlexGrid.CellStyle cc = this.c1FlexGrid1.Styles.Add("ColumnColor");
2. 将 BackColor 颜色设置为 CornSilk。在设计器中:


      • 在 C1FlexGrid 样式编辑器中,在右侧窗格中找到 BackColor 属性并将它设置为


CornSilk。


      • 点击 OK 来关闭 C1FlexGrid 样式编辑器. 在代码中: 将下面的代码添加到 Form_Load 事件中去:
      • Visual Basic


cc.BackColor = Color.Cornsilk


      • C#


cc.BackColor = Color.Cornsilk;


3. 将下面的代码添加到 Form_Load 事件中,将这个样式指定到一列上:


      • Visual Basic


Me.C1FlexGrid1.Cols(2).Style = Me.C1FlexGrid1.Styles("ColumnColor")


      • C#



this.c1FlexGrid1.Cols[2].Style = this.c1FlexGrid1.Styles["ColumnColor"];


本主题演示如下:
Element 列的背景色将会被设置为 CornSilk。
为行设置背景色



      1. 为这一行创建一个新的样式。


在设计器中:


        • 打开 C1FlexGrid 样式编辑器。想要了解更多关于如何访 C1FlexGrid 样式编辑器的信息,请查看访问 C1FlexGrid 样式编辑器 章节(第 143 页)。
        • 点击 Add 来创建一个新的样式。
        • 双击 CustomStyle1 将它重命名为 RowColor, 然后按下 ENTER。
        • 不要退出 C1FlexGrid 样式编辑器.


在代码中:
将下面的代码添加到 Form_Load 事件中去:


        • Visual Basic


Dim rs As C1.Win.C1FlexGrid.CellStyle rs = Me.C1FlexGrid1.Styles.Add("RowColor")


        • C#


C1.Win.C1FlexGrid.CellStyle rs = this.c1FlexGrid1.Styles.Add("RowColor");


      1. 将背景色设置为 PowderBlue. 在设计器中:
        • 在 C1FlexGrid 样式编辑器中,找到 BackColor 属性并将它设置为 PowderBlue。
        • 点击 OK 来关闭 C1FlexGrid 样式编辑器.


在代码中:


      • Visual Basic


rs.BackColor = Color.PowderBlue


      • C#


rs.BackColor = Color.PowderBlue;

2. 将下面的代码添加到 Form_Load 事件中,将这个样式指定到一行上:


      • Visual Basic


Me.C1FlexGrid1.Rows(8).Style = Me.C1FlexGrid1.Styles("RowColor")


      • C#



this.c1FlexGrid1.Rows[8].Style = this.c1FlexGrid1.Styles["RowColor"];



本主题演示如下:
这一行的背景色将会被设置为 PowderBlue。注意,这个颜色将会替代该行本身的颜色。



 在一个语句中设置行和列的背景色


要使用一句代码来设置行和列的背景色,请将下面的代码添加到
Form_Load 事件中:


      • Visual Basic


Me.C1FlexGrid1.Cols(2).StyleNew.BackColor = Color.Cornsilk
Me.C1FlexGrid1.Rows(8).StyleNew.BackColor = Color.PowderBlue


      • C#



this.c1FlexGrid1.Cols[2].StyleNew.BackColor = Color.Cornsilk; this.c1FlexGrid1.Rows[8].StyleNew.BackColor = Color.PowderBlue;


本主题演示如下:
这一行代码所带来的结果和创建一个新样式并指定到行上是一样的。然
而,使用单独一句只改变它指定的那一行或者一列。要想将样式应用到多行或者多列,创建一个新样式并将它设置到列上或者行上,请看为行或者列设置背景色章节



 为单一单元格设置字体


要想为单一单元格设置字体,请创建一个新的样式并指定到一个单元格上。
1. 创建一个新样式。在设计器中:


      • 打开 C1FlexGrid 样式编辑器。想要了解更多关于如何访问 C1FlexGrid 样式编辑器的信息,请查看访问 C1FlexGrid 样式编辑器 章节(第 143 页)。
      • 点击 Add 来创建一个新的样式。
      • 双击 CustomStyle1 并将它重命名为 myStyle,完成后按下 ENTER 键。
      • 不要退出 C1FlexGrid 样式编辑器。


在代码中:
将下面的代码添加到 Form_Load 事件中去:
 Visual Basic
Dim cs As C1.Win.C1FlexGrid.CellStyle cs = Me.C1FlexGrid1.Styles.Add("myStyle")  C#
C1.Win.C1FlexGrid.CellStyle cs = this.c1FlexGrid1.Styles.Add("myStyle");
2. 将字体设置为 Tahoma, 10 pt, Bold。
在设计器中:


      • C1FlexGrid 样式编辑器,在右侧窗格中找到 Font 属性并点击旁边的省略号按钮。


Font 对话框将会弹出。


      • 设置 Font 为 Tahoma。
      • 设置 Font style 为 Bold。
      • 设置 Size10
      • 点击 OK 来关闭 Font 对话框。但是不要退出 C1FlexGrid 样式编辑器。在代码中: 将下面的代码添加到 Form_Load 事件中去:
      • Visual Basic


cs.Font = New Font("Tahoma", 10, FontStyle.Bold)


      • C#


cs.Font = new Font("Tahoma", 10, FontStyle.Bold);


      1. 将字体颜色设置为 Blue。


在设计器中:


        • 在 C1FlexGrid 样式编辑器中,在右侧窗格中找到 ForeColor 属性并将它设置为


Blue。


        • 点击 OK 来关闭 C1FlexGrid 样式编辑器.


在代码中:
将下面的代码添加到 Form_Load 事件中去:


        • Visual Basic


cs.ForeColor = Color.Blue


        • C#


cs.ForeColor = Color.Blue;


      1. 将下面的代码添加到 Form_Load 事件中,来讲这个样式指定到一个单元格上:
        • Visual Basic


Me.C1FlexGrid1.SetCellStyle(6, 2, "myStyle")


        • C#


this.c1FlexGrid1.SetCellStyle(6, 2, "myStyle");

本主题演示如下:
Carbon 将会显示为蓝色粗体 10 pt、Tahoma 字体。


 在 C1FlexGrid 中设置文本分隔符


要在 C1FlexGrid 中设置文本分隔符,使用 Split 方法。
将下面的代码添加到 Form_Load 事件中来设置文本分隔符为分号:


      • Visual Basic


Dim cols As String = "Product;Region;Salesperson;Sales;Bonus"
Dim colNames As String() = cols.Split(";")
Me.C1FlexGrid1.Cols.Count = 5
Me.C1FlexGrid1.Cols.Fixed = 0
Dim i%
For i = 0 To Me.C1FlexGrid1.Cols.Count - 1
Me.C1FlexGrid1(0, i) = colNames(信息)
Me.C1FlexGrid1.Cols(信息).Name = colNames(信息) Next


      • C#



string cols = "Product;Region;Salesperson;Sales;Bonus"; string[] colNames = cols.Split(new char[] { ';' }); this.c1FlexGrid1.Cols.Count = 5; this.c1FlexGrid1.Cols.Fixed = 0; for (int i = 0; i <= this.c1FlexGrid1.Cols.Count - 1; i++)


{

this.c1FlexGrid1[0, i] = colNames[i]; this.c1FlexGrid1.Cols[i].Name = colNames[i];


}
本主题演示如下:
Split 中的字符串确定了分隔符。将字符串和 Split 方法中的分号换为逗
号将会和使用分号有一样的效果。



 多列排序


想要对多个列排序,将每一列的 Sort 属性都设置并使用 Sort 方法来对列进
行排序。
1. 将下面的代码添加到 Form_Load 事件中来设置第二排序列为升序,第三排序列为降序。


      • Visual Basic


Me.C1FlexGrid1.Cols(1).Sort = C1.Win.C1FlexGrid.SortFlags.Ascending
Me.C1FlexGrid1.Cols(2).Sort = C1.Win.C1FlexGrid.SortFlags.Descending


      • C#



this.c1FlexGrid1.Cols[1].Sort = C1.Win.C1FlexGrid.SortFlags.Ascending; this.c1FlexGrid1.Cols[2].Sort = C1.Win.C1FlexGrid.SortFlags.Descending;


2. 将下面的代码添加到 Sort 方法中来进行第二和第三列的升序排列。



      • Visual Basic

        Me.C1FlexGrid1.Sort(C1.Win.C1FlexGrid.SortFlags.UseColSort,
        2)

        1,

      • C#


this.c1FlexGrid1.Sort(C1.Win.C1FlexGrid.SortFlags.UseColSort, 1, 2);
本主题演示如下:
你的表格将会看起来如下图所示,第二列为升序排列,第三列为降序排列。在本例中,表格中的的 StandardState 列如果升序排列 Element 列如果降序排列的话,Element 列中的 Neon 将会出现在 Argon 前面。


 取消排序


要在 C1FlexGrid 中取消排序,当这个表格绑定到一个 DataTable 时,将
DefaultView 属性设置为 null。
将下面的代码添加到 Button1_Click 事件中:


      • Visual Basic


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
CustTable.DefaultView.Sort = "" End Sub


      • C#


private void Button1_Click(object sender, System.EventArgs e)
{
CustTable.DefaultView.Sort = "";
}
注意:DataTable.DefaultView 将会返回 DataTable 中的 DataView,并将排序字段设置为 null 来强制 DataView 取消之前的排序。
本主题演示如下: 点击 Last Name 来排序。

点击 Undo 按钮,排序将会被取消。


 在 C1FlexGrid 中使用密码项


要在单元格中输入密码时显示占位符(*),请使用 SetupEditor 事件。
1. 在表格中创建一列密码列并设置它的绘制模式:


      • Visual Basic

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
        System.EventArgs) Handles MyBase.Load
        Me.C1FlexGrid1.Cols(0).Width = Me.C1FlexGrid1.Rows(0).HeightDisplay
        Me.C1FlexGrid1.ShowCursor = True
        Me.C1FlexGrid1.Cols(1).Caption =((Me.C1FlexGrid1.Cols(1).Name) =
        "Password")
        Me.C1FlexGrid1.DrawMode =
        C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw
        End Sub

      • C#


private void Form1_Load(object sender, System.EventArgs e)
{

this.c1FlexGrid1.Cols[0].Width = this.c1FlexGrid1.Rows[0].HeightDisplay; this.c1FlexGrid1.ShowCursor = true; this.c1FlexGrid1.Cols[1].Caption = this.c1FlexGrid1.Cols[1].Name =


"Password";
this.c1FlexGrid1.DrawMode =
C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw; }
2. 将下面的代码添加到 SetupEditor 事件中。这段代码将用户输入的字母隐藏起来。



      • Visual Basic

        Private Sub C1FlexGrid1_SetupEditor(ByVal sender As Object, ByVal e As
        C1.Win.C1FlexGrid.RowColEventArgs) Handles C1FlexGrid1.SetupEditor
        Dim tb As TextBox = Me.C1FlexGrid1.Editor
        If Not (tb Is Nothing) Then
        If Me.C1FlexGrid1.Cols(e.Col).Name = "Password" Then tb.PasswordChar = "*"c Else
        tb.PasswordChar = CChar(0)
        End If
        End If
        End Sub

      • C#


private void c1FlexGrid1_SetupEditor(object sender,
C1.Win.C1FlexGrid.RowColEventArgs e)
{
TextBox tb = this.c1FlexGrid1.Editor as TextBox; if (tb != null)
{

if (this.c1FlexGrid1.Cols[e.Col].Name == "Password") tb.PasswordChar = '*'; else tb.PasswordChar = (char)0;


}
}
本主题演示如下:
当用户在 Password 列中键入密码时之后并按下 ENTER,文本内容将会自动的被隐藏起来。



 隐藏已经输入的字符


要想隐藏已经输入并且不需要编辑的文字,请使用 OwnerDrawCell 事件。
1. 将下面的代码添加到 OwnerDrawCell 事件中。这段代码将会隐藏已经输入并且不需要编辑的文字。


      • Visual Basic

        Private Sub C1FlexGrid1_OwnerDrawCell(ByVal sender As Object, ByVal e
        As C1.Win.C1FlexGrid.OwnerDrawCellEventArgs) Handles
        C1FlexGrid1.OwnerDrawCell
        If e.Row >= Me.C1FlexGrid1.Rows.Fixed And
        Me.C1FlexGrid1.Cols(e.Col).Name = "Password" Then e.Text = New String("*"c, e.Text.Length)
        End If
        End Sub

      • C#


private void c1FlexGrid1_OwnerDrawCell(object sender,
C1.Win.C1FlexGrid.OwnerDrawCellEventArgs e)
{

if (e.Row >= this.c1FlexGrid1.Rows.Fixed && this.c1FlexGrid1.Cols[e.Col].Name == "Password")


{
e.Text = new string('*', e.Text.Length);
}
}
2. 将下面的代码添加到 Form_Load 事件中



      • Visual Basic




      • C#



Me.Cthis.c1FlexGrid1[1,1] = "123456";(1) = "123456"


本主题演示如下:
再次运行程序,请注意 Password 列中自动填充到窗体上的的数字被变为星号。



 在列头或者固定行换行


要想在列头或者固定行换行,请设置 Height 和 WordWrap 属性。
1. 为列头设置 Caption 属性在设计器中:


      • 在表格中选择一列,这将会打开这一列的列任务菜单
      • 在 Column Caption 框中,输入 Word Wrapping in Header。另外, Caption 属性也可以在 C1FlexGrid 列编辑器中设置。
      • 打开 C1FlexGrid 列编辑器. 打开 C1FlexGrid 列编辑器。想要了解更多关于如何访问 C1FlexGrid 列编辑器的信息,请查看访问 C1FlexGrid 列编辑器章节(第 143 页)。
      • 在右侧窗格中选择一列并在左侧窗格中将它的 Caption 属性设置为 Word


Wrapping in Header


      • 点击 OK 来关闭编辑器。


在代码中: 将下面的代码添加到 Form_Load 事件中。


      • Visual Basic


Me.C1FlexGrid1.Cols(1).Caption = "Word Wrapping in Header"


      • C#



this.c1FlexGrid1.Cols[1].Caption = "Word Wrapping in Header";


2. 设置列头的高度。



      • Visual Basic


Me.C1FlexGrid1.Rows(0).Height = 3 * Me.C1FlexGrid1.Rows.DefaultSize


      • C#



this.c1FlexGrid1.Rows[0].Height = 3 * this.c1FlexGrid1.Rows.DefaultSize;


3. 允许固定单元格的换行。
在设计器中:



      • 打开 C1FlexGrid 样式编辑器。想要了解更多关于如何访问 C1FlexGrid 样式编辑器的信息,请查看访问 C1FlexGrid 样式编辑器 章节(第 143 页)。
      • 在内置样式列表中选择 Fixed
      • 在右侧窗格中找到 WordWrap 属性并将它设置为 True
      • 点击 OK 来关闭设计器。


在代码中: 将下面的代码添加到 Form_Load 事件中去:


      • Visual Basic


Me.C1FlexGrid1.Styles("Fixed").WordWrap = True


      • C#



this.c1FlexGrid1.Styles["Fixed"].WordWrap = true;



本主题演示如下: 在本例中,一个三行的列头被创建了,文字是自动折行的。


  • No labels