按下按钮/使用数据网格选择更改后从数据网格获取值

时间:2012-10-10 03:48:43

标签: c# wpf wpf-controls wpfdatagrid

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

这是图片。 enter image description here

这是我的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行需要检查怎么样?谢谢。 :)

2 个答案:

答案 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();