Search code examples
wpfdatagridwpfdatagrid

how to make first row of DataGrid ReadOnly in wpf


i have a data from database in Datagrid and i want to edit all data without first row:

Here you can see image by clicking this link

I want to use only first row as a read-only and others I want to edit Jaama Rs and BaNaam Amount.

Here is the code:

                        <DataGrid AutoGenerateColumns="False" Height="463"
                            HorizontalAlignment="Left" Margin="10,43,0,0" 
                             x:Name="gridcustomer" VerticalAlignment="Top" Width="911" IsReadOnly="True" ColumnWidth="*">
                            <DataGrid.Columns>
                                <DataGridTextColumn Binding="{Binding tblcustomer.Id}" Header="Code No" Width="60" 
                                    IsReadOnly="True"/>
                                <DataGridTextColumn Binding="{Binding Date}" Header="Date" 
                                    IsReadOnly="True"/>
                                <DataGridTextColumn Binding="{Binding tblcustomer.CustomerName}" Header="CustomerName"
                                    IsReadOnly="True"/>
                                <DataGridTemplateColumn Header="Jaama Rs">
                                    <DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <TextBox x:Name="txteditcustomergridjamma" PreviewKeyDown="txteditcustomergridjamma_PreviewKeyDown"  PreviewTextInput="txteditcustomergridjamma_PreviewTextInput" Text="{Binding Jaama}"      />
                                        </DataTemplate>
                                    </DataGridTemplateColumn.CellTemplate>
                                </DataGridTemplateColumn>
                                <DataGridTemplateColumn Header="BaNaam Rs">
                                    <DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <TextBox x:Name="txteditcustomergridbanaam" PreviewKeyDown="txteditcustomergridbanaam_PreviewKeyDown"  PreviewTextInput="txteditcustomergridbanaam_PreviewTextInput" Text="{Binding Banaam}"      />
                                        </DataTemplate>
                                    </DataGridTemplateColumn.CellTemplate>
                                </DataGridTemplateColumn>

                                <DataGridTextColumn Binding="{Binding Balence}" Header="Balence Rs" 
                                    IsReadOnly="True"/>
                                <DataGridTextColumn Binding="{Binding BalenceHistory}" Header="BalenceHistory" 
                                    IsReadOnly="True"/>
                            </DataGrid.Columns>
                        </DataGrid>

cs code is

gridcustomer.ItemsSource=db.customerledger.toList();

Solution

  • You could use a RowStyle to disable the row where Balence == 0, for example:

    <DataGrid AutoGenerateColumns="False" Height="463"
            HorizontalAlignment="Left" Margin="10,43,0,0" 
            x:Name="gridcustomer" VerticalAlignment="Top" Width="911" IsReadOnly="True" ColumnWidth="*">
        <DataGrid.RowStyle>
            <Style TargetType="DataGridRow">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Balence}" Value="0">
                        <Setter Property="IsEnabled" Value="False" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>
        <DataGrid.Columns>
            ...
        </DataGrid.Columns>
    </DataGrid>