UI数据表现工具_ComponentOne控件高级研究

C1介绍

       上篇《UI_ComponentOne使用简介》对C1控件的常用操作进行了简要介绍,本篇讲继续对C1控件的高级操作进行研究,进行经验总结。

C1高级操作指南

1. 相同行合并

第一种方法是通过C1高级选项控制

总的C1控件设置

 

分列合并设置

 

 

当 AllowMerging 直接设为True 时,所有 每行所有相同的字段信息都会合并。

如下图,但是与我们的实际期望的不符,我们按照PTO代码+参数名称区分每一组数据的,就是希望即时PTO代码或其他产品线等信息相同也不合并,而是依据计划类别进行分组合并。

 

 

 

在代码中加入this.fgResult.AllowMerging = AllowMergingEnum.RestrictCols; 这句话的本身的意思按照C1列从左至右,按照最多合并项进行合并。比如下图,列从左至右,到参数分为2组,则前面一样的字段信息,比如产品线,大类,Pto代码等按照2组进行分类。然后再从左往右进行,计划类别,每组数据再次分为15小组,则后面的数据均按照这15小组进行数据合并。这样就有效区分每条数据具体包含的范围,而不像上图1全部合并。

 

 

第二种方法是增加空行的方法进行分组

组合数据按照要求进行分组,AllowMerging 用默认设置Free的情况下,也可以通过在组建的C1控件依据规则增加空行的形式进行。但要采用空行的情况下,在输出数据的时候,应该空行隐藏。

 

dtResult = this.AddNullRow(dtResult);

 

    // 空行隐藏

    if (i % stepLength == 1)

    {

        this.fgResult.Rows[i].Visible = false;

 }

 

        /// <summary>

        /// 没隔STEP行添加一个空行

        /// </summary>

        /// <param></param>

        /// <returns></returns>

        private DataTable AddNullRow(DataTable dtSource)

        {

            int intTime = 0;

            int stepLength = 9;

            DataTable dtCopy = dtSource.Copy();

 

            for (int i = 0; i < dtResult.Rows.Count; i++)

            {

                if (i % stepLength == 0)

                {

                    DataRow nullRow = dtCopy.NewRow();

                    dtCopy.Rows.InsertAt(nullRow, i + intTime);

                    intTime++;

                }

            }

 

            return dtCopy;

        }

 

2. C1的列与具体的控件属性和方法关联

C1的列编辑器有一个很有趣的设定,就是它可以把当前行的Cell与页面的某一个控件,比如Label,Textbox,Button等建立关联,以实现个性化的需求。

       它通过Editor属性进行设置和实现。

 

 

上图为姓名列信息与Label关联,则点击该Cell,C1会自动把该Cell的内容放到Label里面,这样Label的各种属性和方法该Cell都可以利用到了。

 

上图 是地址的列与Textbox控件关联的。

 

 

上图是地址的列与Textbox控件关联的。但Textbox控件属性设为不可用,所以选中该Cell时对应的不可用的灰框。

 

 

上图是教育与Button关联。双击该Cell,则在Button弹出对话框。

 

3. C1的行RowsCols列的编辑性设置

 

//总体可以编辑

c1FlexGrid1.AllowEditing = true;

//设置某些列不可编辑

c1FlexGrid1.Cols["BIRTHDAY"].AllowEditing = false;

c1FlexGrid1.Cols["FULL_NAME"].AllowEditing = false;

//设置某些行不可编辑

c1FlexGrid1.Rows[2].AllowEditing = false;

c1FlexGrid1.Rows[4].AllowEditing = false;

c1FlexGrid1.Rows[5].AllowEditing = true;

 

C1控件的是否可编辑的设置的原则,是false大于true。比如上述设置两个列为只读,则即使某一行设为可以编辑,此时这一行的这一列也无法编辑保持只读。同样,当某一行设为只读是,即使该有列设为可以读写,该行依然是只读的。

 

4. C1的Cell的编辑性设置

上述而言,C1的编辑性是限制到行和列的,不能对某个Cell进行是否可以编辑进行设置。这是如果还需要对某个Cell进行可编辑进行限制。这时候有两种方法。

    第一种方法,在Cell的设置自定义的只读属性的Style 。

 

//Cell设为只读的Style

CellStyle labelstype = c1FlexGrid1.Styles.Add("ReadOnly");

labelstype.Editor = label1;

 

//设置第6行的第6列到第8列为只读,就是把该CellRange的Style设置为自定义的Style 即可

CellRange cr = c1FlexGrid1.GetCellRange(6, 6, 6, 8);

cr.Style = labelstype;

 

    第二种方法,是在C1控件的BeforeEdit事件增加判断,判断满足条件的Cell,将其修改事件的效果改为Cancel即可。

        private void c1FlexGrid1_BeforeEdit(object sender, RowColEventArgs e)

        {

            //设置第-9行的第列不可编辑

            if ((e.Row >= 7 && e.Row <= 9) && (e.Col == 7))

            {

                e.Cancel = true;

            }

        }

 

5. C1的Style设定

灵活运用Style,可以得到比较好的用户体验效果。

    //定义字体

    Font font1 = new Font("Microsoft YaHei", 9, FontStyle.Italic);

    //定义Syle

    CellStyle styleCustom = c1FlexGrid1.Styles.Add("Custom");

    styleCustom.BackColor = Color.BlueViolet;

    styleCustom.ForeColor = Color.Yellow;

styleCustom.Font = font1;

 

    //设置Style

    CellRange cr2 = c1FlexGrid1.GetCellRange(10, 6, 10, 8);

cr2.Style = styleCustom;

效果如下:

 

 

6. C1的BeforeEdit,ValidateEdit,AfterEdit的区别和作用

C1中BeforeEdit,ValidateEdit,AfterEdit三个事件函数主要对C1的数据进行过滤和控制,三者既有联系又有区别。要详细区分三者的使用场景。

    //事件触发时,该Cell的值[原始值],

c1FlexGrid1[e.Row, e.Col].ToString()

//事件触发时,编辑区的值[修改值]

c1FlexGrid1.Editor.Text

 

BeforeEdit

 

 

ValidateEdit

 

AfterEdit 

 

以上抓图可以看出不同事件触发时,c1FlexGrid1[e.Row, e.Col].ToString()的取值是不同的。e.Cancel = true 的效果也不同。

BeforeEdit 是预先判断的,它的判断依据是Cell的原始值,如果此时e.Cancel = true时,则起到Cell是只读的效果。

ValidateEdit 可以得到Cell的原始值和修改后的值。我们可以依据修改后的值进行业务规则判断,比如大于0或小于0,直接提示用户。使用了e.Cancel = true后,事件不通过,必须Cell放弃当前修改或修改成正确值才可以。

AfterEdit,仅能得到修改后的值,但可以通过此值依据业务规则进行运算,以期实现Cell的数值互动。比如计算录入该Cell值后,统计该行或列的数据。

 

7. C1的图形控件

结合C1Chart控件,可以把数据表的数据信息转换成图形的样式,加深信息的理解。如下图显示的几个物料的总数量和安全库存的对比分析。

 

 

8. C1的其他常用属性

 //当前行,用于双击或单击某一行数据获取的行Index

c1FlexGrid1.RowSel

 //当前选中Cell

c1FlexGrid1[c1FlexGrid1.Selection.r1, c1FlexGrid1.Selection.c1]

//事件中,当前Cell

c1FlexGrid1[e.Row, e.Col]

 

参考书目

1.  ComponentOne Studio Enterprise 帮助文档

posted on 2010-03-01 19:17  FlyingPeer  阅读(1764)  评论(1编辑  收藏  举报