PDA

View Full Version : اشکال در نمایش عکس



homayon_azizi
چهارشنبه 11 مرداد 1391, 16:26 عصر
با عرض سلام خدمت اساتید و دوستان محترم
دارم یه برنامه می نویسم حالا هر کاری می کنم به یه مشکل بر میخورم.
در واقع من تو این برنامه میخوام یا عکس ذخیره بشه یا متن ، که توسط radiobutton مشخص میشه کدومش باشه. حالا من تو ذخیره کردنش تو database مشکلی ندارم. تو update کردنش مشکل دارم.
این کد رو روی datagridview نوشم ، تا اینجا هم مشکلی ندارم.





private void dataGridView1_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
try
{
txtnumber.Text = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString().Trim();
irDateTimePicker3.IrValue = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
txtpeyvast.Text = dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString().Trim();
txtsazman.Text = dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString().Trim();
txtsharh.Text = dataGridView1.Rows[e.RowIndex].Cells[4].Value.ToString().Trim();
txtpeyro.Text = dataGridView1.Rows[e.RowIndex].Cells[5].Value.ToString().Trim();
txteghdam.Text = dataGridView1.Rows[e.RowIndex].Cells[6].Value.ToString().Trim();
txtbazgasht.Text = dataGridView1.Rows[e.RowIndex].Cells[7].Value.ToString().Trim();
cmbnoe.Text = dataGridView1.Rows[e.RowIndex].Cells[8].Value.ToString().Trim();
txttozih.Text = dataGridView1.Rows[e.RowIndex].Cells[9].Value.ToString().Trim();
txtemza.Text = dataGridView1.Rows[e.RowIndex].Cells[10].Value.ToString().Trim();
txtbaygani.Text = dataGridView1.Rows[e.RowIndex].Cells[11].Value.ToString().Trim();
byte[] arrPic = (byte[])(dataGridView1.Rows[e.RowIndex].Cells[12].Value);
if (arrPic == null)
{
radioButton6.Checked = true;
pictureBox1.Image = null;
}
else
{
//byte[] arrPic = (byte[])(dataGridView1.Rows[e.RowIndex].Cells[12].Value);
MemoryStream ms = new MemoryStream(arrPic);
pictureBox1.Image = Image.FromStream(ms);
radioButton5.Checked = true;
txtsharh.Text = "";
}
}
catch
{
MessageBox.Show("لطفآ فقط روی ردیف مشخصات نامه ثبت شده کلیک کنید", "توجه", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}





اینم عکس از برنامه :
90602
90603

فقط میدونم errore از ردیف اول اطلاعاتم میگیره چون مقدار فیلد عکسم هیچی نداره توش. من باید چیکار کنم تا این خطا رفع بشه؟ تو رو خدا کمکم کنید.

ali_habibi1384
چهارشنبه 11 مرداد 1391, 17:47 عصر
try catch رو بردار ببين دقيقا كجا و چه خطايي ميده

alexmcse
چهارشنبه 11 مرداد 1391, 17:53 عصر
اگر مشکلت ذخیره کردن عکس هست
از کنترل picture box استفاده کن
پروپرتی data binding گزینه image
پروپرتی image
lمثلا pictureBox1.Image = System.Drawing.Image.FromFile(@"d:\\babay.jpg");

:تشویق:

homayon_azizi
چهارشنبه 11 مرداد 1391, 17:57 عصر
برنامه رو عوض کردم همون خطای قبلی رو میده
کد جدید اینه :




txtnumber.Text = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString().Trim();
irDateTimePicker3.IrValue = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
txtpeyvast.Text = dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString().Trim();
txtsazman.Text = dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString().Trim();
txtsharh.Text = dataGridView1.Rows[e.RowIndex].Cells[4].Value.ToString().Trim();
txtpeyro.Text = dataGridView1.Rows[e.RowIndex].Cells[5].Value.ToString().Trim();
txteghdam.Text = dataGridView1.Rows[e.RowIndex].Cells[6].Value.ToString().Trim();
txtbazgasht.Text = dataGridView1.Rows[e.RowIndex].Cells[7].Value.ToString().Trim();
cmbnoe.Text = dataGridView1.Rows[e.RowIndex].Cells[8].Value.ToString().Trim();
txttozih.Text = dataGridView1.Rows[e.RowIndex].Cells[9].Value.ToString().Trim();
txtemza.Text = dataGridView1.Rows[e.RowIndex].Cells[10].Value.ToString().Trim();
txtbaygani.Text = dataGridView1.Rows[e.RowIndex].Cells[11].Value.ToString().Trim();
myconnection a = new myconnection();
if (a.open())
{
ds = new DataSet();
a.com.CommandText = "select * from tb_receive_letter where id='" + txtnumber.Text + "'";
a.com.Connection = a.con;
a.da = new SqlDataAdapter(a.com);
a.da.Fill(ds, "tb_receive_letter");
//byte[] arrPic = (byte[])(ds.Tables["tb_receive_letter"].Rows[0]["picorganization"]);
if ((ds.Tables["tb_receive_letter"].Rows[0]["picorganization"]) == null)
{
radioButton6.Checked = true;
}
else
{
byte[] arrPic = (byte[])(ds.Tables["tb_receive_letter"].Rows[0]["picorganization"]);
MemoryStream ms = new MemoryStream(arrPic);
pictureBox1.Image = Image.FromStream(ms);
radioButton5.Checked = true;
}
}


اینم خطای برنامه :

90608

homayon_azizi
چهارشنبه 11 مرداد 1391, 18:01 عصر
اگر مشکلت ذخیره کردن عکس هست
از کنترل picture box استفاده کن
پروپرتی data binding گزینه image
پروپرتی image
lمثلا pictureBox1.Image = System.Drawing.Image.FromFile(@"d:\\babay.jpg");

:تشویق:


نه تو ذخیره کردنش مشکل ندارم مشکل تو بازیابیشه. چون مقدار فیلد مربوط به عکسم خالیه ، قاطی می کنه و نمیدونه باید چی رو برگردونه. حالا میخوام بدونم که چه کدی باید بنویسم؟
نوع datatype که تو sqlserver تعریف کردم از نوع varbinary[max] هستش

hakim22
چهارشنبه 11 مرداد 1391, 18:23 عصر
بعضی از رکوردهای شما عکس ندارند یعنی مقدار ذخیره شده درون اونها null هست. شما با استفاده از متد isNull در دیتاست میتونید بررسی کنید که آیا فیلد null هست یا نه
اگر نبود اون خطی که خطا داره رو اجرا کنه اگر بود هم از اون پرش کنه و یک عکس کوچک پیشفرض رو بجاش نمایش بده .(بهتر از اون علامت ضربدر قرمزه !!!)

homayon_azizi
چهارشنبه 11 مرداد 1391, 19:01 عصر
بعضی از رکوردهای شما عکس ندارند یعنی مقدار ذخیره شده درون اونها null هست. شما با استفاده از متد isNull در دیتاست میتونید بررسی کنید که آیا فیلد null هست یا نه
اگر نبود اون خطی که خطا داره رو اجرا کنه اگر بود هم از اون پرش کنه و یک عکس کوچک پیشفرض رو بجاش نمایش بده .(بهتر از اون علامت ضربدر قرمزه !!!)


مرسی ولی فیلد من وقتی مقدار عکس نداره نمیخوام هیچی رو برگردونه ، میخوام وقتی مقدارش خالی بود اصلا اون رو فعال نکنه. Enable = false;

hakim22
چهارشنبه 11 مرداد 1391, 19:09 عصر
شما فقط کافیه وقتی عکس null هست اون مقدار arrPic رو حساب نکنی و با if جداش کنی. بقیش با خودت که می خوای چیکارش کنی !

homayon_azizi
چهارشنبه 11 مرداد 1391, 19:21 عصر
شما فقط کافیه وقتی عکس null هست اون مقدار arrPic رو حساب نکنی و با if جداش کنی. بقیش با خودت که می خوای چیکارش کنی !


الان من یه سری اطلاعات دیگه جمع کردم و تو سایت codeproject میگه که فیلد مربوط به varbinary به طور طبیعی null نیست و برای null کردنش باید سورس بنویسی.
فک کنم همین کد من درست باشه ولی نحوه null کردنش رو باید چیکار کنم؟
خود اون سایت میگفت این کار رو کنی درست میشه ولی برا من نشد :متفکر:



cmd.Parameters.AddWithValue("@staff_photo", DBNull.Value);



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



a.com.Parameters.Add("@picorganization",SqlDbType.VarBinary).Value=DBNull.Value;

homayon_azizi
چهارشنبه 11 مرداد 1391, 19:34 عصر
پیداش کردم دوستان.

این کد رو تو ذخیره سازیش نوشتم :

a.com.Parameters.Add("@picorganization",SqlDbType. VarBinary).Value=DBNull.Value;




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

if (a.open())
{
ds = new DataSet();
a.com.CommandText = "select * from tb_receive_letter where id='" + txtnumber.Text + "'";
a.com.Connection = a.con;
a.da = new SqlDataAdapter(a.com);
a.da.Fill(ds, "tb_receive_letter");
//byte[] arrPic = (byte[])(ds.Tables["tb_receive_letter"].Rows[0]["picorganization"]);
if ((ds.Tables["tb_receive_letter"].Rows[0]["picorganization"]) == DBNull.Value)
{
radioButton6.Checked = true;
}
else
{
byte[] arrPic = (byte[])(ds.Tables["tb_receive_letter"].Rows[0]["picorganization"]);
MemoryStream ms = new MemoryStream(arrPic);
pictureBox1.Image = Image.FromStream(ms);
radioButton5.Checked = true;
}
}


که همون کد قبلیست و فقط این خط رو عوض کردم :

if ((ds.Tables["tb_receive_letter"].Rows[0]["picorganization"]) == DBNull.Value)


بابت راهنماییتون ممنونم. خیلی دوستتون دارم. :قلب: