2010-12-17 113 views
6

我有一个带AutoGenerated列的WPF 4.0 DataGrid。我只想让用户编辑第一列。有没有一个简单的方法来做到这一点?我可以指定哪些列可在WPF DataGrid中编辑?

我试图添加一个DataGridCell样式,并根据ColumnName(第一列始终具有相同的名称)或ColumnIndex设置它的编辑能力,但是我无法弄清楚这个正确的XAML,或者即使它是可能的。

回答

4

我知道了....这是我用什么:

<DataGrid.Resources> 
    <Style TargetType="{x:Type DataGridCell}"> 
     <Setter Property="IsEnabled" Value="False" /> 
     <Style.Triggers> 
      <DataTrigger Value="PART_IsSelected" Binding="{Binding Path=Column.Header, RelativeSource={RelativeSource Self}}"> 
       <Setter Property="IsEnabled" Value="True" /> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</DataGrid.Resources> 

如果你愿意,你可以使用Column.DisplayIndex代替Column.Header

我仍然不知道为什么绑定韩元“T直接工作,需要由的RelativeSource引用,但至少它的工作原理:)

6

每列有IsReadOnly属性。此外,整个DataGrid也有IsReadOnly [这不影响绑定,只是用户编辑字段的能力]

编辑: 赶紧回答,抱歉。我只能猜测你不应该自动生成列,如果可能的话,所以你可以控制哪些是只读的,哪些控制模板会在哪里...只需使用列的绑定属性,所以你不需要自动生成它们。

+0

的自的AutoGenerateColumns创建DataGrid中的查询需要的是用户定义的 – Rachel 2010-12-17 15:56:55

+0

我认为这篇文章可以帮助你:http://blog.smoura.com/wpf-toolkit-datagrid-part-ii-custom -styling /您需要创建自己的风格才能发生,但我认为它完全可行 – Machinarius 2010-12-17 16:01:42

+0

好的文章,但在我的情况下并不真正有用。我需要根据其DisplayIndex或ColumnName设置某个列是否可编辑,并且事先并不知道我的列将不是单个可编辑列。 – Rachel 2010-12-17 16:36:20

11

下面的示例执行伎俩一列或多列

private void Grid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
    { 
     if (e.Column.Header.ToString() == "COLUMNNAME") 
     { 
      // e.Cancel = true; // For not to include 
      // e.Column.IsReadOnly = true; // Makes the column as read only 
     } 

    } 
0
private void dgTableDetailAdj_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e) 
{ 
    foreach (DataGridColumn col in dgTableDetailAdj.Columns) 
    { 
     if (col.Header.Equals("columnName")) 
     { 
      col.IsReadOnly = true; 
     } 
    } 
}
+1

请正确格式化您的代码(缩进至少4个空格,并且不要超过需要的缩进)。而且,只有代码才能解答问题,因为他们没有解释他们如何解决问题。你可以请[编辑你的帖子](http://stackoverflow.com/posts/37851029/edit)来解决这些问题?谢谢,欢迎来到StackOverflow。 – 2016-06-16 06:05:40

相关问题