سلام (برای این سوال 50 هزار تومان 💲💲💲 پاداش نقدی کارت به کارت می کنم)
اصل سوال رو به همراه تصاویر برنامه در وب گاه پرسش و پاسخ Microsoft قرار دادم این هم پیوند سوالم حتماً ببینید.
من یک DataGrid (نه DataGridView) دارم که 18 تا ستون داره (از 0 تا 17) ، که ستون آخر اون از نوع system.windows.controls.image است و بدون هیچ مشکلی تصویر در اون قرار می گیره حالا من نیاز دارم که ردیف های DataGrid رو درون DataTable قرار بدم ، به غیر از ستون آخر ، می تونم مقادیر تمامی ستون ها رو دریافت کنم برای ستون آخر هم کد هایی نوشتم اما مقداری بر نمی گردونه (خطا Null نمیده اما مقدار هم بر نمی گردونه) اگر کسی می تونه کمک کنه ممنون میشم.
DataTable BookDT = new DataTable();
public MainWindow()
{
InitializeComponent();
BookDT.Columns.Clear();
BookDT.Columns.Add("BookName", typeof(string));
BookDT.Columns.Add("Publisher", typeof(string));
BookDT.Columns.Add("Category", typeof(string));
BookDT.Columns.Add("BookCode", typeof(string));
BookDT.Columns.Add("Inventory", typeof(string));
BookDT.Columns.Add("DateTaken", typeof(string));
BookDT.Columns.Add("RecipientName", typeof(string));
BookDT.Columns.Add("ReturnDate", typeof(string));
BookDT.Columns.Add("ReleaseDate", typeof(string));
BookDT.Columns.Add("BookLanguage", typeof(string));
BookDT.Columns.Add("Length", typeof(string));
BookDT.Columns.Add("Form", typeof(string));
BookDT.Columns.Add("Translator", typeof(string));
BookDT.Columns.Add("Narrator", typeof(string));
BookDT.Columns.Add("ISBN", typeof(string));
BookDT.Columns.Add("Location", typeof(string));
BookDT.Columns.Add("Price", typeof(string));
BookDT.Columns.Add("BookImage", typeof(byte[]));
}
public BitmapImage ConvertWriteableBitmapToBitmapImage(WriteableBitmap wbm)
{
BitmapImage bmImage = new BitmapImage();
using (System.IO.MemoryStream stream = new System.IO.MemoryStream())
{
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(wbm));
encoder.Save(stream);
bmImage.BeginInit();
bmImage.CacheOption = BitmapCacheOption.OnLoad;
bmImage.StreamSource = stream;
bmImage.EndInit();
bmImage.Freeze();
}
return bmImage;
}
public DataTable DataGridToDataTable(DataGrid DG, DataTable DT, byte NumberOfColumns, byte VisualColumnIndex)
{
for (int i = 0; i < DG.SelectedItems.Count - 1; i++)
{
for (byte j = 0; j < NumberOfColumns; j++)
{
DT.Rows.Add(DG.SelectedItems[i]);
switch (j == VisualColumnIndex)
{
case true:
Image TempImage = new Image() { Source = (VisualTreeHelper.GetChild(DG.Columns[j].GetCellContent(DG.SelectedItems[i]), 0) as Image).Source };
DT.Rows[i][j] = ImageToBytes(ConvertWriteableBitmapToBitmapImage(new WriteableBitmap((BitmapSource)TempImage.Source)));
break;
default:
DT.Rows[i][j] = (((DG.Columns[j].GetCellContent((DataGridRow)DG.ItemContainerGenerator.ContainerFromIndex(i))) as TextBlock).Text).ToString();
break;
}
}
}
return DT;
}
و به شکل زیر از متدم استفاده می کنم:
BookDT = DataGridToDataTable(BookDataGrid, BookDT, 18, 17);
تـــــوجه: از برنامه خروجی بگیرید بعد پاسخ بفرستید تا امتیاز دریافت کنید (پاسخ الکی ندهید)
با تشکــر