مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

ehsan_zanganeh

عضویت از 1395/12/13

بازیابی تصویر از دیتابیس و نمایش در GridView بدون Generic Handler

  • جمعه 25 فروردین 1396
  • 21:06
تشکر میکنم

سلام

اطلاعات مربوط به کالا و تصاویر آنها را در دیتابیس بصورت Image ذخیره می کنم و یه تابع دارم که این تصویر رو بازیابی میکنه و هرجا که بخوام نمایش بده
حالا می خوام از همین تابع استفاده کنم و توی Gridview نمایش بدم اما نمیشه


dim img As Image
.
.
.دستورات sql و بازیابی اطلاعات از دیتابیس در datatable
.
.
Dim bytes As Byte() = datatable.Rows(0)(img_colm_name)
            Dim base64String As String = Convert.ToBase64String(bytes, 0, bytes.Length)

            img.ImageUrl = Convert.ToString("data:image/png;base64,") & base64String

پاسخ های این پرسش

تعداد پاسخ ها : 9 پاسخ
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • شنبه 26 فروردین 1396
  • 08:46

این لینک رو ببینید

کاربر سایت

ehsan_zanganeh

عضویت از 1395/12/13

  • شنبه 26 فروردین 1396
  • 18:21

با سلام

این روش رو توی همین سایت آموزش داده بودید و من دیدم

اما من اطلاعات ام رو توی data table  ریختم و عنوان ستون ها رو به فارسی تغییر دادم و GridView من هیچ ستونی نداره و در کد نویسی فقط datatable بهش bind میشه . من میخواستم یه datafild از نوع image بسازم و imageurl اون رو با این تابع بدست بیارم و در GridView نمایش بدم

این تعریف gridview هستش
<asp:GridView ID="GridView1" runat="server" CellPadding="4" ForeColor="#333333" 
                                GridLines="None" Height="100%" Width="100%" Font-Names="Tahoma">
                         <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
                         <EditRowStyle BackColor="#999999" />
                         <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                         <HeaderStyle BackColor="#5D7B9D" Font-Bold="False" ForeColor="White" 
                                Font-Names="Tahoma" />
                         <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
                         <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
                         <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
                         <SortedAscendingCellStyle BackColor="#E9E7E2" />
                         <SortedAscendingHeaderStyle BackColor="#506C8C" />
                         <SortedDescendingCellStyle BackColor="#FFFDF8" />
                         <SortedDescendingHeaderStyle BackColor="#6F8DAE" />
                 </asp:GridView>

 GridView1.DataSource = datatable_temp
        GridView1.DataBind()

جالبه که همه فیلد هارو نشون میده به غیر از image

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • شنبه 26 فروردین 1396
  • 18:29

شما تصویر را دربانک ذخیره کردید

چگونه میخواهید آدرس بدید وقتی روی مسیر فیزیکی نیست ؟

کاربر سایت

ehsan_zanganeh

عضویت از 1395/12/13

  • شنبه 26 فروردین 1396
  • 19:11

خب من در جاهای دیگه هم تصویر در مسیر فیزیکی نیست و  تصویر رو از بانک بازیابی می کنم و از روش زیر نمایش می دم

                                 Dim bytes As Byte() = datatable.Rows(0)(img_colm_name)
            Dim base64String As String = Convert.ToBase64String(bytes, 0, bytes.Length)
               img.ImageUrl = Convert.ToString("data:image/png;base64,") & base64String

کاربر سایت

ehsan_zanganeh

عضویت از 1395/12/13

  • شنبه 26 فروردین 1396
  • 19:39

توی کد شما برای نمایش تصویر به یک صفحه دیگه میره و از توی اون صفحه دوباره اطلاعاتی رو که یک بار آورده رو بازیابی می کنه و با شیء Response نمایش میده

خب نمیشه بجای کد زیر

                                                                                                                                                                                                                            <ItemTemplate>  
                                                <asp:Image ID="Image1" runat="server" ImageUrl='<%# "Handler.ashx?Id="+ Eval("kala_id") %>' Height="150px" Width="150px" />  
                                                                                                                                                                                                                           </ItemTemplate>  
این رو  در  کد نویسی ایجاد کنیم و با کد زیر تصویر نشون بدیم

                                 Dim bytes As Byte() = datatable.Rows(0)(img_colm_name)
            Dim base64String As String = Convert.ToBase64String(bytes, 0, bytes.Length)
               Image1.ImageUrl = Convert.ToString("data:image/png;base64,") & base64String

کاربر سایت

ehsan_zanganeh

عضویت از 1395/12/13

  • شنبه 26 فروردین 1396
  • 22:14

یه نگاهی به این لینک بندازید

http://www.beansoftware.com/ASP.NET-Tutorials/Images-Database.aspx

اینکار رو انجام دادم و تصویر رو نشون میده

کاربر سایت

ehsan_zanganeh

عضویت از 1395/12/13

  • شنبه 26 فروردین 1396
  • 22:21

اما همچنان من می خوام به روش زیر اینکار رو انجام بدم ولی نمایش نمیده............................باز هم تکرار میکنم که با روش زیر من تصویر رو در تگ img نمایش میدم و هیچ مشکلی هم نداره

.
.
.
                                                                           
        da.Fill(ds)
        ds.Tables(0).Columns.Add("imgFile")

        For Each tempRow As DataRow In ds.Tables(0).Rows
            bytes = tempRow.Item("kala_abad1")
            base64String = Convert.ToBase64String(bytes, 0, bytes.Length)

            tempRow.Item("imgFile") = (Convert.ToString("data:image/png;base64,") & base64String)
        Next

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • شنبه 26 فروردین 1396
  • 22:31

شما ابتدا باید تصویر را در مسیر فیزیکی ذخیره کنید و بعد آدرس تصویر را استفاده کنید

در کد های شما مستقیم بایند کردید

کاربر سایت

ehsan_zanganeh

عضویت از 1395/12/13

  • دوشنبه 28 فروردین 1396
  • 00:08

با سلام و تشکر

با کنترل DataList اینکار رو انجام دادم و هیچ مشکلی نداشت و به راحتی تصویر رو نمایش میده

تعریف DataList و قراردادن دو تا فیلد از نوع lable و image
            CellPadding="0" GridLines="Both" Height="100%" Width="100%">  
            <HeaderTemplate>DataList Control</HeaderTemplate>  
            <HeaderStyle BackColor="Gray" Font-Bold="true" HorizontalAlign="Center" Font-Size="X-Large" />  
            <ItemTemplate>  
                <div>  
                    <table style="width: 100%; text-align: center; border-color: red;">  
                        <tr>  
                            <td>  
                                <asp:Image ID="img" runat="server" ImageUrl='<%#Eval("imgFile") %>' Width="30" Height="30" />  
                            </td>  
                        </tr>  
                        <tr>  
                            <td>  
                                <asp:Label ID="Label1" runat="server" Text='<%#Eval("kala_code") %>'></asp:Label>  
                           </td>  
                        </tr>  
                     </table>  
                </div>  
            </ItemTemplate>  

در قسمت pageload همون دستورات قبل رو استفاده کردم

s)
        ds.Tables(0).Columns.Add("imgFile")

        For Each tempRow As DataRow In ds.Tables(0).Rows
            bytes = tempRow.Item("kala_abad1")
            base64String = Convert.ToBase64String(bytes, 0, bytes.Length)

            tempRow.Item("imgFile") = (Convert.ToString("data:image/png;base64,") & base64String)
        Next

DataList1.DataSource = ds
        DataList1.DataBind()

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)