You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WinForm中从SQLite数据库图片路径显示DataGridView图片问题

在DataGridView中显示SQLite存储的本地图片路径对应的图片

嗨,我明白你的需求了——你已经在SQLite里存好了图片的本地绝对路径,现在要在DataGridView里把这些路径转换成实际的图片显示出来对吧?我给你整理了完整的实现步骤和代码,你可以直接参考:

步骤1:手动配置DataGridView的列

因为你已经设置了AutoGenerateColumns = false,所以需要手动添加列,其中专门加一个DataGridViewImageColumn用来显示图片。你可以在设计器里添加,或者用代码创建:

// 示例:用代码添加列(如果没在设计器里加的话)
// 先添加其他文本列,比如产品名称列
DataGridViewTextBoxColumn nameColumn = new DataGridViewTextBoxColumn();
nameColumn.DataPropertyName = "product_name"; // 对应数据库里的字段名
nameColumn.HeaderText = "产品名称";
foodListView.Columns.Add(nameColumn);

// 添加图片列
DataGridViewImageColumn imageColumn = new DataGridViewImageColumn();
imageColumn.DataPropertyName = "image_path"; // 对应数据库里存路径的字段名
imageColumn.HeaderText = "产品图片";
imageColumn.ImageLayout = DataGridViewImageCellLayout.Zoom; // 图片缩放适配单元格
foodListView.Columns.Add(imageColumn);

步骤2:处理CellFormatting事件转换路径为图片

DataGridView不会自动把路径转成图片,所以我们需要监听CellFormatting事件,在事件里把路径对应的图片加载进来:

首先,在你的窗体构造函数或者Load事件里绑定这个事件:

public YourFormName()
{
    InitializeComponent();
    // 绑定CellFormatting事件
    foodListView.CellFormatting += FoodListView_CellFormatting;
}

然后实现事件处理方法:

private void FoodListView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    // 确保是图片列,且单元格值不为空
    if (foodListView.Columns[e.ColumnIndex] is DataGridViewImageColumn && e.Value != null)
    {
        string imagePath = e.Value.ToString();
        try
        {
            // 加载本地图片
            e.Value = Image.FromFile(imagePath);
            // 取消后续格式化,避免重复处理
            e.FormattingApplied = true;
        }
        catch (Exception ex)
        {
            // 如果图片不存在或者加载失败,可以显示一张默认图片,或者留空
            // 示例:显示默认图片(你需要替换成自己的默认图片路径)
            e.Value = Image.FromFile(@"C:\path\to\your\default-image.png");
            // 或者直接设为null,显示空白
            // e.Value = null;
            Console.WriteLine($"加载图片失败:{ex.Message}");
        }
    }
}

步骤3:完善你的loadTable方法

把你的代码补充完整,确保数据绑定正确:

private void loadTable()
{
    using (SQLiteConnection conn = new SQLiteConnection("你的数据库连接字符串"))
    {
        conn.Open();
        SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter("SELECT * FROM products", conn);
        DataTable dt = new DataTable();
        dataAdapter.Fill(dt);
        
        foodListView.AutoGenerateColumns = false;
        foodListView.AllowUserToAddRows = false;
        foodListView.RowHeadersVisible = false;
        // 绑定数据源
        foodListView.DataSource = dt;
    }
}

注意事项

  • 记得处理图片加载失败的情况,避免程序崩溃
  • 如果图片尺寸较大,建议提前压缩或者在显示时调整大小,避免DataGridView卡顿
  • 确保你的程序有访问图片路径的权限(比如不要存到系统受保护的目录,或者给程序相应权限)

内容的提问来源于stack exchange,提问作者Iftakharul Alam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:05:35