2013-02-11 13 views
6

Làm cách nào để làm cho một cột có thể chỉnh sửa được trong một DataGrid chỉ đọc?Làm cách nào để làm cho một cột có thể chỉnh sửa được trong dữ liệu chỉ đọc?

<DataGrid x:Name="dgLoadDtl" Height="315" Width="710" Grid.Row="0" 
        HorizontalAlignment="Left" VerticalAlignment="Bottom" 
        Style="{DynamicResource StyleDatagrid}" 
        IsReadOnly="true"> 

      <DataGrid.Columns>      

       <DataGridTextColumn Foreground="Black" Width="60" Header="Sctn" Binding="{Binding Sctn, Mode=TwoWay}" IsReadOnly="false" />      
       <DataGridTextColumn Foreground="Black" Width="140" Header="CustName" Binding="{Binding CustName, Mode=TwoWay}" /> 
       <DataGridTextColumn Foreground="Black" Width="140" Header="Address" Binding="{Binding Address1, Mode=TwoWay}" /> 
       <DataGridTextColumn Foreground="Black" Width="50" Header="Bulk or Bag" Binding="{Binding BulkorBag, Mode=TwoWay}" /> 
       <DataGridTextColumn Foreground="Black" Width="80" Header="ProdCode" Binding="{Binding ProdCode, Mode=TwoWay}" /> 
       <DataGridTextColumn Foreground="Black" Width="80" Header="MedCode" Binding="{Binding MedCode, Mode=TwoWay}" /> 

+6

Bạn cần phải loại bỏ 'IsReadyOnly = "true" 'từ chính' DataGrid' và cho mỗi cột được chỉ đọc bạn phải thêm 'IsReadOnly =" true "' như '' –

+0

/\ rằng không hoạt động. – Kirka121

+0

Kiểm tra điều này: http://stackoverflow.com/questions/4471934/can-i-specify-which-columns-are-editable-in-a-wpf-datagrid –

Trả lời

10

Tôi tạo ra một mẫu nơi tôi bị ràng buộc ItemsSource của DataGrid để một ObservableCollection và từ đây bạn có hai lựa chọn.

  1. Đặt AutoGenerateColumns = "False" trên DataGrid và đặt IsReadOnly = "True" cho tất cả các cột ngoại trừ cột bạn muốn chỉnh sửa, bạn sẽ đặt IsReadOnly = "False".
  2. AutoGenerateColumns = "True" (nó là mặc định, vì vậy bạn chỉ có thể loại bỏ các thuộc tính từ XAML) và làm cho setters riêng trong ViewModel của bạn cho tất cả các thuộc tính ngoại trừ cột bạn muốn chỉnh sửa.

Đây là mẫu mã của tôi cho tùy chọn 1:

<DataGrid x:Name="dgLoadDtl" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Top" ItemsSource="{Binding MyData}" AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Foreground="Black" Width="60" Header="Sctn" Binding="{Binding Sctn, Mode=TwoWay}" IsReadOnly="false" /> 
     <DataGridTextColumn Foreground="Black" Width="140" Header="CustName" Binding="{Binding CustName, Mode=TwoWay}" IsReadOnly="True"/> 
     <DataGridTextColumn Foreground="Black" Width="140" Header="Address" Binding="{Binding Address1, Mode=TwoWay}" IsReadOnly="True"/> 
     <DataGridTextColumn Foreground="Black" Width="50" Header="Bulk or Bag" Binding="{Binding BulkorBag, Mode=TwoWay}" IsReadOnly="True"/> 
     <DataGridTextColumn Foreground="Black" Width="80" Header="ProdCode" Binding="{Binding ProdCode, Mode=TwoWay}" IsReadOnly="True"/> 
     <DataGridTextColumn Foreground="Black" Width="80" Header="MedCode" Binding="{Binding MedCode, Mode=TwoWay}" IsReadOnly="True"/> 
    </DataGrid.Columns> 
</DataGrid>