C# 如何循环WPF toolkit Datagrid的行
接下来的代码定义了一个名为dgQuery的WPF工具包datagrid控件;我用数据集的信息填充了这一行,然后在dgQuery中插入了一个新的复选框列以选中/取消选中某些行,我显示了部分C代码: 选中/取消选中dgQuery行的“新建复选框”列后,我将单击一个按钮,仅将选中的行保存到数据库中。问题是,如何开发用于读取dgQuery所有行的循环,以及让我知道哪些行已选中/未选中复选框的条件?请帮我举个例子C# 如何循环WPF toolkit Datagrid的行,c#,wpf,datagrid,wpfdatagrid,wpftoolkit,C#,Wpf,Datagrid,Wpfdatagrid,Wpftoolkit,接下来的代码定义了一个名为dgQuery的WPF工具包datagrid控件;我用数据集的信息填充了这一行,然后在dgQuery中插入了一个新的复选框列以选中/取消选中某些行,我显示了部分C代码: 选中/取消选中dgQuery行的“新建复选框”列后,我将单击一个按钮,仅将选中的行保存到数据库中。问题是,如何开发用于读取dgQuery所有行的循环,以及让我知道哪些行已选中/未选中复选框的条件?请帮我举个例子 谢谢 这将在数据网格中返回一行 public IEnumerable<Microsof
谢谢 这将在数据网格中返回一行
public IEnumerable<Microsoft.Windows.Controls.DataGridRow> GetDataGridRows(Microsoft.Windows.Controls.DataGrid grid)
{
var itemsSource = grid.ItemsSource as IEnumerable;
if (null == itemsSource) yield return null;
foreach (var item in itemsSource)
{
var row = grid.ItemContainerGenerator.ContainerFromItem(item) as Microsoft.Windows.Controls.DataGridRow;
if (null != row) yield return row;
}
}
公共IEnumerable GetDataGridRows(Microsoft.Windows.Controls.DataGrid)
{
var itemsSource=grid.itemsSource作为IEnumerable;
如果(null==itemsSource)产生返回null;
foreach(itemsSource中的var项)
{
var row=grid.ItemContainerGenerator.ContainerFromItem(item)作为Microsoft.Windows.Controls.DataGridRow;
如果(空!=行)产生返回行;
}
}
在wpf datagrid中,行是ItemSource.items。。。没有行属性
希望这有帮助…不确定这是否有用,因为它采用了与您开始使用的不同的方法,但您可以将其绑定到具有每列属性的对象的可观察集合,而不是直接使用网格。如果在对象中为“Selected”添加bool属性并将复选框列绑定到该属性,则可以随时查询集合中当前选择的内容,如下所示:
var row = GetDataGridRows(dataGrid1);
/// go through each row in the datagrid
foreach (Microsoft.Windows.Controls.DataGridRow r in row)
{
DataRowView rv = (DataRowView)r.Item;
// Get the state of what's in column 1 of the current row (in my case a string)
string t = rv.Row[1].ToString();
}
List<MemberEntity> selectedItems =
new List<MemberEntity>(from memberEntity in _memberEntities
where memberEntity.Selected == true
select memberEntity);
//now save selectedItems to the database...
List selectedItems=
新列表(来自_memberEntities中的memberEntity)
其中memberEntity.Selected==true
选择成员(实体);
//现在将selectedItems保存到数据库。。。
所以MemberEntity是一个类,它对网格中的每一列都有一个属性,包括一个名为Selected的bool,用于checkbox列_memberEntities是MemberEntity实例的可观察集合。网格的ItemSource属性绑定到_memberEntities,其列的每个绑定属性都绑定到MemberEntity中的属性,如下所示,假设Selected和Name是MemberEntity中的属性:
<tk:DataGrid ItemsSource="{Binding _memberEntities}">
<tk:DataGrid.Columns>
<tk:DataGridCheckBoxColumn Binding="{Binding Path=Selected}" />
<tk:DataGridTextColumn Binding="{Binding Path=Name}" />
</tk:DataGrid.Columns>
</tk:DataGrid>
//循环数据网格行&循环单元格和警报单元格值
var row=GetDataGridRows(DataGrid_标准);
///检查数据网格中的每一行
foreach(第行中的Microsoft.Windows.Controls.DataGridRow r)
{
DataRowView rv=(DataRowView)r.Item;
foreach(DataGrid_Standard.Columns中的DataGridColumn列)
{
if(column.GetCellContent(r)是TextBlock)
{
TextBlock cellContent=column.GetCellContent(r)作为TextBlock;
MessageBox.Show(cellContent.Text);
}
else if(column.GetCellContent(r)为复选框)
{
复选框chk=column.GetCellContent(r)作为复选框;
Show(chk.IsChecked.ToString());
}
}
}
公共IEnumerable GetDataGridRows(Microsoft.Windows.Controls.DataGrid)
{
var itemsSource=grid.itemsSource作为IEnumerable;
如果(null==itemsSource)产生返回null;
foreach(itemsSource中的var项)
{
var row=grid.ItemContainerGenerator.ContainerFromItem(item)作为Microsoft.Windows.Controls.DataGridRow;
如果(空!=行)产生返回行;
}
}
Tnxs托尼!我想问一下,我如何评估我插入的复选框列是否已选中/未选中,以及通常我如何检索每个DataGridRow的所有单元格?我们如何在循环每一行时获取行索引Tony,再次感谢您。请再问一个问题,如何评估定义复选框的“opc”列的内容?在DataRowView中,我只能看到数据集列,而不能看到复选框。你好。你为什么不试试MarkB的解决方案来访问datagrid中的复选框?我在这个论坛上又问了你一个问题,因为我自己找不到怎么做,所以这里有一个答案:使用我接受的答案!我自己也没试过,但看起来应该能用!祝你好运请告诉我发生了什么事?托尼,再次感谢你的帮助。我读了1936732,在应用于我的案例时有很多疑问,因此,我决定使用您的原始解决方案,首先,我在数据集中添加了一个类型为Bool的新列,因此它现在模拟了一个复选框(尽管我选中了双击:-),我认为这是一个简单且干净的解决方案。马克,谢谢你的时间和帮助。在应用到我的情况之前,我需要阅读有关可观测收集对象的信息。听起来不错,特里斯坦。使用这种方法的主要优点是将代码与表示分离。因此,您的代码将重点放在集合上,而不是UI控件上。这意味着,如果以后更改UI控件,代码可能不必更改。此外,单元测试更容易,因为您可以通过操纵集合而不是试图操纵UI,以编程方式设置选择项。
<tk:DataGrid ItemsSource="{Binding _memberEntities}">
<tk:DataGrid.Columns>
<tk:DataGridCheckBoxColumn Binding="{Binding Path=Selected}" />
<tk:DataGridTextColumn Binding="{Binding Path=Name}" />
</tk:DataGrid.Columns>
</tk:DataGrid>
//Looping thought datagrid rows & loop though cells and alert cell values
var row = GetDataGridRows(DataGrid_Standard);
/// go through each row in the datagrid
foreach (Microsoft.Windows.Controls.DataGridRow r in row)
{
DataRowView rv = (DataRowView)r.Item;
foreach (DataGridColumn column in DataGrid_Standard.Columns)
{
if (column.GetCellContent(r) is TextBlock)
{
TextBlock cellContent = column.GetCellContent(r) as TextBlock;
MessageBox.Show(cellContent.Text);
}
else if (column.GetCellContent(r) is CheckBox)
{
CheckBox chk = column.GetCellContent(r) as CheckBox;
MessageBox .Show (chk.IsChecked.ToString());
}
}
}
public IEnumerable<Microsoft.Windows.Controls.DataGridRow> GetDataGridRows(Microsoft.Windows.Controls.DataGrid grid)
{
var itemsSource = grid.ItemsSource as IEnumerable;
if (null == itemsSource) yield return null;
foreach (var item in itemsSource)
{
var row = grid.ItemContainerGenerator.ContainerFromItem(item) as Microsoft.Windows.Controls.DataGridRow;
if (null != row) yield return row;
}
}