0 امتیاز

سلام خدمت اساتید گرامی

بنده یک برنامه مدیریت باشگاه ورزشی با C# پیاده سازی کردم که پروژه دانشگاهم هستش . تصاویر رو ازطریق فرم ثبت نام از کاربر میگیره و بصورت ارایه بایت در دیتابیس ذخیره میکنه، تا اینجا که مشکلی نداره!

 

حالا در فرم نمایش لیست اعضا یک دیتاگرید ویو ساختم که وقتی کاربر روی هر سطر از دیتاگرید کلیک میکنه تکست باکس های پایین پربشه و تصویرشو براساس id از دیتابیس بخونه و در picturebox نمایش بده.

ولی فقط متن هارو میخونه و در picturebox فقط آخرین عکس اضافه شده به دیتابیس رو برای همه سطرها لود میکنه(یعنی نمیتونه براساس id هر سطر عکس رو بخونه) میخوام تصویر مخصوص هر کاربر رو بیاره تو picturebox.

 

پ.ن : تمام تاپیک های مربوط به این مشکل رو خوندم ولی کدها برای من کارنکرد! اگه ممکنه روی کد خودم اعمال کنید تغییرات رو . خیلی ممنونم!

 

تصویر : http://uupload.ir/files/9ptj_capture.png

 

کد تابع خواندن تصویر از دیتابیس:

 

void Showpic()
        {
            sqlcon = new SqlConnection("data source=. ; initial catalog=GYMDB ; integrated security=true");
            sqlcon.Open();
            sqlcom = new SqlCommand("select avatar_pic from Members", sqlcon);
            ds.Clear();

            sqlcom.Parameters.AddWithValue("@p1", dataGridViewX1.SelectedRows.ToString());

            byte[] myarray = null;
            SqlDataReader DataR = sqlcom.ExecuteReader();

            if (DataR.HasRows)
            {
                while (DataR.Read())
                {
                    myarray = (byte[])DataR["avatar_pic"];
                }
            }
            DataR.Close();

            System.IO.MemoryStream mymemory = new System.IO.MemoryStream(myarray);

            pictureBox1.Image = Image.FromStream(mymemory);
            sqlcom.ExecuteNonQuery();
            sqlcon.Close();


        }

 

2 پاسخ

+2 امتیاز

سلام

پ.ن : تمام تاپیک های مربوط به این مشکل رو خوندم ولی کدها برای من کارنکرد! اگه ممکنه روی کد خودم اعمال کنید تغییرات رو . خیلی ممنونم!

این عین مطلب شماست حداقل پروژه رو نذاشتید کدهای همین صفحه رو میذاشتید ببنیم چی به چیه

داخل باتن مربوطه این کد رو بزارید فقط شماره ردیف ستون تصویر رو داخل "cell" بزارید

و حالت انتخابی دیتاگرید رو روی fullrowselect بزارید

DataGridViewRow row;
            row = dataGridView1.CurrentRow;
            byte[] pic = (byte[])row.Cells[5].Value;
            MemoryStream ms = new MemoryStream(pic);
            pictureBox1.Image = Image.FromStream(ms);

 

ممنونم از راهنماییتون

نوع فیلد تصویر در دیتابیس (varbinary-MAX) هستش و دربرنامه تو یه پیکچرباکس نشون داده میشه البته بدون باتن باید باشه! باید به محض کلیک روی هر row تصویر تو پیکچرباکس لود بشه.

 

درضمن avatar_pic نام فیلد تصویر در دیتابیس هستش! توی دیتاگرید ستون عکس نداره و باید براساس شناسه هر ردیف که در دیتابیس ID تعریف کردم تصویر موردنظر رو بخونه.

توسط (105 امتیاز) 3

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

 

برای نمایش تصویر وقتی روی دیتاگرید کلیک کردی باید به این شکل عمل کنید 

از رویدادهای دیتاگرید روی dataGridView_CellClick کلیک کنید و یه رویداد کلیک ایجاد کن و این کد رو داخلش بزاید

این لینک رو نگاه کنید

http://www.w3-farsi.com

 

MemoryStream mmst = new MemoryStream();
            pictureBox1.Image.Save(mmst, pictureBox1.Image.RawFormat);
            byte[] img = mmst.ToArray();
            dataGridView1.Rows.Add(img);

 

توسط (7,164 امتیاز) 4 7 141
+3 امتیاز
سلام دوست عزیز .

من به شما پیشنهاد میکنم یک پوشه برای عکس کاربران اختصاص بدید و آدرس عکس رو داخل دیتابیس خودتون ذخیره کنید و زمانی که بر روی هر آیتمی یا سلولی کلیک کردید PictureBox بیاد لینک آدرس عکس خودشو از اون مسیر بگیره . خیلی هم راحته . من قبلاً درست کردم .

و اینم بگم که یه Random تعریف کن تا هر عکس با یه کد خاص خودش ذخیره بشه و بدون تکرار یا از کدملی برای ذخیره نام عکس ها استفاده کن . اینجوری دیتابیست هم شلوغ نمیشه !
سوال جدید

2,337 سوال

2,871 پاسخ

3,725 دیدگاه

3,919 کاربر

دسته بندی ها

...