2014-10-01 115 views
0

我有一个网格控件,其中一些列是可编辑的,有些不是。DevExpress GridControl单元启用/禁用

我想要更精细的控制,以便取决于MyData的一些其他字段,相应的单元格将被启用或不被启用

<dxg:GridControl ItemsSource="{Binding MyData}" AutoPopulateColumns="True"> 
      <dxg:GridControl.Columns> 
       <dxg:GridColumn Header="Name" ReadOnly="True"/> 
       <dxg:GridColumn Header="ID 1" ReadOnly="False"/> 
       <dxg:GridColumn Header="ID 2" ReadOnly="False"/> 
       <dxg:GridColumn Header="ID 3" ReadOnly="False"/> 
     </dxg:GridControl.Columns> 
    </dxg:GridControl> 

在DevExpress支持网站上找不到任何东西。你有什么想法吗?

谢谢!

回答

1

您可以通过处理ShowingEditor事件来完成此任务。您可以设置e.CancelTrue如果小区不应该被编辑:

void TableView_ShowingEditor(object sender, DevExpress.Xpf.Grid.ShowingEditorEventArgs e) 
{ 
    if(...) 
    { 
     e.Cancel = true; 
    } 
} 

您还可以通过XAML风格完成这项任务:

<Style TargetType="dxg:CellContentPresenter" BasedOn="{StaticResource {dxgt:GridRowThemeKey ResourceKey=CellStyle}}"> 
    <Setter Property="IsEnabled" Value="{Binding Path=RowData.Row.SomePropertyRelatedToEnabledState}"/> 
</Style> 
+0

谢谢你会尝试。这是后面的代码,有没有办法在xaml中通过将单元的ReadOnly属性绑定到VM上的另一个? – goul 2014-10-01 09:54:26

+0

@goul:我已经用基于样式的方法更新了我的答案。 – DmitryG 2014-10-01 12:00:48

+0

谢谢! 我已经能够使用后面的代码,但是它似乎与xaml(我更喜欢),它是设置所有单元格的样式,所以不仅是属性绑定已被更改的行。我试过使用触发器,但没有运气。 我想使用XAML和触发器的原因是,我还想在启用时将单元格样式设置为粗体。 在此先感谢。 – goul 2014-10-02 08:22:15