دسته بندی ها
21:54 1398/07/13

عدم نمایش عکس در دیتاگرید ویو در wpf

مشخصات سوال کننده :
کاربر : rezajavaheri68     امتیاز کاربر : 0     رتبه کاربر : 7063
دسته بندی : سی شارپ

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 3113
هوش مصنوعی

پاسخ هوش مصنوعی

برای نمایش تصویر ذخیره شده به صورت varbinary در SQL Server در یک DataGrid در WPF، شما نیاز دارید تا تصویر را به یک نوع قابل استفاده در XAML تبدیل کنید. یکی از روش های معمول این است که تصویر را به یک ImageSource تبدیل کنید.

در اینجا چند مرحله کلیدی برای انجام این کار وجود دارد:

  1. ابتدا مطمین شوید که داده های تصویر را از پایگاه داده به درستی بازیابی کرده اید.
  2. سپس یک تابع برای تبدیل داده های باینری تصویر به 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 نمایش دهید.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : saedbfd 23:24 1398/07/26

سلام لطفا کدهای xaml خودتون رو قرار بدید تا مشخص بشه چه کدهایی نوشته شده

دقت کنید کدهایی که مربوط به ستون نمایش تصویر هست رو قرار بدید. کدها رو با استفاده از دکمه کد در ادیتور قرار بدید

 

به این پاسخ امتیاز بدهید    1
امتیاز: 1664 رتبه: 1
پاسخ دهنده : rezajavaheri68 23:24 1398/07/26
<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>

 

به این پاسخ امتیاز بدهید    0
امتیاز: 0 رتبه: 7063
پاسخ دهنده : Sowgandi 23:24 1398/07/26

با سلام. دوست گرامی مشکل شما به خاطر اینه که شما در خط دوم از کد 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>

 

به این پاسخ امتیاز بدهید    1
امتیاز: 876 رتبه: 3
پاسخ دهنده : rezajavaheri68 23:24 1398/07/26

با سلام

کد خط دوم را به CellTemplate تغییر دادم ولی باز نمایش داده نمی شود.ممنون بابت راهنمایی .

به این پاسخ امتیاز بدهید    0
امتیاز: 0 رتبه: 7063
پاسخ دهنده : Sowgandi 23:24 1398/07/26

دوست عزیر شما در قسمت بایند ستون Studant_Image رو نوشتید. چک بفرمایید که با نام تیبل یا ویوی شما مطابقت داشته باشه.

به این پاسخ امتیاز بدهید    2
امتیاز: 876 رتبه: 3
پاسخ دهنده : rezajavaheri68 23:24 1398/07/26

دقیقا از ویو کپی کردم اوردم

به این پاسخ امتیاز بدهید    0
امتیاز: 0 رتبه: 7063
پاسخ دهنده : Sowgandi 23:24 1398/07/26

نوع فیلد دیتابیس رو چی قراد دادید؟ Picture یا binary ؟

باید Picture باشه.

در ضمن اگر از مدل داده ای استفاده میکنید. یکبار مدلتون رو آپدیت کنید شاید تغییرات دیتابیس تو مدل به روزرسانی نشده. بهترش اینه ویوی مورد نظرتونو از مدل داده ای پاک کنید و دوباره اضافه کنید.

 

به این پاسخ امتیاز بدهید    1
امتیاز: 876 رتبه: 3
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود