m0_52760851 2023-11-06 15:28 采纳率: 55.6%
浏览 6

DataGridView中显示MySQL中的图像数据

DataGridView中显示MySQL中的图像数据

MySQL表中包含一列“图片”(类型是longblob),在DataGridView中显示时结果如下:

img

两个问题:1.图像显示部分,不完整。2.当MySQL数据库中图片那一列为空值时,显示叉号。
请问有什么解决的方法?

代码如下:

connection.Open();
string query = "SELECT * FROM mytable;";
 MySqlCommand command = new MySqlCommand(query, connection);
MySqlDataReader reader = command.ExecuteReader();
dataTable = new DataTable();
dataTable.Load(reader);
dataGridView1.DataSource = dataTable;

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-06 19:11
    关注

    【以下回答由 GPT 生成】

    首先,如果要在DataGridView中显示MySQL中的图像数据,可以使用DataGridViewImageColumn列来显示图像数据。

    以下是解决问题的步骤:

    1. 首先,在DataGridView中创建一个DataGridViewImageColumn列,用来显示图像数据。可以通过编程方式创建该列,或者在设计器中添加该列。
    DataGridViewImageColumn imageColumn = new DataGridViewImageColumn();
    imageColumn.HeaderText = "图片";
    imageColumn.Name = "ImageColumn";
    dataGridView1.Columns.Add(imageColumn);
    
    1. 然后,通过查询数据库来获取图像的二进制数据。可以使用参数化查询来保护代码免受SQL注入攻击。
    // 查询数据库获取图像数据
    connection.Open();
    string query = "SELECT * FROM mytable;";
    MySqlCommand command = new MySqlCommand(query, connection);
    MySqlDataReader reader = command.ExecuteReader();
    dataTable = new DataTable();
    dataTable.Load(reader);
    
    1. 接下来,遍历DataTable中的每一行,并将图像数据转换为Image对象,然后将Image对象赋值给对应的DataGridView单元格。
    foreach(DataRow row in dataTable.Rows)
    {
        // 读取二进制数据
        byte[] imageData = (byte[])row["ImageColumn"];
    
        // 将二进制数据转换为Image对象
        using (MemoryStream ms = new MemoryStream(imageData))
        {
            Image image = Image.FromStream(ms);
    
            // 将Image对象赋值给DataGridView单元格
            int rowIndex = dataTable.Rows.IndexOf(row);
            dataGridView1.Rows[rowIndex].Cells["ImageColumn"].Value = image;
        }
    }
    
    1. 最后,处理当MySQL数据库中图片那一列为空值时的情况,可以通过判断是否为DBNull.Value来进行处理。
    foreach(DataRow row in dataTable.Rows)
    {
        if (row["ImageColumn"] != DBNull.Value)
        {
            // 读取二进制数据并转换为Image对象
            // ...
        }
        else
        {
            // 在DataGridView单元格中显示叉号
            int rowIndex = dataTable.Rows.IndexOf(row);
            dataGridView1.Rows[rowIndex].Cells["ImageColumn"].Value = Properties.Resources.CrossImage; // 或者其他叉号图片资源
        }
    }
    

    以上是一种可能的解决方法。但是需要根据具体情况进行调整和优化。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 修改了问题 11月6日
  • 修改了问题 11月6日
  • 创建了问题 11月6日

悬赏问题

  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类