【问题标题】:DataType for Saving Images in DataColumn of DataTableDataTable的DataColumn中保存图片的DataType
【发布时间】:2015-04-08 08:03:13
【问题描述】:

我有一个看似简单的问题,我已经动态地创建了一个 DataTable,并且我向它添加了行就好了。但是,我有一列会有一个图像标志。我已经将这两个标志(.png 图像)导入到项目资源中。但是,我无法将列的 DataType 设置为 System.Type.Bitmap,因为 DataColumn 不支持这一点,可以在此处看到。我看到一个解决方案说我将 DataType 设置如下

dataColumn = new DataColumn("Flag");
dataColumn.DataType = System.Type.GetType("System.Byte[]"); //Replacing System.Byte[] with System.Type.Bitmap throws Type Exception
dataTable.Columns.Add(dataColumn);

但是,这会引发异常,说明编译器需要 Byte[] 但得到了位图。

这是我向 DataTable 添加行的方法

row["Part Number"] = part;
row["Module Name"] = populator.LookUpAValue(moduleSql);
row["Flag"] = Properties.Resources.Yellow_Flag;
row["Location"] = populator.LookUpAValue(nameSql);
dataTable.Rows.Add(row);

这是我的问题,我应该使用哪种 DataType 保存图像列,因此当我显示到 DataGridView 时,我会看到显示的图像。没有在 DataGridView 上设置 DataType 而不是显示图像,我得到文本 System.Drawing.Bitmap

【问题讨论】:

    标签: c# datagridview datatable datagridviewcolumn datacolumn


    【解决方案1】:

    您可以将BitmapByte[] 用作DataType

    如果您将DataColumnDataGridViewTextColumn 而非DataGridViewImageColumn 相关联,则DataGridView 将显示类型名称。添加DataGridViewImageColumn 并将DataTable 中的图像列关联到此创建的列。

    如果要将DataType设置为Byte[],则在存储图像时,必须将图像转换为Byte[],并在从DataTable读取时将Byte[]转换为图像。

    dataColumn.DataType = System.Type.GetType("System.Byte[]");
    

    图片到Byte[]的转换

    Image image = dataGridView1.Rows[rowIndex].Cells[columnIndex].Value as Image;
    if(image != null)
    {
        MemoryStream ms = new MemoryStream();
        image.Save(ms, System.Drawing.Imaging.ImageFormat.);
        byte[] imagedata = ms.ToArray();
    }
    

    Byte[]转图片

    MemoryStream ms = new MemoryStream(imagedata);
    Image img = Image.FromStream(ms);
    dataGridView1.Rows[rowIndex].Cells[columnIndex].Value = img;
    

    【讨论】:

      【解决方案2】:

      这是对我有用的代码。

      DataTable dt = new DataTable();
      DataColumn dc = new DataColumn("Column1");
      dc.DataType = System.Type.GetType("System.Byte[]");
      dt.Columns.Add(dc);
      DataRow row = dt.NewRow();
      var imageConverter = new ImageConverter();
      row["Column1"] = imageConverter.ConvertTo(Properties.Resources._1, System.Type.GetType("System.Byte[]")); 
      dt.Rows.Add(row);
      this.dataGridView1.DataSource = dt;
      

      【讨论】:

        猜你喜欢
        • 2012-02-27
        • 2011-05-12
        • 1970-01-01
        • 1970-01-01
        • 2019-03-17
        • 1970-01-01
        • 2019-01-11
        • 2010-10-15
        • 2012-03-28
        相关资源
        最近更新 更多