私はSqlDataApterにバインドしたデータグリッドを持っています。私はDataTextColumnを使用してグリッドのXAMLを設定した場合、それは完全にDataGridTemplateColumn双方向バインディングが機能しない
<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 作品の下のコードに示すように、そして、私はIC_DEF_CHAR_TEXTフィールドを編集無効にすることSqlDataAdapterオブジェクトの更新方法 dAdapter.Update(dTable)
問題があるを使用して変更を保存ボタンを持っている場合、レコードISNUMERICとIC_DEF_CHAR_TEXT時に記録ISTEXT。私はIsReadOnlyプロパティにバインドしようとしましたが、バインド可能でないことがわかりましたので、2つのフィールドのテンプレートを作成し、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>
これは正確に働きました。ただし、TextBoxの変更は更新中にデータベースに保存されなくなりました。そこにいる誰かが、なぜデータベースがもはや更新されていない理由を私に説明することはできますか?
「CellTemplate」を変更すると、双方向バインディングが使用されないようになりました。本質的には、ウィンドウとして機能するようになっているからです。 – Shoe
私はもともとそれをそのように設定していて、それもうまくいきませんでした。私は2つの方法がデフォルトだと思うが、私はそれを100%確信しているわけではない。 –
私は、 'TextBox'はデフォルトで' Two-Way'になり、 'CellTemplate'に対して' One-Way'に変更しようとしています。あなたは 'CellEditingTemplate'の' Two-Way'だけを望んでいます – Shoe