не могу сохранить byte[] в gridControl DevExpress

У меня есть поток byte[] из файла, я хочу вставить этот массив в столбец gridControl

  if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                if (new FileInfo(openFileDialog1.FileName).Length < 10485760)
                {
                   byte[] st = Converter.streamToArray(openFileDialog1.OpenFile());

                   GridManipulator.GridView.SetRowCellValue(GridManipulator.GridView.FocusedRowHandle,GridManipulator.FILESTREAM,
                      st);

                     GridManipulator.GridView.SetRowCellValue(GridManipulator.GridView.FocusedRowHandle,GridManipulator.FILENAME,
                       Path.GetFileName(openFileDialog1.FileName));

                }

                else
                {
                    XtraMessageBox.Show("ფაილი აჭარბებს 10 მეგაბაიტს");
                }

            }

и я получаю сообщение об ошибке «objec должен реализовать iconvertible», как я могу решить эту проблему?


person user3150998    schedule 22.05.2014    source источник
comment
Возможно, столбец имеет тип, отличный от того, который может представлять byte[]. Является ли столбец привязанным или несвязанным? Если несвязанный, то какой несвязанный тип?   -  person scheien    schedule 22.05.2014
comment
это связанный тип, я думаю, проблема в том, что он не может преобразовать из байта [] в объект   -  person user3150998    schedule 22.05.2014
comment
Что вы в основном хотите сделать, так это загрузить изображение в ячейку сетки? Что я сделал ранее, так это имел свойство byte[] в типе, который я установил в качестве источника данных. Затем вы можете использовать встроенное контекстное меню для загрузки изображения в данную ячейку.   -  person scheien    schedule 22.05.2014


Ответы (1)


Если это связанный столбец, вы можете вставить byte[] в базовый источник данных. В этом примере я использовал класс RowItem для представления строки в сетке, а затем после выбора файла поместил byte[] в выбранный RowItem, и сетка автоматически отобразит изображение. Чтобы попробовать, просто откройте новый проект, поместите в форму одну кнопку и один элемент управления Xtragrid и используйте приведенный ниже код или загрузите рабочий проект

public partial class MainForm : Form
{
    // this will hold the data for the grid
    List<RowItem> Items = new List<RowItem>();

    public MainForm()
    {
        InitializeComponent();
        gridControl1.DataSource = Items;

        Items.Add(new RowItem() { ID = 1, Caption = "First" });
        Items.Add(new RowItem() { ID = 2, Caption = "Second" });
    }

    private void button1_Click(object sender, EventArgs e)
    {
        using (OpenFileDialog ofd = new OpenFileDialog())
        {
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                byte[] filecontents = File.ReadAllBytes(ofd.FileName);
                // Get the Item object represented by the selected row
                RowItem selecteditem = gridView1.GetFocusedRow() as RowItem;
                if (selecteditem == null) return;

                selecteditem.Bytes = filecontents;
                selecteditem.FileName = ofd.FileName;
                gridView1.RefreshData();
            }
        }
    }
}

class RowItem
{
    public int ID { get; set; }
    public string Caption { get; set; }
    public byte[] Bytes { get; set; }
    public string FileName { get; set; }
}
person OttO    schedule 22.05.2014