نمایش نتایج 1 تا 26 از 26

نام تاپیک: مشکل در نمایش عکس موجود در دیتابیس بر روی فرم

  1. #1

    Tick مشکل در نمایش عکس موجود در دیتابیس بر روی فرم

    برای نمایش عکس موجود در رکورد انتخاب شده از DataGrid به فرم از این کد استفاده کردم:

    PicBox1.Image = DataGrid1.CurrentRow.Cells("pic").Value

    که در زمان اجرا پیغام خطا داد
    از چه کدی باید استفاده کرد؟

  2. #2
    کاربر دائمی آواتار ghafoori
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    اصفهان-نجف اباد
    پست
    1,111

    Smile

    دوست عزیز خطا را هم بنویسید

  3. #3
    InvalidCastException was unhandled
    Unable to cast object of type 'System.Byte[]' to type 'System.Drawing.Image'.

  4. #4
    کاربر دائمی
    تاریخ عضویت
    مهر 1385
    محل زندگی
    تبریز
    پست
    144
    منبع: http://planet-source-code.com
    فایل های ضمیمه فایل های ضمیمه

  5. #5
    ممنون از شما
    اما من نیاز به Bind کردن فیلدها ندارم
    من فقط می خوام اطلاعات فیلدهای رکوردی که الآن کاربر در DataGrid انتخاب کرده رو در فرم نمایش بدم
    برای نمایش مقدارهای Text مشکلی نیست و با گذاشتن این کد در رویداد CellEnter مربوط به DataGrid به نتیجه رسیدم:

    TextBox1.Text = DataGrid1.CurrentRow.Cells("FieldName").Value

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

  6. #6
    کاربر دائمی آواتار ghafoori
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    اصفهان-نجف اباد
    پست
    1,111
    دوست عزیز شما باید ارایه ای از byte را به عکس تبدیل کنید برای این کار من این را پیش نهاد می دم

    Dim b(100) As Byte
    Dim s As IO.Stream
    s.Write(b, 0, b.Count)
    Dim i As Image = Image.FromStream(s)


    این کد یک ارایه از بایت را به عکس تبدیل می کند

  7. #7
    متاسفانه من از این کد چیزی متوجه نشدم!
    ببخشید، مبتدی هستیم دیگه!

    اما یه سرچ تو انجمن کردم یه نفر یه روشی رو به طور کلی معرفی کرد، اونم این بود که:
    از داخل DataGrid با استفاده از شماره یا id رکورد انتخاب شده و یه دستور SELECT مقدار فیلد تصویر اون رکورد رو (همون عکس مورد نظر ما) بدست بیاریم
    و فیلد بدست اومده رو با Bind کردن به یه PictureBox روی فرم نمایش بدیم
    من هم از همین روش استفاده کردم و در رویداد CellEnter مربوط به DataGrid از این کد استفاده کردم:
    (مقدار Label1 همون id بدست اومده هست)

    objCommand = New OleDbCommand("SELECT pic FROM info WHERE id=@id", objConnection)
    objDataAdapter = New OleDbDataAdapter(objCommand)
    objDataSet = New DataSet
    objCommand.Parameters.Clear()
    objCommand.Parameters.AddWithValue("id", Label1.Text)
    objCommand.CommandType = CommandType.Text
    objDataAdapter.Fill(objDataSet, "info")
    objDataView = New DataView(objDataSet.Tables("info"))
    PicBox1.DataBindings.Clear()
    PicBox1.DataBindings.Add("Image", objDataView, "pic")

    اما تو خط آخر این پیغام خطا رو میده:
    Cannot format the value to the desired type.

    فکر کنم خطا رو تو قسمت ("Image", می گیره، چون من از همین روش برای نمایش مقدارهای Text استفاده کردم و جواب داد
    به جای Image چه مقداری باید گذاشت؟

  8. #8
    کاربر دائمی آواتار ghafoori
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    اصفهان-نجف اباد
    پست
    1,111

    Smile

    در این روش جدول و picturebox به یک منبع داده متصل میشود با حرکت داخل منبع داده توسط جدول عکس picturebox هم عوض می شود البته من خودم این کار را امتحان نکردم
    در کورد کد من هم خروجی سلول ارایه از بایت است درجالی که picturebox ورودی عکس میخواهد که با کد بالا می توانی تبدیل کنی

  9. #9
    کاربر دائمی
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    بندرعباس
    پست
    236
    PicBox1.Image = DataGrid1.CurrentRow.Cells("pic").Value
    اینو امتحان کن ببین جواب میده
    PicBox1.Image = image.fromstream(DataGrid1.CurrentRow.Cells("pic")  .Value)

  10. #10

    Unhappy

    نقل قول نوشته شده توسط visual_sadegh مشاهده تاپیک
    اینو امتحان کن ببین جواب میده
    PicBox1.Image = image.fromstream(DataGrid1.CurrentRow.Cells("pic")  .Value)
    این پیغام خطا رو میده:
    Unable to cast object of type 'System.Byte[]' to type 'System.IO.Stream'.

  11. #11
    نقل قول نوشته شده توسط ghafoori مشاهده تاپیک
    در کورد کد من هم خروجی سلول ارایه از بایت است درجالی که picturebox ورودی عکس میخواهد که با کد بالا می توانی تبدیل کنی
    اگه امکان داره کمی بیشنر توضیح بدید
    از چه کدی و چطور باید استفاده کنم
    ممنون

  12. #12

    Unhappy

    یعنی هیچ راهی برای این کار نیست؟
    برای پروژه پایان ترم لازم دارم
    لطفآ راهنمایی کنید

  13. #13
    کاربر دائمی آواتار ghafoori
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    اصفهان-نجف اباد
    پست
    1,111
    کد
     Dim b() As Byte = Me.DataGridView1.CurrentRow.Cells("pic").Value()
    Dim s As IO.Stream
    s.Write(b, 0, b.Length)
    Dim i As Image = Image.FromStream(s)

  14. #14
    وقتی این کد رو وارد ادیتور کردم در خط سوم قسمت s.Write زیر s یک هاشور سبز کشیده میشه و با نگه داشتن ماوس روی اون این پیغام رو نشون میده:
    Variable 's' is used before it has been assigned a value. A null reference exception could result at runtime.

    و موقع اجرا این پیغام خطا رو میده:
    Object reference not set to an instance of an object.

    من کدها رو در رویداد CellEnter مربوط به DataGrid قرار دادم

  15. #15
    کاربر دائمی آواتار ghafoori
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    اصفهان-نجف اباد
    پست
    1,111
    کد زیر را جایگزین کنید
       Dim b() As Byte = Me.DataGridView1.CurrentRow.Cells("pic").Value()
    Dim s As New IO.MemoryStream
    s.Write(b, 0, b.Length)
    Dim i As Image = Image.FromStream(s)

  16. #16
    موقع اجرا در خط آخر قسمت i As Image = Image.FromStream(s) این خطا رو میده:
    Parameter is not valid.

  17. #17
    کاربر دائمی آواتار ghafoori
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    اصفهان-نجف اباد
    پست
    1,111

    Smile

    من هم هرچی ور رفتم نتونستم درستش کنم اخر هم picturebox و گرید را با هم به یک منبع وصل کردم این هم پروژهWindowsApplication1.zip

  18. #18

    Unhappy

    ممنونم جناب ghafoori که پیگیر مشکل من بودید

    من حتی با Bind کردن هم نتونستم عکس داخل جدول رو برروی فرم نمایش بدم
    از دوستان کسی نیست که روشی برای انجام این کار پیشنهاد کنه؟

  19. #19
    کاربر دائمی
    تاریخ عضویت
    مهر 1386
    محل زندگی
    c:\windows\system32
    پست
    218
    میتونی عکسها رو تو یه فلدر جمع کنی و فقط آدرس هر عکس رو به دیتاباست بدی که بره لودش کنه خیلی راحت!
    من خودم تو یکی از کارام همینو انتخاب کردم

  20. #20
    کاربر دائمی
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    بندرعباس
    پست
    236
    فکر کنم بهتره سورس برنامه رو آپلود کنی تا بهتر بتونیم کمکت کنیم

  21. #21
    کاربر دائمی آواتار Evil 69
    تاریخ عضویت
    خرداد 1386
    محل زندگی
    كمي دور تر از آنجا
    پست
    272
    سلام
    شما اگر توی اون سلول از دیتا گرید تون آدرس اون عکس رو هم دارین خوب دیگه کاری نداره شما میتونین به جای اینکه بنویسین fromstream مینویسین fromfile و بعد آدرس عکسی که توی اون سلول دارین حالا منطقی اینه که برنامه بره توی سیستم و اون آدرس رو ژیدا کنه و بعد عکس رو لود کنه توی picturebox

  22. #22
    راستش امروز رفتم دانشگاه واسه تحویل پروژه استادمون نیومد، گفتند برید هفته بعد بیاید
    خوشبختانه یک هفته وقت نصیبمون شد، می تونم بیشتر رو پروژه کار کنم

    خدمت دوستان یه توضیحات کلی بدم که دیگه سوالی باقی نمونه
    فرض کنید یک جدول داریم به نام Info، شامل سه فیلد Name , Family , Pic که عکس های ما در فیلد Pic ذخیره می شوند

    من با کد زیر عکس مورد نظر رو از هارد، داخل PictureBox لود می کنم:

    With OpenPictureDialog1
    .Filter = "Image File (*.jpg)|*.jpg"
    .FilterIndex = 1
    .Title = "وارد کردن تصویر"
    End With
    If OpenPictureDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
    PictureBox1.Image = System.Drawing.Image.FromFile(OpenPictureDialog1.F ileName)
    End If
    و بعد با یک دستور INSERT مقدار داخل PictureBox (که همون عکس ما هست) رو به جدول می فرستم و در فیلد Pic ذخیره می شود

    همونطور که شما بهتر از من می دونید، با کد زیر می شود فرضآ مقدار TextBox1.Text رو به مقدار فیلد Name در جدول، Bind کرد و بر روی فرم نمایش داد:

    TextBox1.DataBindings.Add("Text", objDataView, "Name")
    اما من از همین روش برای نمایش عکس موجود در جدول استفاده کردم که خطا داد

    ضمنآ دوستانی که پیشنهاد لود شدن عکس از روی آدرس اون رو دادند باید بگم که من از این روشی که گفتم برای ذخیره عکس در جدول استفاده کردم
    نمی دونم با این روش آیا آدرس عکس هم ذخیره می شه یا نه
    اگه امکانش هست کمی بیشتر و به همراه کد این روش رو توضیح بدید
    ممنون

  23. #23
    کاربر دائمی آواتار khz-web1
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    اهواز
    پست
    614
    دوست عزیز من یک روش بهت پیشنهاد می کنم(ولی بهش زیاد اعتماد ندارم)

    2تا فیلد بزار روی فرمت ، بیا اول با دستور mapath.save اونو تو یه فولدر ذخیره کن (مثلا image)
    و بعد در فیلد دوم آدرس اون فولد رو بده(مثلا image/photo.jpg)
    و با زدن دکمه ی insert هم عکست میره تو فولدر image هم آدرست تو بانک ذخیره میشه .... و واسه نمایش هم راحتر می تونی عمل کنی
    من یه مقاله واسه چاپ عکس از بانک در grid view (البته تحت وب) نوشتم ، که می تونی اونو از آدرس زیر در یافت کنید
    http://blog.poyesh.ir/?do=cat&category=learns-asp.net
    امید وارم بدرتون خورده باشه

  24. #24
    ممنونم جناب khz-web1
    اما من یک آموزش برای VB.NET میخواهم

    دوستان لطفآ اگه امکان داره روش ذخیره کردن آدرس فایل و لود کردن فایل از آدرس آون رو آموزش بدید
    ممنون میشم

  25. #25
    کاربر دائمی
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    بندرعباس
    پست
    236
    سلام
    امید وارم این به کارت بیاد و این تاپیک حل بشه
    فایل های ضمیمه فایل های ضمیمه

  26. #26
    تشکر از همه دوستان مخصوصآ جناب visual_sadegh زحمت کشیدید دست همتون درد نکنه

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •