19

我有一个DataGrid我已经绑定到一个SqlDataApterDataTextColumn如果我使用如下代码所示为网格设置 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 和记录IC_DEF_CHAR_TEXT时禁用编辑字段。我尝试绑定到该属性,但发现它不可绑定,因此我为这两个字段创建了模板并将该属性绑定到and字段。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 回答
1

我遇到了同样的问题,@jrivam 发布的解决方案没有帮助。为了让我的绑定正常工作,我必须更改CellEditingTemplate使用OneWayToSource绑定模式。

<DataGridTemplateColumn.CellEditingTemplate>
    <DataTemplate>
        <TextBox Text="{Binding Path=IC_DEF_CHAR_TEXT,
                 Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}"/>
    </DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
于 2015-11-16T00:01:24.400 回答