Перейти к содержимому

Как очистить datagrid c wpf

  • автор:

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 в WPF

Программная установка источника для 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 .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

https://alkogolizm.vyvod-iz-zapoya-v-stacionare-samara11.ru/