عدم نمایش عکس در دیتاگرید ویو در wpf
سلام
من تصویر تو sql ذخیره کردم اونجا به صورت <databinary>ذخیره شده وقتی میخوام تو دیتاگرید ویو نمایش بدم عکس را نشان نمیدهد در محیط wpf انجام دادم ازbinding استفاده کردم ممنون میشم راهنمایی کنید
پاسخ هوش مصنوعی
برای نمایش تصویر ذخیره شده به صورت varbinary
در SQL Server در یک DataGrid
در WPF، شما نیاز دارید تا تصویر را به یک نوع قابل استفاده در XAML تبدیل کنید. یکی از روش های معمول این است که تصویر را به یک ImageSource
تبدیل کنید.
در اینجا چند مرحله کلیدی برای انجام این کار وجود دارد:
- ابتدا مطمین شوید که داده های تصویر را از پایگاه داده به درستی بازیابی کرده اید.
- سپس یک تابع برای تبدیل داده های باینری تصویر به
ImageSource
ایجاد کنید.
در زیر یک کد نمونه برای تبدیل داده ها و نمایش تصویر در DataGrid
آورده شده است:
using System;
using System.Data;
using System.IO;
using System.Windows.Media;
using System.Windows.Media.Imaging;
public ImageSource ConvertBytesToImage(byte[] imageData)
{
using (MemoryStream ms = new MemoryStream(imageData))
{
BitmapImage image = new BitmapImage();
image.BeginInit();
image.StreamSource = ms;
image.CacheOption = BitmapCacheOption.OnLoad;
image.EndInit();
image.Freeze(); // Optional: Freezes the image for cross-thread access.
return image;
}
}
// فرض کنید که شما یک DataTable با عکس ها دارید.
DataTable dataTable = new DataTable();
// فرض کنید dataTableAVE کلید نوع تصویر را دارد
dataTable.Columns.Add("Image", typeof(byte[]));
// برای هر ردیفی که می خواهید نمایش دهید، شما می توانید یک خانه تصویر را خالی کنید یا پر کنید.
foreach (DataRow row in dataTable.Rows)
{
byte[] imageBytes = (byte[])row["Image"]; // دریافت داده باینری تصویر
row["Image"] = ConvertBytesToImage(imageBytes); // تبدیل به ImageSource
}
// بعد از آماده سازی، DataGrid را به سمت DataTable بایند کنید.
myDataGrid.ItemsSource = dataTable.DefaultView;
سپس در XAML، می توانید با استفاده از یک قالب برای ستون DataGrid
تصاویر را نمایش دهید:
<DataGrid x:Name="myDataGrid">
<DataGrid.Columns>
<DataGridTemplateColumn Header="تصویر">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding Image}" Width="100" Height="100" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
با این کار می توانید تصاویر را به درستی در DataGrid
نمایش دهید.
سلام لطفا کدهای xaml خودتون رو قرار بدید تا مشخص بشه چه کدهایی نوشته شده
دقت کنید کدهایی که مربوط به ستون نمایش تصویر هست رو قرار بدید. کدها رو با استفاده از دکمه کد در ادیتور قرار بدید
<DataGridTemplateColumn Header="تصویر">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<Image Width="70" Height="70" Source="{Binding Studant_Image}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.HeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="FontFamily" Value="B titr"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
</Style>
</DataGridTemplateColumn.HeaderStyle>
</DataGridTemplateColumn>
با سلام. دوست گرامی مشکل شما به خاطر اینه که شما در خط دوم از کد CellEditingTemplate استفاده کردید. این یعنی اینکه شما زمانی تصویر رو میبینید که به حالت Edit سلول برید. برای حل این مشکل این قسمت را به CellTemplate تغییر دهید. یعنی در نهایت باید کد شما به صورت زیر باشد.
<DataGridTemplateColumn Header="تصویر">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Width="70" Height="70" Source="{Binding Studant_Image}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.HeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="FontFamily" Value="B titr"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
</Style>
</DataGridTemplateColumn.HeaderStyle>
</DataGridTemplateColumn>
با سلام
کد خط دوم را به CellTemplate تغییر دادم ولی باز نمایش داده نمی شود.ممنون بابت راهنمایی .
دوست عزیر شما در قسمت بایند ستون Studant_Image رو نوشتید. چک بفرمایید که با نام تیبل یا ویوی شما مطابقت داشته باشه.
دقیقا از ویو کپی کردم اوردم
نوع فیلد دیتابیس رو چی قراد دادید؟ Picture یا binary ؟
باید Picture باشه.
در ضمن اگر از مدل داده ای استفاده میکنید. یکبار مدلتون رو آپدیت کنید شاید تغییرات دیتابیس تو مدل به روزرسانی نشده. بهترش اینه ویوی مورد نظرتونو از مدل داده ای پاک کنید و دوباره اضافه کنید.
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- Library Animation برای کنترلهای WPF
- مشکل در تغییر مقدار Text کنترل RibbonBar در کامپوننت DevExpress
- قرار دادن مقادیر ارسالی یک ستون از جدول به صورت سطری در استیمول
- مشخص کردن حداقل تعداد کاراکتر در تکست باکس wpf