Tôi đã có một DataGrid tôi đã ràng buộc với một SqlDataApter. Nếu tôi đặt lên XAML cho lưới điện sử dụng DataTextColumn như minh họa trong đoạn code dưới đây nó hoạt động hoàn hảoDataGridTemplateColumn Hai cách ràng buộc không hoạt động
<DataGrid AutoGenerateColumns="False" HorizontalAlignment="Left" Margin="27,42,0,0" Name="dataGrid1" VerticalAlignment="Top" AreRowDetailsFrozen="True">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding KEY}" Visibility="Hidden" IsReadOnly="True"></DataGridTextColumn>
<DataGridTextColumn Binding="{Binding CHARACTERISTIC_CODE}" Header="Unit" IsReadOnly="True" />
<DataGridTextColumn Binding="{Binding UNIT_CHAR}" Header="Unit" IsReadOnly="True" />
<DataGridTextColumn Binding="{Binding IC_DEF_CHAR_NUMERIC}" Header="Number" IsReadOnly="False"/>
<DataGridTextColumn Binding="{Binding IC_DEF_CHAR_TEXT}" Header="Text" IsReadOnly="False" />
<DataGridTextColumn Binding="{Binding IsNumeric}" Header="Status" IsReadOnly="True" />
<DataGridTextColumn Binding="{Binding IsText}" Header="Status" IsReadOnly="True" />
</DataGrid.Columns>
Tôi ràng buộc này để một DataTable trong mã sử dụng dataGrid1.ItemsSource = dTable.DefaultView và có một nút để lưu thay đổi bằng cách sử dụng phương thức cập nhật SqlDataAdapter dAdapter.Update (dTable)
Vấn đề là tôi muốn vô hiệu hóa chỉnh sửa trường IC_DEF_CHAR_TEXT khi bản ghi làNumeric và IC_DEF_CHAR_TEXT khi bản ghi IsText. Tôi đã cố gắng ràng buộc với các tài sản IsReadOnly nhưng thấy rằng nó không phải là bindable, vì vậy tôi tạo ra các mẫu cho hai lĩnh vực và ràng buộc các tài sản IsEnabled để IsText và IsNumeric lĩnh vực.
<DataGrid AutoGenerateColumns="False" HorizontalAlignment="Left" Margin="27,42,0,0" Name="dataGrid1" VerticalAlignment="Top" AreRowDetailsFrozen="True">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding KEY}" Visibility="Hidden" IsReadOnly="True"></DataGridTextColumn>
<DataGridTextColumn Binding="{Binding CHARACTERISTIC_CODE}" Header="Unit" IsReadOnly="True" />
<DataGridTextColumn Binding="{Binding UNIT_CHAR}" Header="Unit" IsReadOnly="True" />
<DataGridTemplateColumn Header="Numeric" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=IC_DEF_CHAR_NUMERIC, Mode=TwoWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox IsReadOnly="False" Text="{Binding Path=IC_DEF_CHAR_NUMERIC, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Text" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=IC_DEF_CHAR_TEXT, Mode=TwoWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=IC_DEF_CHAR_TEXT, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
này làm việc giống hệt như tôi muốn, textbox đã được kích hoạt khi cần thiết. Tuy nhiên những thay đổi được thực hiện trong các TextBox không còn được lưu vào cơ sở dữ liệu trong khi cập nhật. Ai đó có thể giải thích cho tôi tại sao cơ sở dữ liệu không còn được cập nhật?
Hãy thử thay đổi 'CellTemplate' để không sử dụng liên kết hai chiều vì nó chủ yếu chỉ được coi là cửa sổ. – Shoe
Tôi ban đầu thiết lập nó theo cách đó và điều đó đã không hoạt động. Tôi nghĩ rằng hai cách là mặc định nhưng tôi không chắc chắn 100% về điều đó. –
Ý của tôi là 'TextBox' sẽ mặc định là' Two-Way', hãy thử đổi nó thành 'One-Way' trên' CellTemplate'. Bạn chỉ muốn 'Hai chiều' trên' CellEditingTemplate' – Shoe