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;

        }

    }


慕容森
浏览 377回答 2
2回答

白衣染霜花

这个怎么样:public async Task<DataTable> GetDataTable(){&nbsp; &nbsp; var dataTable = new DataTable("Students");&nbsp; &nbsp; using (var conn = await DbContext.GetConnection())&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; var da = new SQLiteDataAdapter(GET_ALL_QUERY, conn);&nbsp; &nbsp; &nbsp; &nbsp; da.Fill(dataTable);&nbsp; &nbsp; &nbsp; &nbsp; conn.Close();&nbsp; &nbsp; }&nbsp; &nbsp; return dataTable;}private void Button_Click(object sender, RoutedEventArgs e){&nbsp; &nbsp; var repo = new StudentsRepository();&nbsp; &nbsp; var res = repo.GetDataTable();&nbsp; &nbsp; DataGrid1.ItemsSource = res.Result.AsDataView();}希望这有帮助~更新:抱歉,函数返回类型是任务,因此它不是实际数据,这样做:res.Result.AsDataView();

呼唤远方

在您的 DataGrid 集上:&nbsp;&nbsp;&nbsp;&nbsp;AutoGenerateColumns="False"然后改变:DataGrid1.ItemsSource&nbsp;=&nbsp;dt.DefaultView到:DataGrid1.DataContext&nbsp;=&nbsp;dt.DefaultView在 WPF 中,将绑定与您定义的列一起使用需要您设置 DataContext 而不是 ItemSource。就我个人而言,在从数据库中提取数据并在 DataGrid 中显示数据时,我一直使用 .ToList(),因此我无法就 DataTable 对您的其余代码发表评论。
打开App,查看更多内容
随时随地看视频慕课网APP