WPF DataGrid中的数据绑定未显示在窗体上

问题描述 投票:0回答:2

数据显示在表单上的数据库中。怎么了?

我制作存储库,表单和一些方法。我使用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;
        }
    }
c# database wpf
2个回答
0
投票

这个怎么样:

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();


0
投票

在您的DataGrid集上:

    AutoGenerateColumns="False"

然后改变:

DataGrid1.ItemsSource = dt.DefaultView

至:

DataGrid1.DataContext = dt.DefaultView

在WPF中使用带有已定义列的Bindings需要您设置DataContext而不是ItemSource。就个人而言,当从数据库中提取数据并在DataGrid中显示数据时,我总是使用.ToList(),因此我无法对DataTable的其余代码进行评论。

© www.soinside.com 2019 - 2024. All rights reserved.