繁体   English   中英

在C#中的DataGridView中加载图像时出错

[英]Error loading image in the DataGridView in C#

我试图从数据库中加载数据并在DataGridView中显示它,我可以很好地显示文本,但是当我尝试加载图像时出现错误。 我的代码是

private void LoadData()
        {
            using (MySqlConnection conn = new MySqlConnection(connectionManager.connectionString))
            {
                try
                {
                    //MySqlDataAdapter _adapter = new MySqlDataAdapter("SELECT `ID`, `First Name`, `Last Name`, `Email`, `Mobile`, `Course`, `Gender` FROM student_img", conn);
                    MySqlDataAdapter _adapter = new MySqlDataAdapter("SELECT `ID`, `First Name`, `Last Name`, `Email`, `Mobile`, `Course`, `Gender` , `Image` FROM student_img", conn);

                    DataSet _dataset = new DataSet();
                    _adapter.Fill(_dataset, "table");
                    dataGridViewStudent.DataSource = _dataset;
                    dataGridViewStudent.DataMember = "table";
                    lblRecords.Text = dataGridViewStudent.Rows.Count.ToString();
                    DataGridViewImageColumn Image = new DataGridViewImageColumn();
                    Image = (DataGridViewImageColumn)dataGridViewStudent.Columns[7];
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Connection Error!\n" + ex.Message, "Error Message",
                            MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

        }

我收到的错误消息是

在此处输入图片说明

这两行没有意义:

DataGridViewImageColumn Image = new DataGridViewImageColumn();
Image = (DataGridViewImageColumn)dataGridViewStudent.Columns[7];

如果您的列是自动生成的,则图像列将照此生成,并且无需其他代码即可工作。 这是最简单的方法。

而且由于您没有创建似乎正在执行的任何其他列。 那么这些线能实现什么呢?

特别是因为您不在任何地方添加额外的列? (顺便说一句,您无论如何都无法执行,因为它已经是columns集合的一部分。)

如果在代码中创建dgv列,则必须为每种类型提供正确的类型,并将每种类型连接到正确的数据源列,然后将它们添加到DGV中:

    string sql = "Select preview, text from Covers;";
    ..
    ..
    DataSet ds = new DataSet();
    adapter.Fill(ds);

    // either simply set this to true or..
    dataGridView1.AutoGenerateColumns = false;
    // add all columns.. 
    DataGridViewImageColumn dvgic = new DataGridViewImageColumn();
    // setting their names
    dvgic.Name = "preview";
    dvgic.HeaderText = "Preview";
    // and relating them to the data source fields..
    dvgic.DataPropertyName = "preview";
    dataGridView1.Columns.Add(dvgic);

    dataGridView1.Columns.Add("text", "Text");
    dataGridView1.Columns["text"].DataPropertyName = "text";

    dataGridView1.DataSource = ds.Tables[0];

如果出于某种原因需要将ImageColumn单元格设置为Image ,无论它来自任何来源,包括正在馈入ImageColumn的db字段,那么您都必须设置单元格的Value ,而不是单元格本身。

但是您的错误消息似乎表明您至少有一些数据不是有效的图像。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM