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);

 

سلام ، ممنونم ولی از کد شماهم استفاده میکنم بازم خطا میده!

 

این سورس  فرمم هستش :


namespace gym_management
{
    public partial class Member_List : Form
    {
        DataTable Dtlist;

        SqlCommand cmd = new SqlCommand();
        public SqlConnection sqlcon;
        public SqlCommand sqlcom;
        public SqlDataAdapter sqlda;

        public DataSet ds = new DataSet();

        public Member_List()
        {
            InitializeComponent();
        }



        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();


        }
        private void Member_List_Load(object sender, EventArgs e)
        {
            SqlConnection myconnection = new SqlConnection();
            myconnection.ConnectionString = ("data source=. ; initial catalog=GYMDB ; integrated security=true");

            SqlCommand mycommand = new SqlCommand();
            mycommand.Connection = myconnection;
            mycommand.CommandText = "Select * from [Members]";

            DataTable mydatatable = new DataTable();
            SqlDataAdapter mydataadapter = new SqlDataAdapter();
            mydataadapter.SelectCommand = mycommand;
            mydataadapter.Fill(mydatatable);

            dataGridViewX1.AutoGenerateColumns = false;
            dataGridViewX1.DataSource = mydatatable;
            FillTextBoxes();

        }


        private void dataGridViewX1_MouseClick(object sender, MouseEventArgs e)
        {
            FillTextBoxes();
            Showpic();
        }


        private void dataGridViewX1_KeyDown(object sender, KeyEventArgs e)
        {
            FillTextBoxes();
            Showpic();
        }
    }
}
توسط (105 امتیاز) 3

نوع فیلد تصویر شما چیه؟

و اینکه لازم نیست کد دیگه ای بهش اضافه کنید

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

این ستون شما"avatar_pic" 

میبایست از 0 شمارش بشه مثلا نام -نام خانوادگی -تلفن -avatar_pic 

در این صورت شماره ردیف شما 4 هست

 

نهایتا اگر درست نشد پروژتونو پست کنید با بررسی کنم اگه پروزتون رو نمیخایید پاب کنید برام ایمیلش کنید

ویرایش شده توسط
توسط (7,164 امتیاز) 4 7 141

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

نوع فیلد تصویر در دیتابیس (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,921 کاربر

دسته بندی ها

...