Как вывести информацию SQL в DataGrid?

205
11 августа 2018, 12:50

Хотел попробовать написать программу по правилам паттерна MVVM. Фактически я никогда не работал с ним. Мне нужно связать SQL Server с WPF и вывести таблицу в DataGrid. Это у меня получилось.

НО! Я решил усложнить себе задачу и сделать за принципом паттерна. И проблема заключается в том, что когда я инициализирую сами столбцы и не разрешаю автоматическую генерацию столбцов заполнение DataGrid — выдает пустую таблицу.

Я понимаю, что где-то в файле MainViewModel нужно прописать коллекцию работы с SQL, но не знаю как и сформулировать запрос в Google не могу правильно =)

Разметка XAML:

<DataGrid x:Name="ShipmentGrid" Style="{StaticResource DataGridShipment}" ItemsSource="{Binding ShipmentList}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Организация"  Binding="{Binding Oraganization}" Width="100"></DataGridTextColumn>
        <DataGridTextColumn Header="Город"        Binding="{Binding City}"          Width="100"></DataGridTextColumn>
        <DataGridTextColumn Header="Страна"       Binding="{Binding Country}"       Width="100"></DataGridTextColumn>
        <DataGridTextColumn Header="Менеджер"     Binding="{Binding Manager}"       Width="100"></DataGridTextColumn>
        <DataGridTextColumn Header="Количество"   Binding="{Binding Quantity}"      Width="100"></DataGridTextColumn>
        <DataGridTextColumn Header="Сумма за ед." Binding="{Binding AmountPerItem}" Width="100"></DataGridTextColumn>
        <DataGridTextColumn Header="Общая сумма"  Binding="{Binding TotalAmount}"   Width="100"></DataGridTextColumn>
        <DataGridTextColumn Header="Дата"         Binding="{Binding Data}"          Width="100"></DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

Кастомизация DataGrid:

<Setter Property="AutoGenerateColumns" Value="False"></Setter>

В Model у меня храниться один файл (Shipments):

class Shipments
{
    public string Organization  { get; set; }
    public string City          { get; set; }
    public string Country       { get; set; }
    public string Manager       { get; set; }
    public int    Quantity      { get; set; }
    public double AmntPerInt    { get; set; }
    public double TotalAmount   { get; set; }
    public string Data          { get; set; }
    public Shipments(string Organization, string City, string Country, string Manager, 
                     int Quantity, double AmntPerInt, double TotalAmount, string Data)
    {
        this.Organization   = Organization;
        this.City           = City;
        this.Country        = Country;
        this.Manager        = Manager;
        this.Quantity       = Quantity;
        this.AmntPerInt     = AmntPerInt;
        this.TotalAmount    = TotalAmount;
        this.Data           = Data;
    }
}

А в папке ViewModel три файла:

public abstract class ViewModelBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
class MainViewModel : ViewModelBase {
    public ObservableCollection<ShipmentViewModel> ShipmentList { get; set; }
    public MainViewModel(List<Shipments> shipments) {
        ShipmentList = new ObservableCollection<ShipmentViewModel>(shipments.Select(b => new ShipmentViewModel(b)));
    }
}
class ShipmentViewModel : ViewModelBase {
    public Shipments Shipments;
    public ShipmentViewModel(Shipments shipments) {
        this.Shipments = shipments;
    }
    public string Organization {
        get { return Shipments.Organization; }
        set
        {
            Shipments.Organization = value;
            OnPropertyChanged("Организация");
        }
    } // и дальше каждый столбец
}
READ ALSO
Что происходит под капотом при создании файлового потока?

Что происходит под капотом при создании файлового потока?

Сейчас читаю вот эту статью Difference between Buffer & Stream in C# и хотел бы для себя сначала уяснить что правильно понимаю, что происходит под капотом...

207
Производительность OpenCL

Производительность OpenCL

Возникла проблема оптимизации алгоритма поиска пути на карте (двухмерный массив), уперся в производительность, которая после 200 элементов...

184
Блокировка с задержкой

Блокировка с задержкой

День добрый, требуется заблокировать textbox`s на минуту, а потом снять блокировку, и если были введены неверные значения более двух разЕсли в третий...

214
На сервере не работает $_POST

На сервере не работает $_POST

Работаю с Retrofit2, Volley даже уже Postman тестилНе работает $_POST на сервере

219