Невозможно сохранить байт [] в gridControl DevExpress
У меня есть поток байтов [] из файла, я хочу вставить этот массив в столбец 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 მეგაბაიტს");
}
}
и я получаю сообщение об ошибке "объект должен реализовать iconvertible", как я могу решить эту проблему?
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; }
}