找回密码
 立即注册

QQ登录

只需一步,快速开始

q406157290
高级会员   /  发表于:2015-11-3 15:29:00
11#
回复 10楼KNight的帖子

应该是您找的原因,之所以写那代码是因为当只点击button的时候button所在的行时不会被选择上的,所以才手动让当前选择行它移动到button所在行,这代码又是必须有的 哎
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-11-3 15:49:00
12#
回复 1楼q406157290的帖子

谢谢您的反馈。
您的问题我重现了,问题已经提交到产品组,如果有进展,会给您反馈。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-11-4 11:31:00
13#
回复 11楼q406157290的帖子

和研发组讨论了下您的问题。
因为通过window已经传了DataContxt,因此下面的两句在Button_Click中的代码是没有必要的:
  1.   //CollectionView cv = (CollectionView)CollectionViewSource.GetDefaultView(this.flexGridViewModel1.ItemSource);
  2.                     //cv.MoveCurrentTo(d.FlexGridModels);
复制代码


和10楼所提到的一致。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-11-5 08:58:00
14#
回复 13楼Alice的帖子

但是实际的开发中 需要当直接点击DataGrid 某行的button时,需要被点击button所在行处于选中状态,这两行代码是不能没有的
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-11-5 14:10:00
15#
回复 14楼q406157290的帖子

谢谢您的反馈。
您可以查看10楼的示例验证您的需求。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
KNight
中级会员   /  发表于:2015-11-5 17:28:00
16#
回复 14楼q406157290的帖子

参考解决方案(1):
  1. if (cell != null && cell.Row.Index < this.grid.Rows.Count)
  2. {
  3.         d.FlexGridModels = cell.Row.DataItem as FlexGridModel;

  4.         // 下面两句是必须的
  5.         this.grid.Focus();
  6.         this.grid.UpdateLayout();
  7.        
  8.         Window1 w = new Window1();
  9.         //d.FlexGridModels.Name = null;// 情况一
  10.         // d.FlexGridModels.Name = "";// 情况二
  11.         w.DataContext = d;
  12.         w.ShowDialog();

  13.         // 子窗口关闭后再选中行
  14.         grid.SelectedIndex = cell.Row.Index;
  15. }
复制代码


参考解决方案(2):
  1. if (cell != null && cell.Row.Index < this.grid.Rows.Count)
  2. {
  3.         d.FlexGridModels = cell.Row.DataItem as FlexGridModel;

  4.         // 启动开始更新
  5.         grid.Selection.BeginUpdate();
  6.         // 换行
  7.         grid.SelectedIndex = cell.Row.Index;
  8.        
  9.         // 下面两句是必须的
  10.         this.grid.Focus();
  11.         this.grid.UpdateLayout();

  12.         Window1 w = new Window1();
  13.         //d.FlexGridModels.Name = null;// 情况一
  14.         // d.FlexGridModels.Name = "";// 情况二
  15.         w.DataContext = d;
  16.         w.ShowDialog();

  17.         // 提交换行更新
  18.         grid.Selection.EndUpdate(true, true);
  19. }
复制代码


如果在显示子窗口之前,不需要选中点击按钮所在行,只要调用下面两句代码(少一句都不可以)即可保证只有一个红色验证边框:
  1. this.grid.Focus();
  2. this.grid.UpdateLayout();
复制代码


但是,一旦在显示子窗口之前,手动设置DataGrid的选择行,以至于触发了其换行事件(如果本来就是选择该行,没触发换行事件,则没事儿),就会导致两层红色边框:
  1. if (cell != null && cell.Row.Index < this.grid.Rows.Count)
  2. {
  3.         d.FlexGridModels = cell.Row.DataItem as FlexGridModel;

  4.         grid.SelectedIndex = cell.Row.Index;
  5.        
  6.         // 下面两句是必须的
  7.         this.grid.Focus();
  8.         this.grid.UpdateLayout();
  9.        
  10.         Window1 w = new Window1();
  11.         //d.FlexGridModels.Name = null;// 情况一
  12.         // d.FlexGridModels.Name = "";// 情况二
  13.         w.DataContext = d;
  14.         w.ShowDialog();

  15.         // 子窗口关闭后再选中行
  16.         //grid.SelectedIndex = cell.Row.Index;
  17. }
复制代码

上面的代码,当DataGrid当前选择的行,与所点击的按钮所在行一致,则不会出现两层红色边框,否则相反;

所以就猜测是由于显示子窗口之前,DataGrid的换行操作事件,导致了子窗口中对应绑定控件多了一层排他验证的Border;
参考解决方案(2),即可知道,当 grid.Selection.EndUpdate(true, true); 提交换行操作时,就会导致该现象,所以可以将换行操作放到子窗口关闭后在提交即可;
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-11-9 09:33:00
17#
回复 16楼KNight的帖子

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

葡萄城控件服务团队

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