19

I've got a DataGridI'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 つのフィールドのテンプレートを作成し、プロパティをおよびフィールドにバインドしました。isNumeriIC_DEF_CHAR_TEXTIsTextIsReadOnlyIsEnabledIsTextIsNumeric

<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更新中にデータベースに保存されなくなりました。データベースが更新されなくなった理由を誰か説明してもらえますか?

4

2 に答える 2

75

ソースを更新せずに、同じ問題が発生しました。

<DataGridTemplateColumn Header="Obs" IsReadOnly="False">
  <DataGridTemplateColumn.CellTemplate>
     <DataTemplate>
         <TextBox Name="txtObs" Width="80"
                  Text="{Binding Path=ObsPedido, Mode=TwoWay}"/>
      </DataTemplate>
  </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

私にとっては、追加するだけで機能しましたUpdateSourceTrigger=PropertyChanged

<TextBox Name="txtObs" Width="80"
         Text="{Binding Path=ObsPedido, Mode=TwoWay,
         UpdateSourceTrigger=PropertyChanged}"/>
于 2013-12-11T20:24:18.953 に答える