找回密码
 立即注册

QQ登录

只需一步,快速开始

q406157290

高级会员

124

主题

531

帖子

1359

积分

高级会员

积分
1359

活字格认证

q406157290
高级会员   /  发表于:2015-2-15 18:01  /   查看:8494  /  回复:9
要实现: 动态设置行可不可用, (一行中的其中一列可用 另一行的这一列不可用)
   
    datagrid 的绑定的按钮我能实现这个功能  但是绑定的数据就不能实现了,

IsReadOnly 属性可能是设置整个列可不可读的  不像IsEnabled属性能设置单个按钮 ,如果要设置像按钮一样 让列能跟按钮可不可用保持同步(按钮不可用,单元格也不可用,按钮可用,单元格也好用)如何实现呢? 谢谢解答 辛苦了!!!

图和示例已给出  请查看。

本帖子中包含更多资源

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

x

9 个回复

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

同样的,设置它的IsEnabled属性就可以了。设置方法和Button一样。
在这个模板中,C1DtaGridComboBoxColumn的单元格非编辑状态是TextBlock,进入编辑状态是C1ComboBox。
代码参考:
  1.            <c1:DataGridComboBoxColumn Header="Product222"  Binding="{Binding Product,Mode=TwoWay}"
  2.                             ItemsSource="{Binding Path=ComboItemList,Source={StaticResource cmbList}}">
  3.                             <c1:DataGridComboBoxColumn.CellContentStyle>
  4.                                 <Style TargetType="TextBlock">
  5.                                     <Setter Property="IsEnabled" Value="{Binding BtnIsEnabled,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></Setter>
  6.                                 </Style>
  7.                             </c1:DataGridComboBoxColumn.CellContentStyle>
  8.                             <c1:DataGridComboBoxColumn.CellEditingContentStyle>
  9.                                 <Style TargetType="c1:C1ComboBox">
  10.                                     <Setter Property="IsEnabled" Value="{Binding BtnIsEnabled,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></Setter>
  11.                                 </Style>
  12.                             </c1:DataGridComboBoxColumn.CellEditingContentStyle>
  13.                         </c1:DataGridComboBoxColumn>
复制代码
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-2-16 11:11:00
板凳
<c1ataGridDateTimeColumn>中用<Style TargetType="c1:C1DateTimePicker">
<c1ataGridNumericColumn>中用<Style TargetType="c1:C1NumericBox">
<c1:ataGridComboBoxColumn>中用<Style TargetType="c1:C1ComboBox">
以上都好用
但是
<c1ataGridTextColumn>中用<Style TargetType="c1:C1NumericBox">
这个就不好用, 控制不了其中的属性不可用。设置完里面的控件还可以编辑,应该用什么属性控制呢?
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-2-16 11:11:00
地板
  1. <c1ataGridDateTimeColumn>中用<Style TargetType="c1:C1DateTimePicker">
  2. <c1ataGridNumericColumn>中用<Style TargetType="c1:C1NumericBox">
  3. <c1:ataGridComboBoxColumn>中用<Style TargetType="c1:C1ComboBox">
  4. 以上都好用
  5. 但是
  6. <c1:c1ataGridTextColumn>中用<Style TargetType="c1:C1NumericBox">
复制代码
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-2-16 17:27:00
5#
回复 4楼q406157290的帖子

DataGridTextColumn的单元格是TextBlock。
代码参考:
  1.   <c1:DataGridTextColumn.CellContentStyle>
  2.                                 <Style TargetType="TextBlock">
  3.                                     <Setter Property="IsEnabled" Value="True"></Setter>
  4.                                 </Style>
  5.                             </c1:DataGridTextColumn.CellContentStyle>
  6.                         </c1:DataGridTextColumn>
复制代码
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

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

  不好使啊!   我做了个例子测试也不好使,请再次确认这个方式真的能实现
  1. c1:DataGridTextColumn
复制代码
设置成不可用吗???

本帖子中包含更多资源

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

x
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-3-10 09:37:00
7#
回复 6楼q406157290的帖子

谢谢提供Demo。
Demo已经下载,测试后给你反馈。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-3-10 14:20:00
8#
回复 6楼q406157290的帖子

每一列都分为编辑状态和非编辑状态,如果你想控制编辑状态,只要获取到编辑状态下的单元格类型即可。

因此有两种方案,一种就是模仿ComboBox的列,对编辑状态的样式进行设置。
添加如下代码:
  1. <c1:DataGridTextColumn.CellEditingContentStyle>
  2.                                 <Style TargetType="TextBox">
  3.                                     <Setter Property="IsReadOnly" Value="True"></Setter>
  4.                                 </Style>
  5.                             </c1:DataGridTextColumn.CellEditingContentStyle>
复制代码


第二种就是和Button那一列的写法一样,自己重写模板,模板里可以自定义所需要的控件展示样式。
比如代码参考:
  1.              <c1:DataGridTemplateColumn Header="DataGridTextColumn1"   >
  2.                             <c1:DataGridTemplateColumn.CellTemplate>
  3.                                 <DataTemplate>
  4.                                     <StackPanel>
  5.                                         <TextBlock IsEnabled="False" Text="{Binding Product,Mode=TwoWay}"/>
  6.                                     </StackPanel>
  7.                                 </DataTemplate>
  8.                             </c1:DataGridTemplateColumn.CellTemplate>
  9.                             <c1:DataGridTemplateColumn.CellEditingTemplate>
  10.                                 <DataTemplate>
  11.                                     <StackPanel>
  12.                                         <TextBox IsEnabled="False" Text="{Binding Product,Mode=TwoWay}"/>
  13.                                     </StackPanel>
  14.                                 </DataTemplate>
  15.                             </c1:DataGridTemplateColumn.CellEditingTemplate>
  16.                         </c1:DataGridTemplateColumn>
复制代码


WPF下有模板的概念,可以将标准控件放到里面,只需要按照规则设置即可。

评分

参与人数 1满意度 +5 收起 理由
q406157290 + 5 3q

查看全部评分

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

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-3-31 19:22:00
9#
啊  我来结贴了  这么写好用  但是Grid中会出现一个textbox框  还要设置自动高度 还要和grid的高度一致 有些麻烦

要根据行中其中一列 控制每行好不好用时  设置BeginningEdit这个属性 在这个属性中写
public void DataGrid_BeginningEdit(object sender, C1.WPF.DataGrid.DataGridBeginningEditEventArgs e)
取到c1DataGrid中选择的行SelectedItem
判断其中的字段是否是需要制域的行
并设置e.Cancel 来控制行可不可编辑
false 不可编辑 true可编辑
这样设置双击 编辑行也不会被进入编辑状态
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-4-1 09:24:00
10#
回复 9楼q406157290的帖子

看到你反馈整个实现过程的时候,不由得想赞一个。
整个分析问题的过程很细致,也很用心。
可以给以后遇到问题的客户提供思路。

谢谢你的反馈。
可以看到你对我们产品越来越熟悉,用的越来越纯熟。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

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