DataGridView 是 Windows Forms 中用于显示和编辑表格数据的控件,而 SQLite 是一种轻量级的嵌入式数据库系统,使用 .db 文件存储数据。
首先需要添加 System.Data.SQLite 包来操作 SQLite 数据库。
using System;
using System.Data;
using System.Data.SQLite;
using System.Windows.Forms;
namespace SQLiteDataGridViewExample
{
public partial class Form1 : Form
{
private string dbFilePath = "your_database.db"; // 替换为你的数据库文件路径
private string tableName = "your_table_name"; // 替换为你要显示的表名
public Form1()
{
InitializeComponent();
LoadDataFromSQLite();
}
private void LoadDataFromSQLite()
{
try
{
// 创建连接字符串
string connectionString = $"Data Source={dbFilePath};Version=3;";
// 创建 SQLite 连接
using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
// 打开连接
connection.Open();
// 创建 SQL 命令
string query = $"SELECT * FROM {tableName}";
using (SQLiteCommand command = new SQLiteCommand(query, connection))
{
// 创建数据适配器
using (SQLiteDataAdapter adapter = new SQLiteDataAdapter(command))
{
// 创建数据集
DataSet dataSet = new DataSet();
// 填充数据集
adapter.Fill(dataSet);
// 绑定到 DataGridView
dataGridView1.DataSource = dataSet.Tables[0];
// 可选:自动调整列宽
dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
}
}
}
}
catch (Exception ex)
{
MessageBox.Show($"加载数据时出错: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
原因: 指定的数据库文件路径不正确或文件不存在 解决:
原因: 指定的表名在数据库中不存在 解决:
// 获取所有表名的方法
private List<string> GetAllTableNames(SQLiteConnection connection)
{
List<string> tables = new List<string>();
DataTable dt = connection.GetSchema("Tables");
foreach (DataRow row in dt.Rows)
{
tables.Add(row["TABLE_NAME"].ToString());
}
return tables;
}
原因: DataGridView 无法正确显示某些 SQLite 数据类型 解决:
原因: 数据量过大导致加载缓慢 解决:
// 分页查询示例
string query = $"SELECT * FROM {tableName} LIMIT {pageSize} OFFSET {pageNumber * pageSize}";
// 添加保存按钮事件处理
private void btnSave_Click(object sender, EventArgs e)
{
try
{
string connectionString = $"Data Source={dbFilePath};Version=3;";
using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
connection.Open();
// 获取更改
DataTable changes = ((DataTable)dataGridView1.DataSource).GetChanges();
if (changes != null)
{
using (SQLiteDataAdapter adapter = new SQLiteDataAdapter($"SELECT * FROM {tableName}", connection))
{
SQLiteCommandBuilder builder = new SQLiteCommandBuilder(adapter);
adapter.UpdateCommand = builder.GetUpdateCommand();
adapter.InsertCommand = builder.GetInsertCommand();
adapter.DeleteCommand = builder.GetDeleteCommand();
adapter.Update(changes);
// 接受更改
((DataTable)dataGridView1.DataSource).AcceptChanges();
MessageBox.Show("更改已保存", "成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
}
catch (Exception ex)
{
MessageBox.Show($"保存更改时出错: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
// 在加载数据后自定义列
private void CustomizeDataGridView()
{
// 隐藏特定列
dataGridView1.Columns["id"].Visible = false;
// 设置列标题
dataGridView1.Columns["name"].HeaderText = "姓名";
dataGridView1.Columns["age"].HeaderText = "年龄";
// 设置列格式
dataGridView1.Columns["birth_date"].DefaultCellStyle.Format = "yyyy-MM-dd";
// 设置只读列
dataGridView1.Columns["create_time"].ReadOnly = true;
}
通过以上方法和代码示例,您可以在 Visual Studio Form 应用中有效地显示和操作 SQLite 数据库内容。
没有搜到相关的文章