2010-12-17 19 views
6

私はAutoGeneratedカラムを持つWPF 4.0 DataGridを持っています。私は最初の列を編集できるようにしたいと思います。これを行う簡単な方法はありますか?WPF DataGridで編集可能な列を指定できますか?

DataGridCellスタイルを追加しようとしましたが、ColumnName(最初の列は常に同じ名前)またはColumnIndexに基づいて編集機能を設定しましたが、これに対して正しいXAMLを把握することはできません。 。

答えて

4

私はそれが....ここに私が使用したもののGot:

<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もあります。これはバインドには影響しません。フィールドの編集だけのユーザの能力です。

EDIT: 可能な場合は列を自動的に生成しないようにしてください。そうすれば、読み込み専用のコントロールと、controltemplateがどこに行くのかを制御できます。列のBindingプロパティを使用するだけで、それらを自動生成する必要はありません。

+0

データグリッドを作成し、クエリは、ユーザー定義 – Rachel

+0

私はこの記事はあなたを助けるかもしれないと思うですので、AutoGenerateColumnsが必要です。http://blog.smoura.com/wpf-toolkit-datagrid-part-ii-custom -styling /あなたはそれが起こるためにあなた自身のスタイルを作る必要がありますが、私はそれが完全にできると思う。 – Machinarius

+0

いい記事ですが、私の状況では本当に役に立たない。 DisplayIndexまたはColumnNameのいずれかに基づいて列が編集可能かどうかを設定する必要があり、編集可能な単一の列以外の列が事前にわからなかった。 – Rachel

11

以下のサンプルは、1つ以上の列

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へようこそ。 –

関連する問題