У меня есть datagrid, который я привязал к SqlDataApter. Если я настроил XAML для сетки, используя DataTextColumn, как показано в коде ниже, он отлично работает
<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>
Я связываю это с данными, содержащимися в коде, используя dataGrid1.ItemsSource = dTable.DefaultView и есть кнопка, которая сохраняет изменения, используя метод обновления SqlDataAdapter dAdapter.Update(dTable)
Проблема в том, что я хочу отключить редактирование поля IC_DEF_CHAR_TEXT, когда запись isNumeric и IC_DEF_CHAR_TEXT, когда запись IsText. Я попробовал привязку к свойству IsReadOnly, но обнаружил, что он не является связываемым, поэтому я создал шаблоны для двух полей и связал свойство IsEnabled с полями IsText и IsNumeric.
<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>
Это работало точно так, как я хотел, текстовые поля были включены, когда это необходимо. Однако изменения, внесенные в текстовые поля, больше не сохраняются в базе данных во время обновления. Может ли кто-нибудь объяснить мне, почему база данных больше не обновляется?