在我的数据网格视图上显示照片时出错
Error while displaying photo on my datagridview
我无法在我的数据网格视图中显示来自 heidiSQL 的照片。有一个错误,我不知道如何处理它,因为我的源代码和我一起学习的人完全一样。唯一不同的是他使用的是phpmyadmin。
Student student = new Student();
private void StudentsList_Load(object sender, EventArgs e)
{
// populate the datagridview with students data
MySqlCommand command = new MySqlCommand("SELECT * FROM `students`");
dataGridView1.ReadOnly = true;
DataGridViewImageColumn picCol = new DataGridViewImageColumn();
dataGridView1.RowTemplate.Height = 80;
dataGridView1.DataSource = student.getStudents(command);
picCol = (DataGridViewImageColumn)dataGridView1.Columns[7];
picCol.ImageLayout = DataGridViewImageCellLayout.Stretch;
dataGridView1.AllowUserToAddRows = false;
}
https://i.stack.imgur.com/Kilx0.png
我得到的错误
首先,我会使用列 Name
而不是 Index
;这是它很容易混合的地方。我认为应该是:
picCol = (DataGridViewImageColumn)dataGridView1.Columns["ImageDBColumnName"];
这也适用于您的 DataSource
,SELECT *
是一种不好的做法。您应该列出您的数据列并通过它们的名称进行引用。
那么,你的图片文件type
是什么?你没有提到那个。
但我也会关注定义的顺序。您非常随机地设置属性,我建议先定义 DataGridView
属性,例如 Columns
(最重要的是确保预期的图像列是 DataGridViewImageColumn
类型)并且仅在最后一刻,设置 DataGridView.DataSource
。具体在这里我看到一个潜在的问题:
dataGridView1.DataSource = student.getStudents(command);
picCol = (DataGridViewImageColumn)dataGridView1.Columns[7];
我个人更喜欢使用 GUI 来设置 DataGridView
列,因为它从解决方案中卸载了大量代码,而且您可以肯定,它们是在您的代码执行之前设置的。但是,如果您的数据源恰好为空,您将失去这些定义。一个简单的解决方案是使用 DataTable
作为数据中介。
我已经解决了这个问题。当我将它转换为参数时,我需要将 .ToArray() 添加到我的图片变量中。
MySqlCommand command = new MySqlCommand();
String editQuery = "sql query";
command.CommandText = editQuery;
command.Connection = conn.getConnection();
command.Parameters.Add("@pic", MySqlDbType.Blob).Value = picture.ToArray();
我无法在我的数据网格视图中显示来自 heidiSQL 的照片。有一个错误,我不知道如何处理它,因为我的源代码和我一起学习的人完全一样。唯一不同的是他使用的是phpmyadmin。
Student student = new Student();
private void StudentsList_Load(object sender, EventArgs e)
{
// populate the datagridview with students data
MySqlCommand command = new MySqlCommand("SELECT * FROM `students`");
dataGridView1.ReadOnly = true;
DataGridViewImageColumn picCol = new DataGridViewImageColumn();
dataGridView1.RowTemplate.Height = 80;
dataGridView1.DataSource = student.getStudents(command);
picCol = (DataGridViewImageColumn)dataGridView1.Columns[7];
picCol.ImageLayout = DataGridViewImageCellLayout.Stretch;
dataGridView1.AllowUserToAddRows = false;
}
https://i.stack.imgur.com/Kilx0.png 我得到的错误
首先,我会使用列 Name
而不是 Index
;这是它很容易混合的地方。我认为应该是:
picCol = (DataGridViewImageColumn)dataGridView1.Columns["ImageDBColumnName"];
这也适用于您的 DataSource
,SELECT *
是一种不好的做法。您应该列出您的数据列并通过它们的名称进行引用。
那么,你的图片文件type
是什么?你没有提到那个。
但我也会关注定义的顺序。您非常随机地设置属性,我建议先定义 DataGridView
属性,例如 Columns
(最重要的是确保预期的图像列是 DataGridViewImageColumn
类型)并且仅在最后一刻,设置 DataGridView.DataSource
。具体在这里我看到一个潜在的问题:
dataGridView1.DataSource = student.getStudents(command);
picCol = (DataGridViewImageColumn)dataGridView1.Columns[7];
我个人更喜欢使用 GUI 来设置 DataGridView
列,因为它从解决方案中卸载了大量代码,而且您可以肯定,它们是在您的代码执行之前设置的。但是,如果您的数据源恰好为空,您将失去这些定义。一个简单的解决方案是使用 DataTable
作为数据中介。
我已经解决了这个问题。当我将它转换为参数时,我需要将 .ToArray() 添加到我的图片变量中。
MySqlCommand command = new MySqlCommand();
String editQuery = "sql query";
command.CommandText = editQuery;
command.Connection = conn.getConnection();
command.Parameters.Add("@pic", MySqlDbType.Blob).Value = picture.ToArray();