I've got a DataGrid
I've bound to a SqlDataApter
. DataTextColumn
以下のコードに示すように、グリッドの XAML をセットアップすると、完全に機能します。
<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 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>
</DataGrid>
私はこれをDataTable
コード内にバインドしています:
dataGrid1.ItemsSource = dTable.DefaultView
また、「SqlDataAdapter」更新メソッドを使用して変更を保存するボタンがあります。
dAdapter.Update(dTable)
問題は、レコードc とレコード c のときIC_DEF_CHAR_TEXT
にフィールドの編集を無効にしたいことです。プロパティにバインドしようとしましたが、バインドできないことがわかったので、2 つのフィールドのテンプレートを作成し、プロパティをおよびフィールドにバインドしました。isNumeri
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 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>
</DataGrid>
これは私が望んでいたとおりに機能し、必要に応じてテキストボックスが有効になりました。ただし、 で行われた変更は、TextBoxes
更新中にデータベースに保存されなくなりました。データベースが更新されなくなった理由を誰か説明してもらえますか?