Как перебрать строки инструментария WPF Datagrid

У меня есть следующий код, где я определил элемент управления datagrid инструментария WPF под названием dgQuery; Я заполнил эту информацию информацией о наборе данных, затем я установил новый столбец флажка в dgQuery, чтобы проверить / снять отметку с некоторых строк, я показываю часть своего кода на C #:

dgQuery.DataContext = dS.Tables[0]; DataGridTemplateColumn cbCol = new DataGridTemplateColumn(); cbCol.Header = "Opc"; FrameworkElementFactory factory = new FrameworkElementFactory(typeof(CheckBox)); Binding bind = new Binding("IsSelected"); bind.Mode = BindingMode.TwoWay; factory.SetValue(CheckBox.IsCheckedProperty, bind); DataTemplate cellTemplate = new DataTemplate(); cellTemplate.VisualTree = factory; cbCol.CellTemplate = cellTemplate; dgQuery.Columns.Insert(0, cbCol); 

После проверки / снятия флажка в новом столбце флажка строк dgQuery я нажму кнопку, чтобы сохранить в базе данных только те строки, которые я проверил. Вопрос в том, как я могу разработать цикл для чтения всех строк dgQuery и условия, которые позволят мне узнать, какие строки имеют флажок checked / unchecked? Помогите мне с примером, пожалуйста.

Благодаря!!

это вернет «строку» в вашем datagrid

 public IEnumerable 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; } } 

в wpf datagrid, строки – ItemSource.items … no Rows свойство!

Надеюсь это поможет…

  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(); } 

Не уверен, что это полезно, потому что он предполагает другой подход, чем тот, с которого вы начали, но вместо того, чтобы напрямую работать с сеткой, вы можете привязать его к ObservableCollection объектов, у которых есть свойства для каждого столбца. Если вы добавите свойство bool в свой объект для «Selected» и привяжите к нему столбец флажка, вы можете запросить коллекцию в любое время для выбранного в данный момент:

  List selectedItems = new List(from memberEntity in _memberEntities where memberEntity.Selected == true select memberEntity); //now save selectedItems to the database... 

Таким образом, MemberEntity – это class, который имеет свойство для каждого из столбцов в вашей сетке, включая bool, выбранный для столбца флажка. _memberEntities – это ObservableCollection экземпляров MemberEntity. Свойство ItemSource сетки привязано к _memberEntities, и каждый из свойств Binding привязки привязан к свойству в MemberEntity, если предположить, что Selected и Name являются свойствами в MemberEntity:

       
 //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 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; } } 
Давайте будем гением компьютера.