2012-04-20 120 views
1

我有一个WPF Datagrid与2列说parametername和值。WPF Datagrid编辑只有单个单元格值

我的要求只有一个特定的参数名称值(单元格内容)应该为可编辑和整个Datagrid的内容应是只读....

而且我有一个保存按钮保存值。

我已经从几天的研究对于其观察到在许多情况下,一个共同的要求适当的解决方案,但我还没有发现......

请任何解决方案或想法可以理解..

这里是XAML & CS:在DataGrid负载我只想要PM2单元格的值是在编辑模式和所有其他DataGrid的内容应该灰色或不可编辑..


<Grid> 
    <DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False" 
        Margin="20,57,18,19" Name="dataGrid1" 
         Height="250" SelectionUnit="Cell" > 

    <DataGrid.Columns> 
    <DataGridTextColumn Binding="{Binding ParameterName}" Width="100" Header="Parameter  Name" IsReadOnly="True"/> 

     <DataGridTextColumn Binding="{Binding Value}" Width="100" Header="Value" /> 

     </DataGrid.Columns> 

    </DataGrid> 
    </Grid> 

我的CS代码

public partial class dgSF : Window 
{ 

ObservableCollection<ParameterSet> pmset; 

    public dgSF() 
    { 
     InitializeComponent(); 
     pmset = new ObservableCollection<ParameterSet>(); 

     pmset.Add(new ParameterSet() { ParameterName = "PM1", Value = 10 }); 

     pmset.Add(new ParameterSet() { ParameterName = "PM2", Value = 50 }); 

     pmset.Add(new ParameterSet() { ParameterName = "PM3", Value = 70 }); 

     pmset.Add(new ParameterSet() { ParameterName = "PM4", Value = 80 }); 

     pmset.Add(new ParameterSet() { ParameterName = "PM5", Value = 100 }); 

     dataGrid1.ItemsSource = pmset; 
    } 
} 

public class ParameterSet 
{ 

    public string ParameterName { get; set; } 

    public int Value { get; set; } 

} 

感谢这么多,

阿努

+0

所以,您希望能够编辑ParameterName或Value? – AlexDrenea 2012-04-20 13:43:27

+0

我只想编辑值。 – Anu 2012-04-20 14:00:58

+0

当Datagrid从代码后面或从XAML文件加载时,我想要在编辑模式下获得PM2单元格值 – Anu 2012-04-20 14:02:27

回答

1

只是多了一个属性添加到您的PARAMETERSET,如。 public bool IsEditable {get; set;}

然后您可以在IsEditable上使用带有数据触发器的单元模板来设置是否启用。

编辑:

public class ParameterSet 
{ 
    public ParameterSet() 
    { 
     IsEditable = false; 
    } 

    public string ParameterName { get; set; } 
    public int Value { get; set; } 
    public bool IsEditable { get; set; } 

} 

XAML

<DataGrid ItemsSource="{Binding Pmset}" AutoGenerateColumns="False" SelectionUnit="Cell" > 
     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{Binding ParameterName}" Width="100" Header="Parameter  Name" IsReadOnly="True"/> 
      <DataGridTextColumn Binding="{Binding Value}" Width="100" Header="Value" > 
       <DataGridTextColumn.CellStyle> 
        <Style TargetType="DataGridCell"> 
         <Setter Property="IsEnabled" Value="False"></Setter> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding IsEditable}" Value="true"> 
           <Setter Property="IsEnabled" Value="True"></Setter> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </DataGridTextColumn.CellStyle> 
      </DataGridTextColumn> 
     </DataGrid.Columns> 
    </DataGrid> 

在XAML你只是声明了一个风格,每一个单元格不可编辑,除非IsEditable =真正的人。所以IsEditable = true的每个Parameterset都可以被修改。

+0

感谢您的回复, – Anu 2012-04-20 14:03:50

+0

我的意思是如何检查XAML或cs,特定值单元对应于PM2,然后只设置它为编辑模式或其他不感谢, – Anu 2012-04-20 14:05:39

3

使用DataGridTemplateColumn并为要编辑的列定义CellTemplateCellEditingTemplate。对于您不想编辑的列,只需定义CellTemplate

<DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False" 
        Margin="20,57,18,19" Name="dataGrid1" 
         Height="250" SelectionUnit="Cell"> 

      <DataGrid.Columns> 
       <DataGridTextColumn Binding="{Binding ParameterName}" Width="100" Header="Parameter Name" IsReadOnly="True"/> 

       <DataGridTemplateColumn Header="Editable Value"> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Value}"/> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
        <DataGridTemplateColumn.CellEditingTemplate> 
         <DataTemplate> 
          <TextBox Text="{Binding Value}"/> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellEditingTemplate> 
       </DataGridTemplateColumn> 

      </DataGrid.Columns> 

     </DataGrid> 
相关问题