wpf datagrid очистить
теперь мне нужно очистить DataGrid dgrid.Items.Clear(); получаю System.InvalidOperationException: «Операция недопустима, когда ItemsSource используется. Вместо этого получите доступ и измените элементы с помощью ItemsControl.ItemsSource.» как очистить DataGrid ?
Отслеживать
задан 2 фев 2020 в 15:10
920 7 7 серебряных знаков 25 25 бронзовых знаков
Когда вы пишете dgrid.Items.Add(. ) (или как там у него правильно), то в таком варианте коллекцией данных будет являться сам контрол, тогда вы можете уже сделать dgrid.Items.Clear() , что приведет к очистке его данных. Когда вы делаете dgrid.ItemsSource = ds.Tables[0].DefaultView; , то контрол лишь отображает данные из заданной коллекции, не более. То есть в таком случае у вас источником данных является ds.Tables[0].DefaultView , которую вам и надо очищать. Ну или делайте костыли, обнуляйте ItemsSource . Вообще, советую использовать привязки, ибо текущий ваш подход ужасен.
2 фев 2020 в 15:14
Вы назначаете ItemsSource, для очистки тоже работайте с ним, т.е. dataGrid.ItemsSource = null; Так же из MSDN: Если задано свойство ItemsSource, Items коллекция становится доступна только для чтения и имеет фиксированный размер. Если ItemsSource используется, установка свойства ItemsSource в значение null удаляет коллекцию и восстанавливает использование Items
Как удалить выбранные элементы в DataGrid (WPF)?
Начал изучать работу с WPF. Добрался до компонента DataGrid и не очень с ним получается разобраться. Сама таблица с данными состоит из двух столбцов: Check (DataGridCheckBoxColumn) и Recipe (DataGridTextColumn). Требуется удалить строки, которые отмечены в столбце Check. Я пока не очень разбираюсь с обработкой данных в DataGrid и поэтому хочу узнать, как осуществляется удаление строк.
" ClipboardContentBinding="" Header="Check"/> " CanUserSort="False" ClipboardContentBinding="" Header="Recipe" Width="162" IsReadOnly="True"/>
- Вопрос задан более трёх лет назад
- 643 просмотра
2 комментария
Оценить 2 комментария
Как очистить datagrid c wpf
DataGrid во многом похож на ListView, но более сложный по характеру и допускает редактирование содержимого таблицы.
В разделе о ListView мы создали класс Phone, объекты которого выводили в список:
public class Phone < public string Title < get; set; >public string Company < get; set; >public int Price < get; set; >>
Теперь же выведем объекты в таблицу DataGrid. Чтобы DataGrid автоматически разбивал таблицу на столбцы, установим свойство AutoGenerateColumns=»True» :
В данном случае префикс local ссылается на пространство имен текущего проекта, в котором определен класс Phone (xmlns:local=»clr-namespace:Controls»), а col — префикс-ссылка на пространство имен System.Collections (xmlns:col=»clr-namespace:System.Collections;assembly=mscorlib»). И это даст в итоге следующий вывод:

Программная установка источника для DataGrid:
List phonesList = new List < new Phone < Title="iPhone 6S", Company="Apple", Price=54990 >, new Phone , new Phone >; phonesGrid.ItemsSource = phonesList;
Некоторые полезные свойства DataGrid
RowBackground и AlternatingRowBackground
Устанавливают фон строки. Если установлены оба свойства, цветовой фон чередуется: RowBackground — для нечетных строк и AlternatingRowBackground — для четных
Устанавливает высоту строки названий столбцов.
Устанавливает ширину столбцов.
Устанавливает высоту строк.
Устанавливает видимость линий, разделяющих столбцы и строки. Имеет четыре значения — All — видны все линии, Horizontal — видны только горизонтальные линии, Vertical — видны только вертикальные линии, None — линии отсутствуют
Задает видимость заголовков
HorizontalGridLinesBrush и VerticalGridLinesBrush
Задает цвет горизонтальных и вертикальных линий соответственно
Хотя предыдущий пример довольно прост, в нем есть несколько недочетов. Во-первых, у нас нет возможности повлиять на расстановку столбцов. Во-вторых, заголовки определены по названиям свойств, которые на английском языке, а хотелось бы на русском. В этом случае мы должны определить свойства отображения столбцов сами. Для этого надо воспользоваться свойством DataGrid.Columns и определить коллекцию столбцов для отображения в таблице.
Причем можно задать также и другой тип столбца, отличный от текстового. DataGrid поддерживает следующие варианты столбцов:
Отображает элемент TextBlock или TextBox при редактировании
Представляет гиперссылку и позволяет переходить по указанному адресу
Отображает элемент CheckBox
Отображает выпадающий список — элемент ComboBox
Позволяет задать специфичный шаблон для отображения столбца
Перепишем предыдущий пример с учетом новой информации:
" Width="90" /> " Width="80" /> " Width="50" />

Среди свойств DataGrid одним из самых интересных является RowDetailsTemplate . Оно позволяет задать шаблон отображения дополнительной информации касательно данной строки. Измени элемент DataGrid:
" Width="90" /> " Width="80" /> " Width="50" /> " />
Как очистить datagrid c wpf
Здравствуйте, пишу RSS читалку, которая работает через кнопки. Для вопрос и общей информации покажу код:
Добавление канала:
XmlReader readxml = XmlReader.Create(textBox.Text); SyndicationFeed feed = SyndicationFeed.Load(readxml); int Z = Stackpnelleft.Children.Count +1; if (Z == 0) < Z++; >; TextBlock TX = new TextBlock(); Button ButtonTitle = new Button(); ContextMenu contextmenu = new ContextMenu(); MenuItem mi = new MenuItem(); TX.TextWrapping = TextWrapping.Wrap; TX.Text = feed.Title.Text; TX.TextAlignment = TextAlignment.Center; ButtonTitle.Content = TX; //ButtonTitle.Uid = "BBB" + Z + ""; ButtonTitle.Tag = feed; ButtonTitle.ContextMenu = contextmenu; mi.Header = "Удалить"; mi.Click += Delete_Channel; ButtonTitle.Click += OnFeedClick; contextmenu.Items.Add(mi); Stackpnelleft.Children.Add(ButtonTitle); // Канал F2.YN = true;
Добавление новостей:
Stackpnelmiddle.Children.Clear(); var f = ((SyndicationFeed)((Button)s).Tag); foreach (SyndicationItem item in f.Items) < TextBlock TX1 = new TextBlock(); Button Buttonitem = new Button(); TX1.TextWrapping = TextWrapping.Wrap; TX1.Text = item.Title.Text; TX1.TextAlignment = TextAlignment.Center; Buttonitem.Content = TX1; Buttonitem.Tag = item; // UID // Buttonitem.ToolTip = " " + q + ""; Buttonitem.Click += OnSyndicationItemClick; Stackpnelmiddle.Children.Add(Buttonitem);
И открытие новости:
SyndicationItem item = ((SyndicationItem)((Button)sender).Tag); label2.Content = item.PublishDate.DateTime.ToString(System.Globalization.CultureInfo.InvariantCulture); var f = item.Links[0].Uri; HttpWebRequest myWebRequest = (HttpWebRequest)WebRequest.Create(f); this.WebBrowser.Navigate(f);
Внимание вопрос, как мне удалить только один канал, который фактически является клавишей в stackpanel, через контекстое меню (там есть пункт удалить)
______________________
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.
Последний раз редактировалось Alex11223; 09.06.2016 в 13:04 .