Отправить введенную пользователем строку в начало таблицы данных

#c# #wpf #datagrid

#c# #wpf #datagrid

Вопрос:

У меня есть сетка данных, в которой я переместил пустую строку для ввода пользователем в начало с помощью

  ((IEditableCollectionView)MyGrid.Items).NewItemPlaceholderPosition =
                                       NewItemPlaceholderPosition.AtBeginning;
  

Но когда пользователь вводит новую строку, строка переходит на дно (иногда за пределы экрана) без какой-либо обратной связи, и пользователь может подумать, что его новая строка просто исчезла. Поэтому я хотел бы поместить ее сверху.

Я хочу сделать что-то вроде

 MyGrid.Insert(0, newRow);
  

Но я не знаю, что переопределить, чтобы получить доступ к строке по мере ее поступления в DataGrid. Прямо сейчас я явно не помещаю введенную пользователем строку в DataGrid, это происходит автоматически.

Комментарии:

1. У вас есть ItemsSource?

2. Да, мой ItemsSource является ObservableCollection.

3. Итак, вставьте элемент в свой ItemsSource так же, как вы это делали в своих Items ..

4. У меня нет элемента для вставки. Пользователь вводит ее в пустую строку в таблице данных, и она автоматически вводится. Я не уверен, как получить доступ к их новой строке до ее ввода.

5. Как это происходит? Является ли это встроенной функцией DataGrid?

Ответ №1:

Вот пример:

     public ObservableCollection<MyDataItem> DataItems 
    {
        get
        {
            List<MyDataItem> items = new List<MyDataItem>(5);

            for (int i = 0; i < 5; i  )

            {
                items.Add(new MyDataItem { abc = abc[i], qrt = qrt[i], xyz = xyz[i] });
            }

            var observable = new ObservableCollection<MyDataItem>(items);

            var view = CollectionViewSource.GetDefaultView(observable) as IEditableCollectionView;
            view.NewItemPlaceholderPosition = NewItemPlaceholderPosition.AtEnd;

            return observable;
        }
    }
  

XAML :

         <DataGrid ItemsSource="{Binding DataItems}" CanUserAddRows="True" />