I've got a DataGrid
I've bound to a SqlDataApter
. If I set up the XAML for the grid using DataTextColumn
as illustrated in the code below it works perfectly
<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>
I am binding this to a DataTable
in code using:
dataGrid1.ItemsSource = dTable.DefaultView
And I have a button that saves the changes using the ذSqlDataAdapterذ update method:
dAdapter.Update(dTable)
The problem is that I want to disable editing the IC_DEF_CHAR_TEXT
field when the record isNumeri
c and the IC_DEF_CHAR_TEXT
when the record IsText
. I tried binding to the IsReadOnly
property but found that it is not bind-able, so I created templates for the two fields and bound the IsEnabled
property to the IsText
and IsNumeric
fields.
<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>
This worked exactly like I wanted, the textboxes were enabled when necessary. However the changes made in the TextBoxes
are no longer saved to the database during update. Can someone out there explain to me why the database is no longer being updated?
I had the same problem, not updating the source:
<DataGridTemplateColumn Header="Obs" IsReadOnly="False">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Name="txtObs" Width="80"
Text="{Binding Path=ObsPedido, Mode=TwoWay}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
For me it worked just adding UpdateSourceTrigger=PropertyChanged
<TextBox Name="txtObs" Width="80"
Text="{Binding Path=ObsPedido, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"/>
I had the same problem and the solution posted by @jrivam did not help. For me to get my binding to work correctly I had to change the CellEditingTemplate
to use the OneWayToSource
Binding Mode.
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=IC_DEF_CHAR_TEXT,
Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With