Dies geschieht, weil, wenn Sie den byte[]
Typen verwenden Ihre Bilddaten darzustellen. Das GridControl selbst kann korrekt mit Bytes arbeiten und Bitmap direkt in Image-Bytes und zurück konvertieren. Deshalb gibt es im Inplace-Bearbeitungsmodus kein Problem.
Wenn Sie im EditForm-Modus arbeiten, wird die Standard-WinForms-Bindung verwendet, um Bilddaten in den EditForm-Editor und zurück zu übertragen. Und die Standardbindung kann das Bitmap, das Sie in das PictureEdit geladen haben, nicht in das image-bytes-Array konvertieren. Deshalb sehen Sie den Validierungsfehler.
Um dieses Problem zu überwinden, sollten Sie entweder vermeiden Typen Umwandlung den genauen Image
Typs über Verwendung von Bilddaten zu repräsentieren oder die Bindung Standard-Patch wie folgt:
public class Person {
public byte[] Photo { get; set; }
}
//...
gridView1.OptionsBehavior.EditingMode = DevExpress.XtraGrid.Views.Grid.GridEditingMode.EditForm;
gridView1.EditFormPrepared += gridView1_EditFormPrepared;
gridControl1.DataSource = new List<Person> {
new Person()
};
//...
void gridView1_EditFormPrepared(object sender, DevExpress.XtraGrid.Views.Grid.EditFormPreparedEventArgs e) {
var binding = e.BindableControls["Photo"].DataBindings["EditValue"];
binding.Parse += binding_ParseImageIntoByteArray;
}
void binding_ParseImageIntoByteArray(object sender, ConvertEventArgs e) {
Image img = e.Value as Image;
if(img != null && e.DesiredType == typeof(byte[])) {
using(var ms = new System.IO.MemoryStream()) {
img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
// get bytes
e.Value = ms.GetBuffer();
}
}
}
sehr klar. Vielen Dank. aber ich verwende Entity-Framework, um die Grid-Ansicht zu füllen. Soll ich jetzt meinen Spaltentyp von Bild zu Byte in der Datenbank ändern? oder sollte ich gerade meine Entity Framework-Klasse "Person" bearbeiten? Gibt es einen einfacheren Weg? –
Bilder werden als Byte im DB gespeichert? –
Es gibt eine dritte mögliche Lösung für Sie: Sie können eine Wrapper-Eigenschaft schreiben (ich schlage vor, die partielle Klasse Ansatz zu verwenden), die nicht DB-Feld zugeordnet ist und diese Eigenschaft für die Bindung verwenden. Innerhalb dieses Wrappers können Sie die Konvertierung durchführen. – DmitryG