我有一个从我的数据库加载数据的数据网格。在我的数据网格中,我还包括了,以便我可以选中或取消选中该行。
这是图片。
这是我的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>
可能问题是: 每当我点击“按钮”时,我怎么知道哪些数据已经检查过?我也在google上搜索,但一无所获。
我认为是这样的。每当我点击“按钮”时,我将开始检查每一行。我该怎么做?任何样本?我也想找到另一个解决方案,如何使用事件处理程序?这意味着每当我点击该行并检查时,我将触发该事件并检查是否已检查。我该怎么做?
对我来说,使用事件处理程序更容易实现,因为它要快得多,我必须检查,然后按下按钮。让我们说如果我只有10行,这不是一个大问题。如果我有1000个人怎么样?如果我逐一检查,那将很麻烦。浪费了很多时间。任何的想法?谢谢。
或者也许使用datagrid_selectionchanged。 如何检查复选框是否已经过检查?
因为如果我们等到用户按下按钮,那么我们检查是否检查,我认为这是一个缓慢的过程。你必须检查每一行。如果我的排只有10个,也许没关系。如果我有1000行需要检查怎么样?谢谢。 :)
答案 0 :(得分: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”是复选框名称(控件名称),我使用第一个单元格的值进行写入。您可以根据需要更改单元格索引。
答案 1 :(得分:0)
在数据库中,您有一个Checked字段?如果没有,您应该扩展项目的类对象并添加一个名为IsChecked的新属性,然后通过绑定可以检查/取消选中项目。在您的情况下,“数据”是一些自定义对象的集合。扩展该自定义对象并向其添加新属性。在此之后,您可以枚举数据网格的源集合,并且可以找到已检查的数据集合。像这样:
var checkedItems = data.Where(x => x.IsChecked == true).ToList();