2010-12-17 19 views
6

Otomatik Üretilen sütunlara sahip bir WPF 4.0 DataGrid'im var. Kullanıcının yalnızca ilk sütunu düzenlemesine izin vermek istiyorum. Bunu yapmanın kolay bir yolu var mı?WPF DataGrid'de hangi Sütunların düzenlenebilir olduğunu belirtebilir miyim?

Bir DataGridCell stili eklemeye ve ColumnName (1. sütun her zaman aynı ada sahip) veya ColumnIndex'e dayalı düzenleme yeteneğini ayarlamaya çalışıyordum, ancak bunun için doğru XAML'yi veya mümkün olsa bile .

cevap

4

Aldım .... burada kullandığım ne: İsterseniz

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

, sen

hala neden bağlayıcı kazandı emin değilim yerine Column.Header

ait Column.DisplayIndex kullanabilirsiniz 't doğrudan çalışma ve RelativeSource tarafından başvurulan gerekiyor, ama en azından çalışıyor :)

6

Her sütunta bir IsReadOnly bulunur. Ayrıca, tüm DataGrid IsReadOnly de vardır [Bu bağlama, kullanıcının sadece alanı düzenleme yeteneği sadece ETKİLEMEYECEKTİR].

DÜZENLEME: Bir cevap acele ettim, özür dilerim. Mümkünse sütunları otomatik olarak oluşturmamanız gerektiğini tahmin edebilirim, böylece hangisinin okunduğunu ve hangi kontrol tablosunun nereye gideceğini kontrol edebilirsiniz ... sütunların Binding özelliğini kullanmanız yeterlidir, bu yüzden onları otomatik hale getirmenize gerek yoktur.

+0

AutoGenerateColumnsDataGrid oluşturur sorguda beri gereklidir kullanıcı tanımlı Bu makale size yardımcı olabileceğini düşündüğümüz – Rachel

+0

olduğunu -styling/Bunun olması için kendi tarzınızı yaratmanız gerekecek, ama bence mükemmel olan – Machinarius

+0

Nice makalesi, ama benim durumumda gerçekten kullanışlı değil. Bir sütunun düzenlenebilir olup olmadığını veya DisplayIndex veya ColumnName değerini temel almamış olsaydı, sütunlarımın tek düzenlenebilir sütundan farklı olacağını önceden bilmiyordum. – Rachel

11

aşağıdaki örnek bir veya daha fazla sütun

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 
     } 

    } 
için hile yapar http://blog.smoura.com/wpf-toolkit-datagrid-part-ii-custom:
0
private void dgTableDetailAdj_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e) 
{ 
    foreach (DataGridColumn col in dgTableDetailAdj.Columns) 
    { 
     if (col.Header.Equals("columnName")) 
     { 
      col.IsReadOnly = true; 
     } 
    } 
}
+1

Lütfen kodunuzu doğru biçimlendirin (her şeyi en az 4 boşlukla doldurun ve gerekenden fazlasını girmeyin). Ayrıca, kod sadece cevapları, problemi çözdüğü _how_ açıklamaktan yoksun olduğu için önerilmez. Bu sorunları çözmek için lütfen [gönderinizi düzenleyin] (http://stackoverflow.com/posts/37851029/edit)? Teşekkürler ve StackOverflow'a hoş geldiniz. –

İlgili konular