Как многие из вас знают, в .NET Standard 2.0 появилась поддержка DataSet и DataTable. При этом мы получили огромный спрос на поддержку привязки DataTable к Xamarin.Forms DataGrid. Мы рады сообщить, что эта функция доступна в выпуске 2019 Volume 3 — Beta.

В этом блоге я расскажу, как привязать класс DataTable к элементу управления Xamarin.Forms DataGrid.

Привязка данных

Давайте создадим простую таблицу данных с данными Сведения о заказе. Вам не потребуется никаких дополнительных материалов для привязки, просто создайте таблицу данных и назначьте ее непосредственно свойству ItemsSource DataGrid. Также можно привязать таблицу данных из набора данных.

Создание ViewModel

Создайте класс модели представления в проекте Xamarin, аналогичный тому, что показан в следующем примере кода.

public class ViewModel
{
    public ViewModel()
    {
        DataTableCollection = GetDataTable();
    }
    public DataTable DataTableCollection { get; set; }
 
    private DataTable GetDataTable()
    {
        DataTable dataTable = new DataTable();
 
        dataTable.Rows.Add(1001, "Maria Anders", "ALFKI", "Germany");
        dataTable.Rows.Add(1002, "Ana Trujilo", "ANATR", "Mexico");
        dataTable.Rows.Add(1003, "Antonio Moreno","ENDGY", "Mexico");
        dataTable.Rows.Add(1004, "Thomas Hardy", "ANTON", "UK");
        dataTable.Rows.Add(1005, "Christina Berglund", "BERGS", "Sweden");
        dataTable.Rows.Add(1006, "Hanna Moos", "BLAUS", "Germany");
        dataTable.Rows.Add(1007, "Frederique Citeaux", "BLONP", "France");
        dataTable.Rows.Add(1008, "Martin Sommer", "BOLID", "Spain");
        dataTable.Rows.Add(1009, "Laurence Lebihan", "BONAP", "France");
        dataTable.Rows.Add(1010, "Kathryn", "BOTTM", "Canada");
        dataTable.Rows.Add(1011, "Tamer", "XDKLF", "UK");
        dataTable.Rows.Add(1012, "Martin", "QEUDJ", "US");
        dataTable.Rows.Add(1013, "Nancy", "ALOPS", "France");
        dataTable.Rows.Add(1014, "Janet", "KSDIO", "Canada");
        dataTable.Rows.Add(1015, "Dodsworth", "AWSDE", "Canada");
        dataTable.Rows.Add(1016, "Buchanan", "CDFKL", "Germany");
        dataTable.Rows.Add(1017, "Therasa", "WSCJD", "Canada");
        dataTable.Rows.Add(1018, "Margaret", "PLSKD", "UK");
        dataTable.Rows.Add(1019, "Anto", "CCDSE", "Sweden");
        dataTable.Rows.Add(1020, "Edward", "EWUJG", "Germany");
        dataTable.Rows.Add(1021, "Anne", "AWSDK", "US");
        dataTable.Rows.Add(1022, "Callahan", "ODKLF", "UK");
        dataTable.Rows.Add(1023, "Vinet", "OEDKL", "France"); 
        return dataTable;
    }
}

Binding ItemsSource в XAML

На главной странице добавьте необходимое пространство имен XML для использования элемента управления SfDataGrid, задайте для BindingContext страницы класс ViewModel и привяжите ItemSource для SfDataGrid с DataTableCollection.

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:DataGridDemo;assembly=DataGridDemo" 
             xmlns:syncfusion="clr-namespace:Syncfusion.SfDataGrid.XForms;assembly=Syncfusion.SfDataGrid.XForms"
             x:Class="DataGridDemo.Sample">
<ContentPage.BindingContext>
        <local:ViewModel x:Name="ViewModel"/>
</ContentPage.BindingContext>
 
<ContentPage.Content>
    <syncfusion:SfDataGrid x:Name="dataGrid"
                           ItemsSource="{Binding DataTableCollection}">
    </syncfusion:SfDataGrid>
</ContentPage.Content>
</ContentPage>

CRUD-операции

DataGrid автоматически обновляет пользовательский интерфейс всякий раз, когда мы добавляем, удаляем или изменяем строки базовой коллекции DataTable.

Операции с данными

DataGrid поддерживает различные операции с данными для представления данных в нем. По умолчанию поддерживаются:

  • Сортировка (включая многоколоночную сортировку)
  • Группировка (включая многоколоночную группировку)
  • Фильтрация
  • Резюме

Сортировка

Вы можете сортировать столбцы с помощью различных встроенных опций, таких как сортировка по нескольким столбцам и сортировка по трем состояниям. Но выборочная сортировка не поддерживается.

На следующем снимке экрана сетка данных отсортирована в порядке возрастания относительно столбца Имя клиента.

Группировка

Данные могут быть организованы в иерархическую структуру на основе совпадающих значений полей. Также поддерживаются Мультигруппировка и Пользовательская группировка.

Фильтрация

Встроенный в DataGrid View.Filtering не поддерживается для класса DataTable. Но вы можете фильтровать записи, используя свойство DataView.RowFilter DataTable.

В следующем примере свойство DataView.RowFilter установлено как «[Страна] = ‘Канада’».

Резюме

Все типы сводок, поддерживаемые DataGrid, поддерживаются для DataTable, т. е. сводка по группе, сводка по заголовку и сводка по таблице.

Другие особенности

Доступна поддержка всех других функций DataGrid, таких как сложенные заголовки, перетаскивание строк, несвязанный столбец и несвязанная строка. Вы можете обратиться к руководству пользователя, чтобы узнать больше о наборах функций DataGrid.

Вывод

Надеюсь, вам понравился этот краткий обзор поддержки привязки DataTable в DataGrid. Эта поддержка доступна в нашей бета-версии Volume 3 2019, которую вы можете скачать здесь.

Если у вас есть какие-либо вопросы или вам нужны разъяснения по поводу этой функции, сообщите нам об этом в комментариях ниже. Вы также можете связаться с нами через наш форум поддержки, Direct-Trac или наш портал обратной связи. Мы рады Вам помочь!

Первоначально опубликовано на https://www.syncfusion.com 23 сентября 2019 г.