【问题标题】:WPF datagrid IsReadOnly exceptionWPF 数据网格 IsReadOnly 异常
【发布时间】:2015-12-03 11:00:10
【问题描述】:

我有一个数据网格,我在其中添加了一个复选框列。我希望整个数据网格是 IsReadOnly 除了 Checkbox 列。我试过了:

  <DataGrid x:Name="DataGridView_Customer_Information" HorizontalAlignment="Left" Margin="10,200,0,0" VerticalAlignment="Top" Height="410" Width="697" CanUserAddRows="False" IsReadOnly="True" >
        <DataGrid.Columns>
            <DataGridCheckBoxColumn x:Name="CheckBoxSelectRow" IsReadOnly="False"/>
        </DataGrid.Columns>
    </DataGrid>

但我可以想象&lt;DataGridCheckBoxColumn x:Name="CheckBoxSelectRow" IsReadOnly="False"/&gt; 被前面的声明否决了。由于它只有一列需要允许编辑(允许选中复选框),是否可以在 IsReadOnly 中做出预期?

在此致谢

【问题讨论】:

    标签: c# wpf checkbox datagrid readonly-attribute


    【解决方案1】:

    你有两个选择。 两者都假设DataGrid.AutoGenerateColumnsFalse

    1. DataGrid 元素中删除 IsReadOnly="True" 并为每一列设置 IsReadOnlyFalse 用于 DataGridCheckBoxColumnTrue 用于其余列。

    2. IsReadOnly="True" 保留为DataGrid,而不是DataGridCheckBoxColumn 在模板内添加DataGridTemplateColumnCheckBox

      <DataGrid IsReadOnly="True" AutoGenerateColumns="False" ItemsSource="{Binding Guests}">
          <DataGrid.Columns>
              <DataGridTemplateColumn Header="Is invited">
                  <DataGridTemplateColumn.CellTemplate>
                      <DataTemplate>
                          <CheckBox IsChecked="{Binding IsInvited}"/>
                      </DataTemplate>
                  </DataGridTemplateColumn.CellTemplate>
              </DataGridTemplateColumn>
      
              <DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="False"/>
          </DataGrid.Columns>
      </DataGrid>
      

    第二种方法还有另一个好处。 DataGridCheckBoxColumn 的默认行为很奇怪 - 要更改复选标记,您需要先选择单元格,这很不方便。 CheckBoxDataGridTemplateColumn 内接受用户输入而不选择单元格,这看起来很自然。

    【讨论】:

    • 感谢您的回答
    • 使用DataGridTemplateColumn 代替DataGridCheckBoxColumn 的好主意。
    【解决方案2】:

    您可以将彼此的列IsReadOnly 设置为false

    更新

    或者您可以为其他列添加DataGrid.Resources 样式

    <DataGrid.Resources>
        <Style TargetType="{x:Type DataGridTextColumn}">
            <Setter Property="IsReadOnly" Value="True" />
        </Style>
    </DataGrid.Resources>
    

    【讨论】:

    • 在 WPF 中没有定义列名,Datagrid 从 SQL 数据库中获取值。
    • 如果AutoGenerateColumns 设置为"True" 会怎样?
    • 也许你可以将它的IsReadOnly 属性设置为false,除了CheckBoxColumn 之外的代码。
    猜你喜欢
    • 2013-12-14
    • 2018-09-13
    • 2013-10-20
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 2011-02-08
    • 2015-10-14
    • 2013-10-07
    相关资源
    最近更新 更多