2012-04-20 95 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>