0

我有一个从我的数据库加载数据的数据网格。在我的数据网格中,我还包括了 ,以便我可以选中或取消选中该行。

这是图片。 在此处输入图像描述

这是我的xaml。

<DataGrid AutoGenerateColumns="False" Height="258" HorizontalAlignment="Left" Margin="12,0,0,12" 
              Name="dataGrid1" VerticalAlignment="Bottom" Width="479" ItemsSource="{Binding data}" 
              AlternatingRowBackground="#FFC4B0B0">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding nCateogryID}" Header="No." IsReadOnly="True" Width="30" />
            <DataGridTextColumn Binding="{Binding sCategoryDesc}" Header="Nama Kategori" IsReadOnly="True" Width="160" />
            <DataGridTextColumn Binding="{Binding sCategoryItems}" Header="Keterangan Kategori" IsReadOnly="True" Width="170" />
            <DataGridCheckBoxColumn Header="Checked?" />
        </DataGrid.Columns>
    </DataGrid>

可能的问题是:当我点击“按钮”时,我怎么知道哪些数据已经检查过?我也在谷歌上搜索,但一无所获。

我是这样想的。每当我单击“按钮”时,我都会开始检查每一行。我该怎么做?有什么样品吗?

我还想找到另一个解决方案,使用事件处理程序怎么样?这意味着每当我单击该行并选中时,我都会触发该事件并检查它是否已选中。我该怎么做?

对我来说,使用事件处理程序更容易实现,因为它要快得多,而我必须检查并按下按钮。假设我只有 10 行,那不是大问题。如果我有 1000 行呢?如果我一个一个检查,那会很麻烦。浪费很多时间。任何的想法?谢谢。

或者也许使用 datagrid_selectionchanged。如何检查复选框是否已选中?

因为如果我们等到用户按下按钮,然后我们检查是否检查,我认为这是一个缓慢的过程。你必须检查每一行。如果我的行只有 10 行,也许没关系。如果我有 1000 行需要检查呢?谢谢。:)

4

2 回答 2

1
for(int i=0;i<DataGrid.items.count-1;i++)
{
     CheckBox chkBx = (CheckBox)DataGrid.items[i].Cells[3].FindControl("EmpId") ;
     if( chkBx !=null && chkBx.Checked )
      {
        Response.Write(DataGrid.items[i].Cells[1].Text.ToString() );
      }
}

这里“EmpId”是复选框名称(控件名称),我正在使用第一个单元格的值进行写入。您可以根据需要更改单元格索引。

于 2012-10-10T04:47:20.047 回答
0

在数据库中,您有一个 Checked 字段?如果没有,您应该为您的项目扩展类对象并添加一个新属性,例如名为 IsChecked,然后通过绑定您可以检查/取消选中项目。在您的情况下,“数据”是一些自定义对象的集合。扩展该自定义对象并向其添加新属性。在此之后,您可以枚举数据网格的源集合,您可以找到检查了哪些。像这样的东西:

var checkedItems = data.Where(x => x.IsChecked == true).ToList();
于 2012-10-10T06:36:21.317 回答