【问题标题】:Get value from the datagrid after press button/using datagrid selection changed按下按钮/使用数据网格选择更改后从数据网格中获取值
【发布时间】:2012-10-10 03:48:42
【问题描述】:

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

这是图片。

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

【问题讨论】:

    标签: c# wpf wpf-controls wpfdatagrid


    【解决方案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”是复选框名称(控件名称),我正在使用第一个单元格的值进行写入。您可以根据需要更改单元格索引。

    【讨论】:

    • 嗨。谢谢你的回答..但我找不到“FindControl”语句。 Empld 是我的标题复选框名称?
    • 嗨,我已经更改了代码。在 items[i] 和 FindControl 之间缺少 Cells[3],因此您无法找到“FindControl”语句。 “Empld”是您的 ItemTemplate 控件的(复选框)ID。
    • 嗨..我已经用我的方式做到了。感谢您的回答。我将标记为正确答案。谢谢@Vikash Sinha
    【解决方案2】:

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

    var checkedItems = data.Where(x => x.IsChecked == true).ToList();
    

    【讨论】:

    • 嗨,感谢您的回答。没有。但是我第一次将数据加载到我的数据网格中,所有行都未选中。然后我可以选择我要检查的数据。之后我按下按钮,我可以获得每一行的详细数据。
    猜你喜欢
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 2012-07-28
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多