Priya Karthish Ответов: 1

Элемент DataGrid свойство selecteditems не работает в WPF с#


Мне нужно удалить выбранную строку из datagrid, а также из datatable. Я попробовал этот код, но он не удаляется.
компонента DataGrid.Возвращает значение null, свойство selecteditems. Таким образом, он не выполняет цикл Foreach

Что я уже пробовал:

Код для удаления строки из datagrid и datatable
Меня зовут экземпляр DataGrid DataGrid с
<pre>private void button_Click_1(object sender, RoutedEventArgs e)
        {
            string db = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source =C:\Users\Lavanya\Documents\BMDatabase.accdb;Persist Security Info=False";
            OleDbConnection oledb = new OleDbConnection(db);
            OleDbCommand olecmd = new OleDbCommand("Select * From ACTOR", oledb);
            try
            {
                OleDbDataAdapter oleda = new OleDbDataAdapter();
                oleda.SelectCommand = olecmd;
                DataTable dbtable = new DataTable();
                oleda.Fill(dbtable);
                //BindingSource bsource = new BindingSource();
                //bsource.DataSource = dbtable;

                dataGrid.ItemsSource = dbtable.DefaultView;
                oleda.Update(dbtable);
                int drow = dbtable.Rows.Count;
                int dcolumn = dbtable.Columns.Count;
                // System.Windows.MessageBox.Show(drow.ToString("G"));
                // System.Windows.MessageBox.Show(dcolumn.ToString("G"));
                //prepare the list of rows that need to delete
                List<DataRow> listOfRowsToDelete = new List<DataRow>();
                foreach (DataRowView drRow in this.dataGrid.SelectedItems)
                {
                    listOfRowsToDelete.Remove(drRow.Row);
                }
                //delete all the rows from the datatable
                foreach (DataRow drRow in listOfRowsToDelete)
                {
                    dbtable.Rows.Remove(drRow);
                }
                //  if (dataGrid != null)
                // {
                //   int selectedIndex = dataGrid.SelectedIndex;
                // dbtable.Rows.RemoveAt(selectedIndex);
                // bsource.RemoveAt(selectedIndex);
                //var row = dbtable.Rows[selectedIndex];
                //row.Delete();
                //oleda.Update(dbtable);

                // System.Windows.MessageBox.Show(selectedIndex.ToString("G"));

                // }
                //else
                //   {
                // if (dataGrid.SelectedItems.Count >= 1)
                //{
                //  while (dataGrid.SelectedCells.Count > 0)
                //{
                //     int selectedIndex = dataGrid.SelectedIndex;
                //    dbtable.Rows.RemoveAt(selectedIndex);
                // bsource.RemoveAt(selectedIndex);
                //    var row = dbtable.Rows[selectedIndex];
                //    row.Delete();
                //    oleda.Update(dbtable);
                //  }
                //}
                // }
            }
            catch (Exception ex)
            {
                System.Windows.MessageBox.Show(ex.Message);



            }
        }


<pre><DataGrid x:Name="dataGrid" ItemsSource="{Binding Properties}" SelectedItem="{Binding SelectedProperty,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Height="238" Margin="10,120,0,0" VerticalAlignment="Top" Width="733" />

Gerry Schmitz

Загрузка, а затем сразу же ожидание правильного "выбранного элемента", не будет работать.

Где здесь "пользователь"?

Priya Karthish

Моя таблица с именем Author загружается в datagrid.Затем я выбираю строку в datagrid. Затем я пытаюсь нажать кнопку,чтобы вызвать удаление, но она не удаляется.

Richard Deeming

Потому что, как уже объяснил Джерри, когда вы нажимаете кнопку, вы немедленно повторно привязываете сетку к базе данных.

При повторной привязке сетки выбор пользователя теряется. Выбранные строки для обработки отсутствуют.

1 Ответов

Рейтинг:
1

Gerry Schmitz

Если вы собираетесь использовать DataGrid в качестве "селектора", то вам нужно обработать событие "выбранная ячейка изменена" или "выбор изменен".

Вы также должны узнать о "состояниях ожидания" и последовательности событий. Обработка пользовательского ввода.

Элемент управления DataGrid.SelectedCellsChanged Событие (Системы.Окна.Элементы Управления) | Microsoft Docs[^]

Селектор.Событие SelectionChanged (Системы.Окна.Управления.Примитивы) | Майкрософт Документы[^]


Priya Karthish

Моя Datagrid уже загружается с содержимым из таблицы Author, когда загружается окно. Таким образом, SelectionChangedEvent выдает ошибку NullException.
Необработанное исключение типа "System.NullReferenceException" произошло в WpfApplication1.exe

Priya Karthish

Спасибо. Но я решил эту проблему с помощью commandbuilder GetDeletecommand() и обновил свой datatable, который привязан к datagrid. Он был удален как из datagrid, так и из базы данных.