C# WPF中SQLite数据绑定DataGrid无内容显示问题排查
问题分析与解决方案:DataGrid未显示数据的原因
你遇到的问题核心点很明确:你传给Load方法的SQL语句是CREATE VIEW,这是一条DDL(数据定义语言)命令,它只会创建视图,不会返回任何查询结果集。
为什么会这样?
当你调用dataAdapter.Fill(dataTable)时,它需要SQL命令返回一个结果集才能填充DataTable。但CREATE VIEW执行成功后不会返回任何行数据,所以你的DataTable是空的,绑定到DataGrid后自然就显示空白了——哪怕视图本身在数据库里已经存在且有数据,也不会自动把视图的数据查出来。
SQLite Browser里能看到视图有数据,是因为你手动查看了视图的内容,但你的代码里只做了创建视图这一步,根本没去查询视图的数据。
怎么解决?
你需要把操作拆成两步:先创建视图(如果不存在),再查询视图的数据来绑定到DataGrid。
1. 给MyController添加一个执行无返回结果SQL的方法
用来处理CREATE VIEW这类DDL命令:
public void ExecuteNonQuery(string commandText) { try { _db.OpenConnection(); using (SQLiteCommand command = new SQLiteCommand(commandText, _db.Connection)) { // 执行无返回结果的SQL命令 command.ExecuteNonQuery(); } } catch (Exception exp) { // 这里保留你的异常处理逻辑 } }
2. 修改DataGrid_1_Loaded里的调用逻辑
先创建视图,再查询视图数据:
// 第一步:确保视图存在(执行DDL命令) MyController.ExecuteNonQuery("CREATE VIEW IF NOT EXISTS content_for_dg AS SELECT name,surname FROM people"); // 第二步:查询视图数据,绑定到DataGrid MyController.Load(DataGrid_1, "SELECT * FROM content_for_dg");
额外验证点
- 先在SQLite Browser里测试
SELECT * FROM content_for_dg,确认确实能返回数据 - 检查DataGrid的
AutoGenerateColumns="True"是否生效,有没有其他XAML属性(比如Visibility)意外隐藏了列 - 确认你的数据库连接指向的是正确的数据库文件,避免连接到了空的测试库
内容的提问来源于stack exchange,提问作者g752042




