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导出为自定义Excel CSV文件