找回密码
 立即注册

QQ登录

只需一步,快速开始

KNight
中级会员   /  发表于:2015-8-28 13:45:00
11#
回复 10楼安心海叶的帖子

我理解的意思是:如果数据源中有该列数据,则手动添加该列,并将列头设置成TextBlock+CheckBox样式,然后通过CheckBox设置该列数据显示与不显示;然后如果数据源中没有该列数据,则不显示该列?

参考部分代码如下:

  1. /// <summary>
  2. /// 创建自定义列
  3. /// </summary>
  4. /// <returns></returns>
  5. private C1.WPF.DataGrid.DataGridTextColumn CreateCustomCol()
  6. {
  7.         C1.WPF.DataGrid.DataGridTextColumn col = new C1.WPF.DataGrid.DataGridTextColumn();
  8.         Binding binding = new Binding("Test1Actual");
  9.         binding.Mode = BindingMode.TwoWay;
  10.         col.Binding = binding;

  11.         StackPanel sp = new StackPanel();
  12.         sp.Orientation = Orientation.Horizontal;
  13.         TextBlock tb = new TextBlock();
  14.         tb.Text = "TextBlock";
  15.         tb.VerticalAlignment = System.Windows.VerticalAlignment.Center;
  16.         sp.Children.Add(tb);
  17.         CheckBox cb = new CheckBox();
  18.         cb.IsChecked = true;
  19.         cb.VerticalAlignment = System.Windows.VerticalAlignment.Center;
  20.         cb.Click += chk_Click;
  21.         cb.Margin = new Thickness(2, 0, 0, 0);
  22.         sp.Children.Add(cb);
  23.         col.Header = sp;

  24.         return col;
  25. }
复制代码

  1. /// <summary>
  2. /// 复选框事件
  3. /// </summary>
  4. private void chk_Click(object sender, RoutedEventArgs e)
  5. {
  6.         try
  7.         {
  8.                 CheckBox chk = sender as CheckBox;
  9.                 if (chk.IsChecked.Value)
  10.                 {
  11.                         m_CustomCol.Binding = new Binding("Test1Actual");
  12.                         SVCDataGrid.Refresh(true, true, true, false, false);
  13.                 }
  14.                 else
  15.                 {
  16.                         m_CustomCol.Binding = null;
  17.                         SVCDataGrid.Refresh(true, true, true, false, false);
  18.                 }
  19.         }
  20.         catch (Exception ex)
  21.         {
  22.                 MessageBox.Show(ex.Message);
  23.         }
  24. }
复制代码


然后在自动生成列事件里,对该列替换:
  1. private void grid_AutoGeneratingColumn(object sender, C1.WPF.DataGrid.DataGridAutoGeneratingColumnEventArgs e)
  2. {
  3.     if (e.Property.Name == "ParaId")
  4.     {
  5.         _colPara.DisplayMemberPath = "Name";
  6.         _colPara.SelectedValuePath = "Id";
  7.         _colPara.SortMemberPath = "ParaId";
  8.         _colPara.FilterMemberPath = "ParaId";
  9.         _colPara.Header = "Parameter";
  10.         _colPara.Binding = new Binding() { Path = new PropertyPath("ParaId"), Mode = BindingMode.TwoWay };
  11.         _colPara.ItemsSource = SVCParaData.AllPara;
  12.         e.Column = _colPara;
  13.     }
  14.         else if (e.Property.Name == "Test1Actual")
  15.         {
  16.                 m_CustomCol = CreateCustomCol();
  17.                 e.Column = m_CustomCol;
  18.         }
  19. }
复制代码
回复 使用道具 举报
安心海叶
中级会员   /  发表于:2015-8-28 14:42:00
12#
回复 11楼KNight的帖子

非常感谢您的回答,我能充分的理解。与我的需求可能有些不同。事实上,DataGrid中固定只有三列,分别是:Parameter,Unit,Pre。当我从外围设备采集到数据后,我可以得到Test1Actual的值,然后Pre/Test1Actual是Pre_Actual1。如果软件接收不到数据,则DataGrid只显示固定的三列;如果采集了多次的数据,那么就会动态增加多列,比如:Test1Actual,Pre_Actual1,Test2Actual,Pre_Actual2...。而后才有CheckBox的响应事件。所以说数据源本身可能还不能确定有没有该列。敬请解答?不知道能不能?
回复 使用道具 举报
KNight
中级会员   /  发表于:2015-8-28 15:03:00
13#
回复 12楼安心海叶的帖子

这个就是你业务逻辑处理范围了,在grid_AutoGeneratingColumn事件里处理就可以了,采集到一列TextActual数据,就处理一列Pre_Actual1就可以了吧。
回复 使用道具 举报
安心海叶
中级会员   /  发表于:2015-8-28 15:48:00
14#
回复 13楼KNight的帖子

我想问一下,现在DataGrid的数据源已经确定了,当采集到新数据时,要添加新的属性吗?数据怎么依次添加到DataGrid的新的一列?
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-8-31 15:11:00
15#
回复 14楼安心海叶的帖子

这个问题在您的另一个帖子里继续讨论。
http://gcdn.gcpowertools.com.cn/showtopic-18421.html
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
安心海叶
中级会员   /  发表于:2015-9-9 14:15:00
16#
回复 13楼KNight的帖子

求助~我知道这是业务逻辑处理范围,但我不能确定C1DataGrid能不能实现如果有数据就添加新列,没有数据,就不添加列到DataGrid的功能?这是我的Demo,还请大神解答~

本帖子中包含更多资源

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

x
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-9-9 18:34:00
17#
回复 16楼安心海叶的帖子

谢谢反馈。此问题会通知@KNight在另一个帖子回复。
http://gcdn.gcpowertools.com.cn/showtopic-18376.html
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

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