Привязка данных в WPF DataGrid не отображается в форме - PullRequest
0 голосов
/ 20 апреля 2019

Данные отображаются из базы данных в форме.Что не так?

Я делаю репозиторий, формы и несколько методов.Я использую SQLite и хочу отображать результат в форме простого запроса, такого как SELECT id, Name FROM Students. Я помещаю кнопку в форму с кодом

private void Button_Click(object sender, RoutedEventArgs e)
        {
            var repo = new StudentsRepository();
            var res = repo.GetAll();

            DataTable dt = new DataTable("students");
            DataGrid1.ItemsSource = dt.DefaultView;
        }

, форма имеет DataGrid и 2 столбца, но я не понимаю, почемуформа не отображает результаты

<Grid>
        <DataGrid x:Name="DataGrid1" AutoGenerateColumns="true"  HorizontalAlignment="Left" Height="352" Margin="10,10,0,0" VerticalAlignment="Top" Width="758" SelectionChanged="DataGrid_SelectionChanged">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding id}" Width="100" Header="Id"/>
            <DataGridTextColumn Binding="{Binding Name}" Width="100" Header="Name"/>
        </DataGrid.Columns>
        </DataGrid>
        <Button x:Name="ShowDataButton" Content="Show_Data" HorizontalAlignment="Left" Height="31" Margin="64,367,0,0" VerticalAlignment="Top" Width="161" Click="Button_Click"/>
    </Grid>

public class StudentsRepository: IRepository<StudentEntity>
    {
        private string GET_ALL_QUERY = "SELECT id, Name FROM Students";
        private SqliteContext DbContext { get; }

        public StudentsRepository()
        {
            DbContext = new SqliteContext();
        }
        public async Task<IList<StudentEntity>> GetAll()
        {
            var dataTable = new DataTable("Students");
            using (var conn = await DbContext.GetConnection())
            {
                var da = new SQLiteDataAdapter(GET_ALL_QUERY, conn);
                da.Fill(dataTable);

                conn.Close();
            }

            var studList = new List<StudentEntity>();
            foreach (DataRow row in dataTable.Rows)
            {
                studList.Add(new StudentEntity(row));
            }

            return studList;
        }
    }

Ответы [ 2 ]

0 голосов
/ 20 апреля 2019

В вашем наборе DataGrid:

    AutoGenerateColumns="False"

Затем измените:

DataGrid1.ItemsSource = dt.DefaultView

На:

DataGrid1.DataContext = dt.DefaultView

В WPF для использования привязок с определенными столбцами требуетсяустановить DataContext вместо ItemSource.Лично я всегда работал с .ToList () при извлечении из базы данных и отображении данных в DataGrid, поэтому я не могу комментировать остальную часть вашего кода в отношении DataTable.

0 голосов
/ 20 апреля 2019

Как насчет этого:

public async Task<DataTable> GetDataTable()
{
    var dataTable = new DataTable("Students");
    using (var conn = await DbContext.GetConnection())
    {
        var da = new SQLiteDataAdapter(GET_ALL_QUERY, conn);
        da.Fill(dataTable);
        conn.Close();
    }
    return dataTable;
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    var repo = new StudentsRepository();
    var res = repo.GetDataTable();
    DataGrid1.ItemsSource = res.Result.AsDataView();
}

Надеюсь, это поможет ~

Обновлено: К сожалению, тип возвращаемого значения функции является задачей, поэтому это не фактические данные, это может сделать: res.Result.AsDataView();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...