【问题标题】:Cannot edit cells of my DataGrid WPF Framework 4.5无法编辑我的 DataGrid WPF Framework 4.5 的单元格
【发布时间】:2012-11-03 08:52:33
【问题描述】:

我的 ObservableCollection 包含三个项目,并且这些行始终显示在数据网格中。 我无法将 DataGrid 的单个单元格变为编辑模式。我尝试了单击、单击、双击、F2、...,但整行都保持选中状态。如何让用户编辑数据网格。 我在其他帖子中发现了类似的数据网格编辑问题,但没有人解决我的问题。这是代码(WPF NetFramework 4.5)。目的是,只有第一列是不可编辑的(只读)。

<DataGrid Name="myDataGrid" Grid.Row="2" AutoGenerateColumns="False" ItemsSource="{Binding}" IsReadOnly="False">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="name" IsReadOnly="True" Width="200"  >
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Name}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTemplateColumn Header="Formulation" Width="100" IsReadOnly="False">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding FormulationStr}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding FormulationStr}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
        </DataGridTemplateColumn>
        <DataGridTemplateColumn Header="volume Diff" Width="100" IsReadOnly="False">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding volumeDiff}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding volumeDiff}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

【问题讨论】:

    标签: wpf xaml data-binding datagrid


    【解决方案1】:

    您已将TextBlock 放入cell template 以及cell editing template。这就是为什么您在按 F2 并双击单元格时没有注意到任何变化,因为无论如何它都将始终是您无法编辑的 TextBlock

    像这样将TextBox 放在你的CellEditingTemplate 中-

    <DataGridTemplateColumn Header="Formulation" Width="100" IsReadOnly="False">
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding FormulationStr}" />
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
        <DataGridTemplateColumn.CellEditingTemplate>
            <DataTemplate>
                <TextBox Text="{Binding FormulationStr}" />
            </DataTemplate>
        </DataGridTemplateColumn.CellEditingTemplate>
    </DataGridTemplateColumn>
    

    或者简单地使用DataGridTextColumn 代替DataGridTemplateColumn,它在内部提供支持您通过上述代码尝试实现的目标-

    <DataGridTextColumn Header="Formulation" Width="100" IsReadOnly="False" Binding="{Binding FormulationStr}" />
    

    【讨论】:

    • 我可以将文本粘贴到单元格中,但我无法在其中输入任何内容 - 任何想法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多