2012-04-20 40 views
1

私はWPF Datagridに2つのカラム、parameternameとvalueを指定しています。WPF Datagridは単一セルの値のみを編集します

私の要件は、特定のParameterNameが1つだけの値(セルの内容)が編集可能であるべきで、全体のDataGridの内容は読み取り専用する必要があります....

そして私は値を保存するための保存ボタンを持っています。

私は多くの場合、共通の要件であることを観察し、適切な解決のために数日から研究していたが、私が見つけたhavent ...

任意のソリューションやアイデアが理解されるだろうしてください

...

データグリッド負荷が私はPM2セルの値が編集モードにすると、他のすべてのデータグリッドのコンテンツが出たり編集不可能なグレー表示されなければならないしたい場合は...


<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> 

はここでXAML & CSであります


そして、私の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

+0

値だけを編集したいです。 – Anu

+0

Datagridがロードされたとき、XAMLファイルの背後またはコードから編集モードでPM2セルの値を取得したい場合 – Anu

答えて

1

は単に例えば、あなたのParameterSetに1つのより多くのプロパティを追加します。パブリックbool IsEditable {get; set;}

IsEditableのデータトリガーを持つセルテンプレートを使用して、有効または無効を設定できます。

EDIT:あなただけのすべての細胞が真isEditableを=を持つものを除き、編集できませんスタイルを宣言XAMLで

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> 

。 IsEditable = trueを持つすべてのパラメータセットを変更できます。

+0

応答のためにありがとう – Anu

+0

私は、XAMLまたはcsで特定の値のセルがPM2に対応していることをチェックしてから、それを編集モードに設定するか、 – Anu

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> 
関連する問題