选择/取消选择网格中的所有行

时间:2013-01-18 13:08:03

标签: wpf c#-4.0 silverlight-4.0 wpfdatagrid

我有一个wpf格式的DataGrid。它包含带有复选框的行。我想选中/取消选中所有行,并选中/取消选中标题复选框。

但我收到此错误: “对象引用未设置为对象的实例”在chk.IsChecked = false。

enter image description here

c#c​​ode:

private void myDataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
    {
        CheckBox chk = (CheckBox)this.myDataGrid.Columns[0].GetCellContent(e.Row);
        chk.IsChecked = false;
        checkboxes.Add(chk);
    }

xaml代码是:

<Window x:Class="WpfApplication1.Grid"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Grid" Height="300" Width="300">
<Grid>
    <DataGrid x:Name="myDataGrid"
              VerticalAlignment="Top"
              Grid.Column="0"
              AutoGenerateColumns="False"
              LoadingRow="myDataGrid_LoadingRow"
              Loaded="myDataGrid_Loaded">
        <DataGrid.Columns>
            <DataGridTemplateColumn Width="80">
                <DataGridTemplateColumn.Header>
                    <CheckBox HorizontalAlignment="Center"
                              Click="chk_Click"
                              VerticalAlignment="Center"
                              Name="chckAll">
                    </CheckBox>
                </DataGridTemplateColumn.Header>

                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox x:Name="chk"
                                  HorizontalAlignment="Center"
                                  HorizontalContentAlignment="Center"></CheckBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

            <DataGridTextColumn Header="First Name"
                                Width="100"
                                Binding="{Binding FirstName}"></DataGridTextColumn>
            <DataGridTextColumn Header="Last Name"
                                Width="100"
                                Binding="{Binding LastName}"></DataGridTextColumn>
        </DataGrid.Columns> 
    </DataGrid>
</Grid>

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以对此link进行他们的评论。

因为你应该是这样的:

DataGridRow row = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(dataGrid.SelectedIndex);
CheckBox chk = (CheckBox)this.myDataGrid.Columns[0].GetCellContent(e.Row);

我想,现在不要尝试。