FlexGrid问题集锦(一):解决常见的开发问题

概述本文主要是将以往我们论坛,售后解决的常见的经典问题,整合成一个问题集锦,里面讲述开发者在开发过程中遇到的一些问题,希望能帮助更多的开发人员。

发布于 2017/05/25 00:00

ComponentOne Enterprise

概述

本文主要是将以往我们论坛,售后解决的常见的经典问题,整合成一个问题集锦,里面讲述开发者在开发过程中遇到的一些问题,希望能帮助更多的开发人员。

经典一:

应用场景:

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:          }

运行出来的结果如下;

image

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:  }

如此我们得到了这样的效果:

image

通过这样方法我们可以在OwnerDrawCell事件中来判断某个单元格是否满足你设定的某些条件,以及应用什么的样式,从而达到样式自定义。

后续我还会继续整理一些经典案例和大家一起分享,希望能帮助到大家。

如果你有疑问,可以到GCDN获得技术支持:

http://gcdn.grapecity.com.cn/showforum-68.html

GCDNhttp://gcdn.grapecity.com.cn/

官方网站/developer

关于葡萄城

葡萄城软件是专业的软件开发技术和低代码平台提供商,以“赋能开发者”为使命,致力于通过表格控件、低代码和BI等各类软件开发工具和服务,一站式满足开发者需求,帮助企业提升开发效率并创新开发模式。葡萄城开发技术始于1980年,40余年来始终聚焦软件开发技术,有深厚的技术积累和丰富的产品线。是业界能够同时赋能软件开发和低代码开发的企业。凭借过硬的产品能力、活跃的用户社区和丰富的伙伴生态,与超过3000家合作伙伴紧密合作,产品广泛应用于信息和软件服务、制造、交通运输、建筑、金融、能源、教育、公共管理等支柱产业。

相关产品
推荐相关案例
关注微信
葡萄城社区二维码

关注“葡萄城社区”

活字格低代码二维码

关注“活字格低代码”

想了解更多信息,请联系我们, 随时掌握技术资源和产品动态