PDA

View Full Version : سوال: انتقال عکس از دیتاگرید به فرم



salehvasaleh
شنبه 27 آبان 1391, 13:36 عصر
من در دیتا گرید سه ستون دارم که اولی و دومی متن و سومی تصویر هست. حالا می خوام طوری باشه که با کلیک رو دیتاگرید ویو داده های آن سطری که روی اون کلیک کردم روی فرم نمایش داده بشه تا اینجای کار رو بلدم و مطابق کدهای زیر برای رویداد کلیک اینتر اون دیتا گرید ویو این کار رو انجام می دم. اما مشکلم اینجاست که اون ستون سوم که تصویر داخلش هست رو چطوری وارد picture box کنم؟
برای ستون اولی و دومی که کدهای زیر رو نوشتم :
ممنون می شم کمک کنید و بفرمایید که داده ها رو چطوری از ستون سوم وارد پیکچر باکس کنم؟ممنون



textBox5.Text = dataGridView1.CurrentRow.Cells[0].Value.ToString();
textBox6.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString();

lahiji
شنبه 27 آبان 1391, 14:08 عصر
سلام

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


string comstring = "select * from Personal where Idcard='" + textBox1.Text + "'";

SqlDataAdapter ff = new SqlDataAdapter(comstring, conn);

DataSet ds1 = new DataSet();

// conn.Open();

ff.Fill(ds1, "Personal");

// conn.Close();

byte[] arrpic = (byte[])(ds1.Tables["Personal"].Rows[0]["img"]);

MemoryStream ms = new MemoryStream(arrpic);

pictureBox1.Image = Image.FromStream(ms);


موفق باشی

salehvasaleh
شنبه 27 آبان 1391, 17:45 عصر
سلام

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


string comstring = "select * from Personal where Idcard='" + textBox1.Text + "'";

SqlDataAdapter ff = new SqlDataAdapter(comstring, conn);

DataSet ds1 = new DataSet();

// conn.Open();

ff.Fill(ds1, "Personal");

// conn.Close();

byte[] arrpic = (byte[])(ds1.Tables["Personal"].Rows[0]["img"]);

MemoryStream ms = new MemoryStream(arrpic);

pictureBox1.Image = Image.FromStream(ms);


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



MemoryStream Memory = new MemoryStream();
pictureBox1.Image.Save(Memory, pictureBox1.Image.RawFormat);
byte[] arrImage = Memory.GetBuffer();
Memory.Close();

com.Parameters.AddWithValue("@akss", arrImage);
//opendb.Open();
com.ExecuteNonQuery();
com.Parameters.Clear();
MessageBox.Show("عکس شما ذخیره شد");
opendb.Close();

lahiji
شنبه 27 آبان 1391, 17:48 عصر
سلام

ok , پس پست شماره 2 مشکلتو حل می کنه

موفق باشی

salehvasaleh
شنبه 27 آبان 1391, 18:01 عصر
سلام

ok , پس پست شماره 2 مشکلتو حل می کنه

موفق باشی
سلام.ممنون از پاسختون فقط یکی دو سوال :
در کد زیر :
اسم جدول من Table_1 هست پس باید هر جا persian بود این را وارد کنم؟ یعنی قطعه کد زیر درسته؟


ds1.Tables["Table_1"].TableName;

ممنون

Mahmoud Zaad
شنبه 27 آبان 1391, 18:08 عصر
سلام

ok , پس پست شماره 2 مشکلتو حل می کنه

موفق باشی
سلام
نه آقا جان! ایشون یه بار اطلاعات رو توی دیتاگریدویو نمایش دادن، دیگه لزومی نداره دوباره اطلاعات از دیتابیس فراخوانی بشن. می تونید از کد زیر استفاده کنید:
if (dataGridViewX1.CurrentRow.Cells[3].Value != DBNull.Value)
{
MemoryStream ms = new MemoryStream((byte[])(dataGridViewX1.CurrentRow.Cells["ax"].Value));
pictureBox1.Image = Image.FromStream(ms);
}
else
{
pictureBox1.Image = null;
}
در کد بالا اول چک کردیم ببینیم سلول مورد نظر مقدار داره یا نه اگه داشت که توی پیکچر باکس نشون میدیم در غیر اینصورت پیکچر باکس خالی می مونه. فرض کنید اسم فیلد عکس توی دیتابیس، ax هست.

salehvasaleh
شنبه 27 آبان 1391, 18:20 عصر
سلام
نه آقا جان! ایشون یه بار اطلاعات رو توی دیتاگریدویو نمایش دادن، دیگه لزومی نداره دوباره اطلاعات از دیتابیس فراخوانی بشن. می تونید از کد زیر استفاده کنید:
if (dataGridViewX1.CurrentRow.Cells[3].Value != DBNull.Value)
{
MemoryStream ms = new MemoryStream((byte[])(dataGridViewX1.CurrentRow.Cells["ax"].Value));
pictureBox1.Image = Image.FromStream(ms);
}
else
{
pictureBox1.Image = null;
}
در کد بالا اول چک کردیم ببینیم سلول مورد نظر مقدار داره یا نه اگه داشت که توی پیکچر باکس نشون میدیم در غیر اینصورت پیکچر باکس خالی می مونه. فرض کنید اسم فیلد عکس توی دیتابیس، ax هست.
ممنون از توضیحتون روش شما رو که اجرا کردم ارور زیر رو می ده که در عکس قابل مشاهده هست اگه زحمتی نیست نگاه کنید ببینید چیه؟!
http://mibe.hostesr.com/img/6a8da1d3bcb2.jpg

Mahmoud Zaad
شنبه 27 آبان 1391, 18:25 عصر
ممنون از توضیحتون روش شما رو که اجرا کردم ارور زیر رو می ده که در عکس قابل مشاهده هست اگه زحمتی نیست نگاه کنید ببینید چیه؟!
http://mibe.hostesr.com/img/6a8da1d3bcb2.jpg
مشکل توی ایندکس ستون هست من به صورت فرضی نوشتم اونو، به جای ایندکس از نام ستون استفاده کنید مطمئن تره:
if (dataGridViewX1.CurrentRow.Cells["akss"].Value != DBNull.Value)
{
MemoryStream ms = new MemoryStream((byte[])(dataGridViewX1.CurrentRow.Cells["akss"].Value));
pictureBox1.Image = Image.FromStream(ms);
}
else
{
pictureBox1.Image = null;
}
یا 3 رو به 2 تغییر بدید چون ستون عکس شما 3 هست و ایندکس ستون ها از 0 شروع میشه پس باید بنویسید 2، ولی از اسم ستون استفاده کنید مطمئن تره بعداً هم اگه جای ستون عوض بشه نیازی به تغییر کد ندارید.

salehvasaleh
شنبه 27 آبان 1391, 18:29 عصر
مشکل توی ایندکس ستون هست من به صورت فرضی نوشتم اونو، به جای ایندکس از نام ستون استفاده کنید مطمئن تره:
if (dataGridViewX1.CurrentRow.Cells["akss"].Value != DBNull.Value)
{
MemoryStream ms = new MemoryStream((byte[])(dataGridViewX1.CurrentRow.Cells["akss"].Value));
pictureBox1.Image = Image.FromStream(ms);
}
else
{
pictureBox1.Image = null;
}
یا 3 رو به 2 تغییر بدید چون ستون عکس شما 3 هست و ایندکس ستون ها از 0 شروع میشه پس باید بنویسید 2، ولی از اسم ستون استفاده کنید مطمئن تره بعداً هم اگه جای ستون عوض بشه نیازی به تغییر کد ندارید.
درسته حق با شماست. ممنون اسم ستون رو که نوشتم درست شد. ممنونم

lahiji
یک شنبه 28 آبان 1391, 10:48 صبح
سلام.ممنون از پاسختون فقط یکی دو سوال :
در کد زیر :
اسم جدول من Table_1 هست پس باید هر جا persian بود این را وارد کنم؟ یعنی قطعه کد زیر درسته؟


ds1.Tables["Table_1"].TableName;

ممنون

سلام

بله ، درست می فرمائید

rasoul babadi
جمعه 18 مهر 1393, 15:52 عصر
سلام به تمام بچه های برنامه نویس لطفا اگر می تونید به من کمک کنید. اول بگم که من با سی شارپ کار می کنم و اسکیوال 2005
یه برنامه نوشتم که مشخصات یک کارمند رو در بانک ذخیره می کنه از جمله تصویر که برنامه من تصویر رو به کد باینری تبدیل می کنه بعد اون رو ذخیره می کنه تا اینجا هیچ مشکلی ندارم حتی تصویر رو توی دیتاگرید هم نشون می ده اما زمانی که از توی دیتا گرید دابل کلیک می کنم تا مشخصات کارمند رو ویرایش کنم تمام مشخصات در کنترل های مربوط قرار می گیره به جز تصویر که توی پیکچر باکس نشون داده نمی شه .
این هم کد و راهی که رفتم.

124406

rasoul babadi
شنبه 19 مهر 1393, 16:21 عصر
کسی نیست پرسش؟ ما رو پاسخ بدهد....:ناراحت:

feryt20
شنبه 19 مهر 1393, 21:20 عصر
کسی نیست پرسش؟ ما رو پاسخ بدهد....:ناراحت:

5 دقیقه وقت بذارید پاسخهای بالاتر رو بخونید مشکلتون حل میشه