找回密码
 立即注册

QQ登录

只需一步,快速开始

q406157290

高级会员

124

主题

531

帖子

1359

积分

高级会员

积分
1359

活字格认证

q406157290
高级会员   /  发表于:2015-9-2 15:40  /   查看:9985  /  回复:6
1.c1FlexGrid 新规追加的行  如何等到新追加的行的  行和列的索引
怎么能把新追加的行 和已有的行区分开来
2.当新追加行时 会触发CellFactory吗?
3. 如何实现新追加行的单元格的内容和寄存的不一样(如: 某列是Text列 ,想新追加行的该列是ComboBox)
谢谢

6 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2015-9-2 18:41:00
沙发
回复 1楼q406157290的帖子

谢谢反馈。
1.通过AllowAddNew设置为true,就会出现一个新行。新行就是最后一行。即flexgrid.rows.count-1就是新行的索引。
新行的行头会有一个*符号,和其他行不一致,我不太清楚你是想如何区分?
2.你的意思是想问,你通过新行添加到C1FlexGrid的行,会不会按照CellFactory绘制?会的。

3.不知道你是不是想要这样的效果?

通过CellFactory可以实现。
代码参考:
  1. public class MyCellfactroy : C1.WPF.FlexGrid.CellFactory
  2. {
  3.     public override void CreateCellContent(C1.WPF.FlexGrid.C1FlexGrid grid, Border bdr, C1.WPF.FlexGrid.CellRange rng)
  4.     {
  5.         base.CreateCellContent(grid, bdr, rng);
  6.         if (rng.Row > -1 && rng.Column > -1)
  7.             if (grid.Rows[rng.Row].Index == 0 && grid.Columns[rng.Column2].Index == grid.Columns.Count - 1)
  8.             {
  9.                 var _btn = new Button();
  10.                 _btn.Content = "button";
  11.                 bdr.Child = _btn;
  12.             }
  13.     }
  14. }
复制代码


然后
  1. c1FlexGrid1.CellFactory = new MyCellfactroy();
复制代码
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-9-6 08:32:00
板凳
回复 2楼Alice的帖子

首先谢谢您的回复
1 我说的区分  是在代码中做区分  到底是普通的绑定行 还是新追加的行
2 您给我的效果不是我想要的效果,您现在的这种实现当没有数据的时候,新追加的行Title列也会显示出button来,这样就不太符合我们的要求了,我们想要的是 只有在点击新规行后才出现c1ComboBox或者Button控件
还有个问题 就是新规行的时候  当往单元格输入内容或者是进入编辑状态的时候 新规行就提交成普通的行了 能否实现当按Enter才让它变成普通行吗?而不是一编辑就变化能否控制,这个问题真的很着急,希望能快快有答复,谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-9-6 11:16:00
地板
回复 3楼q406157290的帖子

谢谢反馈。
1.如果你获取的行是新行,它的类型是C1.WPF.C1FlexGrid.NewRowTemplate。如果是绑定行,它的类型是C1.WPF.C1FlexGrid.BoundRow。
  1. Row newrow=flexgrid.Rows[flexgrid.Rows.Count-1];
  2. if(newrow is NewRowTemplate)
  3. {
  4. Console.Writeline("new row");
  5. }
复制代码

2.很抱歉不能。
新行仅仅是一个模板,它不含有任何数据,也不代表数据源里的任何项目。目前的设计是,一进入编辑状态,它就会立即生成一行,会触发相关事件,这个行和数据源相关,你可以在这行进行编辑,并且存储到数据源。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
KNight
中级会员   /  发表于:2015-9-6 21:27:00
5#
回复 3楼q406157290的帖子

第二个问题我提供一个参考解决方法,具体还是要看您的业务数据如何处理;
参考代码如下:
  1. private void flex_RowEditEnding(object sender, CellEditEventArgs e)
  2. {
  3.         if (e.Row == -1)// 处理在新行中开始编辑
  4.         {
  5.                 flex.AllowAddNew = false;
  6.         }
  7. }

  8. private void flex_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
  9. {
  10.         if (e.Key == System.Windows.Input.Key.Enter)// 按Enter键后从新允许添加新行
  11.         {
  12.                 flex.AllowAddNew = true;
  13.                 flex.UpdateLayout();
  14.         }
  15. }
复制代码

这种实现从界面上很直观,但是实际上最后一行数据还是在绑定数据源对象里实例化了,所以在最后的最后,可以根据此时flex的状态(AllowAddNew)来处理最后一行数据,如果状态AllowAddNew为True,则最后一行数据有效,否则处理掉最后一行数据;

评分

参与人数 1金币 +200 收起 理由
Alice + 200 谢谢反馈。

查看全部评分

回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-9-7 08:19:00
6#
回复 5楼KNight的帖子

谢谢您  我稍后会试下 非常感谢
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-9-7 13:43:00
7#
回复 6楼q406157290的帖子

谢谢反馈。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部