从DataGrid扫描所有行

时间:2019-04-15 16:11:15

标签: c# wpf datagridview

我有一个DataGrid,我正在尝试扫描所有行。

如果我最多扫描30行的Datagrid,它就可以工作。但是,如果行数超过30(即rows.Count > 30),则该行似乎无效。它会抛出System.NullReferenceException

如何滚动超过30行的DataGrid

1 个答案:

答案 0 :(得分:0)

XAML:

<DataGrid Grid.Row="2" Margin="5" CanUserAddRows ="False" CanUserReorderColumns="False" x:Name="DTG_Can" AutoGenerateColumns="False"  CanUserDeleteRows="False" ItemsSource="{Binding}" SelectionMode="Extended">
 <DataGrid.Columns>
  <DataGridCheckBoxColumn>
    <DataGridCheckBoxColumn.HeaderTemplate>
    <DataTemplate>
     <CheckBox Click="CheckUncheckAllCan_Click"/>
    </DataTemplate>
   </DataGridCheckBoxColumn.HeaderTemplate>
  </DataGridCheckBoxColumn>
  <DataGridTextColumn Header="id" Binding="{Binding Path=id}" Visibility="Hidden"  IsReadOnly="True">
   <DataGridTextColumn.HeaderStyle>
    <Style TargetType="DataGridColumnHeader">
     <Setter Property="HorizontalAlignment" Value="Stretch"/>
     <Setter Property="HorizontalContentAlignment" Value="Center"/>
    </Style>
   </DataGridTextColumn.HeaderStyle>
  </DataGridTextColumn>
....

C#

for (int i = 0; i < DTG_Can.Items.Count; i++)
{
 drv = (DataRowView)DTG_Can.Items.GetItemAt(i);
 var item = DTG_Can.Items[i];
 var CBM = DTG_Can.Columns[0].GetCellContent(item) as CheckBox;
 if (CBM.IsChecked == true && flagIns == 0) MessageBox.Show(i.ToString() + " - " + drv[2].ToString().ToUpper());
 else MessageBox.Show(i.ToString() + " - No Check");

我对XAML还有另一个问题。我仅对所有datagridcheckbox或datagridtextcolum使用一个datagrid列。最好只使用一个<datagrid.columns>还是使用foreach元素一个<datagrid.columns>