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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF DataGrid中的数据绑定未显示在窗体上相关的知识,希望对你有一定的参考价值。

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

我制作存储库,表单和一些方法。我使用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;
        }
    }
答案

这个怎么样:

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

另一答案

在您的DataGrid集上:

    AutoGenerateColumns="False"

然后改变:

DataGrid1.ItemsSource = dt.DefaultView

至:

DataGrid1.DataContext = dt.DefaultView

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

以上是关于WPF DataGrid中的数据绑定未显示在窗体上的主要内容,如果未能解决你的问题,请参考以下文章

刷新 WPF Datagrid 未绑定到可观察集合?

将wpf datagrid导出为自定义Excel CSV文件

WPF DataGrid 绑定数据及时更新的处理

在XAML代码中绑定数据时,WPF DataGrid ItemsSource绑定不显示数据

DataGrid中的WPF绑定到DataContext

WPF DataGrid 绑定到 XML 未更新