找回密码
 立即注册

QQ登录

只需一步,快速开始

CanYou8

银牌会员

67

主题

191

帖子

2047

积分

银牌会员

积分
2047

活字格认证微信认证勋章元老葡萄

CanYou8
银牌会员   /  发表于:2016-5-14 11:25  /   查看:3911  /  回复:1
本帖最后由 CanYou8 于 2016-5-14 11:27 编辑

在WPF C1FlexGrid的CellFactory中重写了CreateCellContentEditor方法,以便给需要的单元格绑定下拉框
  1.         /// <summary>
  2.         /// 重写 单元格编辑模板
  3.         /// </summary>
  4.         public override void CreateCellContentEditor(C1FlexGrid grid, Border bdr, CellRange range)
  5.         {
  6.             base.CreateCellContentEditor(grid, bdr, range);

  7.             // get row/col
  8.             var row = grid.Rows[range.Row];
  9.             var col = grid.Columns[range.Column];

  10.             if (null == row.DataItem) return;
  11.             var model = row.DataItem as ParamModel;
  12.             if (null == model) return;

  13.             // 参数值列的控制
  14.             if (_isReadOnly || col.ColumnName != "ParamValue") return;

  15.             //绑定部分参数值列为下拉框
  16.             if (!string.IsNullOrEmpty(model.MembersCollection))
  17.             {
  18.                 var arr = model.MembersCollection.Split(',');
  19.                 if (arr.Any())
  20.                 {
  21.                     _paramValueList.Clear();
  22.                     foreach (string i in arr)
  23.                     {
  24.                         _paramValueList.Add(new { value = i, name = i });
  25.                     }
  26.                 }

  27.                 C1ComboBox comboBox = new C1ComboBox();
  28.                 comboBox.VerticalAlignment = VerticalAlignment.Center;
  29.                 comboBox.HorizontalAlignment = HorizontalAlignment.Center;
  30.                 comboBox.SetResourceReference(C1ComboBox.StyleProperty, "Grid-AutoComboBox-List");
  31.                 comboBox.Margin = _emptyThickness;
  32.                 comboBox.Watermark = string.Empty;
  33.                 comboBox.Width = 120;

  34.                 comboBox.DisplayMemberPath = "name";
  35.                 comboBox.SelectedValuePath = "value";
  36.                 comboBox.ItemsSource = _paramValueList;

  37.                 Binding binding = new Binding();
  38.                 binding.Path = new PropertyPath("ParamValue");
  39.                 binding.Mode = BindingMode.TwoWay;
  40.                 comboBox.SetBinding(C1ComboBox.TextProperty, binding);
  41.                 comboBox.IsDropDownOpen = true;

  42.                 bdr.Margin = _emptyThickness;
  43.                 bdr.Padding = _emptyThickness;
  44.                 bdr.Child = comboBox;
  45.             }
  46.         }
复制代码
在xaml文件中定义C1FlexGrid
  1.                     <c1:C1FlexGrid Name="c1FlexGrid"  ItemsSource="{Binding List,IsAsync=True}"
  2.                                    PreviewKeyDown="c1FlexGrid_PreviewKeyDown"
  3.                                    LoadedRows="c1FlexGrid_LoadedRows"
  4.                                    SelectionChanged="c1FlexGrid_SelectionChanged">
  5.                         <c1:C1FlexGrid.Columns>
  6.                             <c1:Column Header="参数值" Width="5*" Binding="{Binding ParamValue, UpdateSourceTrigger=PropertyChanged, ValidatesOnExceptions=True, ValidatesOnDataErrors=True, NotifyOnValidationError=True}"/>
  7.                         </c1:C1FlexGrid.Columns>
  8.                     </c1:C1FlexGrid>
复制代码
但是当提示参数值必填时,下拉选择的效果就没有了,请问如何解决这个问题?


本帖子中包含更多资源

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

x

1 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2016-5-16 10:57:59
沙发
在以下demo测试,但无法重现你的问题。
测试的demo如下,供您参考:
\Documents\ComponentOne Samples\WPF\C1.WPF.FlexGrid\CS\MultiColumnCombo\MultiColumnCombo
\Documents\ComponentOne Samples\WPF\C1.WPF.FlexGrid\CS\Validation\Validation
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

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