概述
本文主要是将以往我们论坛,售后解决的常见的经典问题,整合成一个问题集锦,里面讲述开发者在开发过程中遇到的一些问题,希望能帮助更多的开发人员。
经典一:
应用场景:
Q;我现在想实现获取的选取多个单元格的,并且将他们内面数据合计显示,对于选取的单元集合怎么确定?
A:我们可以通过Selection来确定我们的选择范围,具体见如下实现:
1: private void c1FlexGrid1_MouseUp(object sender, MouseEventArgs e)
2: {
3: int sum = 0;
4: for (int i = c1FlexGrid1.Selection.r1; i <= c1FlexGrid1.Selection.r2; i++)
5: {
6: for (int j = c1FlexGrid1.Selection.c1; j <= c1FlexGrid1.Selection.c2; j++)
7: {
8: //if (this.c1FlexGrid1.Selection.Contains(i, j))
9: if (this.c1FlexGrid1.IsCellSelected(i, j))
10: {
11: sum += int.Parse(c1FlexGrid1[i, j].ToString());
12: }
13: }
14: }
15: MessageBox.Show(sum.ToString());
16: }
运行出来的结果如下;
Tips: c1flexgrid当.selectionmode=listbox时才用flex.rows.selected判断,否则用flex.selection判断;
经典二:
应用场景:
Q:我想在FlexGrid下,指定单元格可以编辑,由其他的单元格决定该单元格是否可以编辑?
A:当然可以,我们可以通过在加载窗体的时候,给BeforeEdit事件增加单元格可读属性,
具体代码如下:
1: this.c1FlexGrid1.BeforeEdit += (s1, e1) =>
2: {
3: var flex = s1 as C1.Win.C1FlexGrid.C1FlexGrid;
4: if (业务逻辑判断)
5: e1.Cancel = true;
6: };
此时,满足条件的单元格都是只读。
还有一种在OwnerDrawCell事件中直接设置属性,前提是设置this.c1FlexGrid1的DrawMode属性
这样控件在渲染的时候回遍历每一个单元格,这样也能达到目的。
经典三:
应用场景:
Q:在FlexGrid是否提供指定单元格样式自定义的方法,比如我的需要的是对于特殊的单元我需要自定背景色,字体,背景图等
A:回答是当然可以,而且我们为了更灵活的设计表格,提供了自定义样式的方法,首先我们要做一个自定义的样式:
1: c1FlexGrid1.Styles.Add("myCustom1");
2: c1FlexGrid1.Styles["myCustom1"].BackColor = Color.Red;
3: c1FlexGrid1.Styles["myCustom1"].Font = new Font(c1FlexGrid1.Styles.Normal.Font.Name, 11);
4: c1FlexGrid1.Styles.Add("myCustom2");
5: c1FlexGrid1.Styles["myCustom2"].BackColor = Color.Orange;
6: c1FlexGrid1.Styles["myCustom2"].Font = new Font(c1FlexGrid1.Styles.Normal.Font.Name, 10);
7: c1FlexGrid1.Styles.Add("myCustom3");
8: c1FlexGrid1.Styles["myCustom3"].BackColor = Color.Yellow;
9: c1FlexGrid1.Styles["myCustom3"].Font = new Font(c1FlexGrid1.Styles.Normal.Font.Name, 9);
10: c1FlexGrid1.AutoSizeCols();
11: c1FlexGrid1.VisualStyle = C1.Win.C1FlexGrid.VisualStyle.Office2007Blue;
12: this.BackColor = Color.FromArgb(191, 219, 255);
这是三个单元格样式,我们现在要完成的目标是,对库存量做一个三种数量的范围的区分,对于某单元格值在某个范围,就给它应用相应的样式
1: private void c1FlexGrid1_OwnerDrawCell(object sender, OwnerDrawCellEventArgs e)
2: {
3: if (c1FlexGrid1.Cols[e.Col].Name == "UnitsInStock" && e.Row > 0)
4: {
5: int tmp;
6: tmp = int.Parse(c1FlexGrid1[e.Row, e.Col].ToString());
7: if (tmp < 10)
8: {
9: e.Style = c1FlexGrid1.Styles["myCustom1"];
10: }
11: else if (tmp < 50)
12: {
13: e.Style = c1FlexGrid1.Styles["myCustom2"];
14: }
15: else if (tmp < 100)
16: {
17: e.Style = c1FlexGrid1.Styles["myCustom3"];
18: }
19: }
20: }
如此我们得到了这样的效果:
通过这样方法我们可以在OwnerDrawCell事件中来判断某个单元格是否满足你设定的某些条件,以及应用什么的样式,从而达到样式自定义。
后续我还会继续整理一些经典案例和大家一起分享,希望能帮助到大家。
如果你有疑问,可以到GCDN获得技术支持:
http://gcdn.grapecity.com.cn/showforum-68.html
GCDN:http://gcdn.grapecity.com.cn/
官方网站:/developer