如何使只读数据网格中的一列可编辑?

13

如何在只读数据表格中使某一列可编辑?

<DataGrid x:Name="dgLoadDtl" Height="315" Width="710" Grid.Row="0" 
                  HorizontalAlignment="Left" VerticalAlignment="Bottom"  
                  Style="{DynamicResource StyleDatagrid}" 
                  IsReadOnly="true">

            <DataGrid.Columns>                    

                <DataGridTextColumn Foreground="Black" Width="60" Header="Sctn" Binding="{Binding Sctn, Mode=TwoWay}" IsReadOnly="false" />                    
                <DataGridTextColumn Foreground="Black" Width="140" Header="CustName"  Binding="{Binding CustName, Mode=TwoWay}" />
                <DataGridTextColumn Foreground="Black" Width="140" Header="Address"  Binding="{Binding Address1, Mode=TwoWay}" />
                <DataGridTextColumn Foreground="Black" Width="50" Header="Bulk   or Bag"  Binding="{Binding BulkorBag, Mode=TwoWay}" />
                <DataGridTextColumn Foreground="Black" Width="80" Header="ProdCode" Binding="{Binding ProdCode, Mode=TwoWay}" />
                <DataGridTextColumn Foreground="Black" Width="80" Header="MedCode" Binding="{Binding MedCode, Mode=TwoWay}" />


7
你需要从主DataGrid中删除“IsReadyOnly =“true””,并为每个只读列添加“IsReadOnly =“true””,例如“<DataGridTextColumn Foreground =” Black “Width =” 140 “Header =” CustName “Binding =” {Binding CustName,Mode = TwoWay} “IsReadOnly =” true “/>”。 - Anand Murali
/\ 这个不起作用。 - Kirka121
看这个:https://dev59.com/ilLTa4cB1Zd3GeqPdL5Y - Jayaraj PS
请查看以下链接以获取类似的解决方案。https://dev59.com/ilLTa4cB1Zd3GeqPdL5Y - Jayaraj PS
2个回答

18

我创建了一个示例,在其中将DataGrid的ItemsSource绑定到ObservableCollection,此时您有两个选项。

  1. 在DataGrid上设置AutoGenerateColumns="False",并对除要编辑的列以外的所有列设置IsReadOnly="True",对于要编辑的列,设置IsReadOnly="False"。
  2. AutoGenerateColumns="True"(它是默认值,因此可以从XAML中删除该属性),并使ViewModel中除要编辑的列以外的所有属性的setter为private。

这是我的选项 1 的示例代码:

<DataGrid x:Name="dgLoadDtl" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Top" ItemsSource="{Binding MyData}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Foreground="Black" Width="60" Header="Sctn" Binding="{Binding Sctn, Mode=TwoWay}" IsReadOnly="false" />
        <DataGridTextColumn Foreground="Black" Width="140" Header="CustName"  Binding="{Binding CustName, Mode=TwoWay}" IsReadOnly="True"/>
        <DataGridTextColumn Foreground="Black" Width="140" Header="Address"  Binding="{Binding Address1, Mode=TwoWay}" IsReadOnly="True"/>
        <DataGridTextColumn Foreground="Black" Width="50" Header="Bulk   or Bag"  Binding="{Binding BulkorBag, Mode=TwoWay}" IsReadOnly="True"/>
        <DataGridTextColumn Foreground="Black" Width="80" Header="ProdCode" Binding="{Binding ProdCode, Mode=TwoWay}" IsReadOnly="True"/>
        <DataGridTextColumn Foreground="Black" Width="80" Header="MedCode" Binding="{Binding MedCode, Mode=TwoWay}" IsReadOnly="True"/>
    </DataGrid.Columns>
</DataGrid>

0

DataGrid 绑定到只读视图(一种使用 IEnumerable 生成的视图)时,您无法将其属性 IsReadOnly 设置为 "false",因为 WPF 不支持。您需要采用其他方法,例如将可编辑列转换为 DataGridTemplateColumn
例如,如果您有一个像这样的复选框样式列

<DataGridCheckBoxColumn Binding="{Binding IsSelected}"/>

为了使其可编辑/可更改,您可以将其替换为类似于以下内容的东西

<DataGridTemplateColumn>
   <DataGridTemplateColumn.CellTemplate>
       <DataTemplate>
           <CheckBox IsChecked="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged}"/>
       </DataTemplate>
   </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

作为这个专栏的额外福利,您将获得一键更改行为(ref)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接