为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕容森 2022-12-24 10:43:32
数据库中的数据显示在表单上。怎么了?我制作存储库、表格和一些方法。我使用 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 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

这个怎么样:


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


查看完整回答
反对 回复 2022-12-24
?
呼唤远方

TA贡献1856条经验 获得超11个赞

在您的 DataGrid 集上:

    AutoGenerateColumns="False"

然后改变:

DataGrid1.ItemsSource = dt.DefaultView

到:

DataGrid1.DataContext = dt.DefaultView

在 WPF 中,将绑定与您定义的列一起使用需要您设置 DataContext 而不是 ItemSource。就我个人而言,在从数据库中提取数据并在 DataGrid 中显示数据时,我一直使用 .ToList(),因此我无法就 DataTable 对您的其余代码发表评论。


查看完整回答
反对 回复 2022-12-24
  • 2 回答
  • 0 关注
  • 376 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信