PDA

View Full Version : سوال: null بودن ستون تصویر در datagridview



saba106
دوشنبه 03 اسفند 1388, 15:23 عصر
سلام، چطور میشه فهمید که ستون تصویر datagridview null هست یا نه؟ من از کد زیر استفاده کردم ولی جواب نمیده

if ((dataGridView1.CurrentRow.Cells[4].Value) == null)

saber4166
دوشنبه 03 اسفند 1388, 16:19 عصر
دوست عزیز چرا Whatch نمیگیری؟؟؟
اگر بلدی که هیچ ولی اگر بلد نیستی بگین تا براتون توضیح بدم

slashslash2009
دوشنبه 03 اسفند 1388, 16:20 عصر
میتونی مساوی =="" قرار بدی و چکش کنی فقط بعد از value از tostring هم استفاده کن

saba106
دوشنبه 03 اسفند 1388, 16:35 عصر
دوست عزیز چرا Whatch نمیگیری؟؟؟
اگر بلدی که هیچ ولی اگر بلد نیستی بگین تا براتون توضیح بدم

میشه لطف کنین توضیح بدین
مرسی

saba106
دوشنبه 03 اسفند 1388, 16:38 عصر
میتونی مساوی =="" قرار بدی و چکش کنی فقط بعد از value از tostring هم استفاده کن
از to string هم استفاده کردم جواب نداد

saba106
دوشنبه 03 اسفند 1388, 16:40 عصر
میتونی مساوی =="" قرار بدی و چکش کنی فقط بعد از value از tostring هم استفاده کن
از to string هم استفاده کردم اما جواب نداد

saba106
دوشنبه 03 اسفند 1388, 16:47 عصر
ستون چهارمش تصویره من میخام چک کنه اگه اون سطر عکس نداره دستورات دیگه ای رو اجرا کنه

slashslash2009
دوشنبه 03 اسفند 1388, 16:59 عصر
مطمعن هستی که داری ستون 4 رو چک میکنی چون ستونها از صفر شروع میشن میتونی به جای شماره ستون از نام ستون هم استفاده کنی ["نام ستون"]

saba106
دوشنبه 03 اسفند 1388, 17:09 عصر
مطمعن هستی که داری ستون 4 رو چک میکنی چون ستونها از صفر شروع میشن میتونی به جای شماره ستون از نام ستون هم استفاده کنی ["نام ستون"]
آره شمارره ستون درسته
نمیدونم چرا جواب نمیده. انگار اصلا دستور if رو ننوشتم

saber4166
دوشنبه 03 اسفند 1388, 22:04 عصر
برای whatch گرفتن روی خطی که میخوای ببینی درست اجرا میشه یا نه F9 رو بزن روی اون خط یه لاک قرمز رنگ میکشه حالا برنامه رو اجرا کن و برنامت به اون قسمتی که خط قرمز کشیدی برسه ایست میکته حالا شما میتونی مقادیر کدهای برنامتو در حال اجرا ببینی

اگر باز نیاز به توضیح داره بگید

saba106
پنج شنبه 13 اسفند 1388, 16:52 عصر
میخام null بودنش چک بشه که اگه null نبود تصویر تو یه پنل نمایش داده بشه. راهی وجود داره؟
مرسی

multiman
شنبه 15 اسفند 1388, 17:55 عصر
دوست عزیز نمیتونی کد:

if(datagrideveiw.current.cells[4].value.tostrig()==null)
قرار بدی، چون خطا میده. همین دستور را در try قرار بده بعد catch مربوط به try رو بنویس.

multiman
شنبه 15 اسفند 1388, 18:17 عصر
این کار انجام بده اگر باز خطا داد این کار رو بکن . یک بار در قسمت load این کد وارد کن:

bool b;
datagridveiw.curentrow.cells[4].value=false;

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

b=(bool)datagridview.currentRow.cells[4].value
if(b==false)
{
کد دلخواه مربوط به خودت
}

multiman
یک شنبه 16 اسفند 1388, 02:32 صبح
این کار انجام بده اگر باز خطا داد این کار رو بکن . یک بار در قسمت load این کد وارد کن:
bool b;
datagridveiw.curentrow.cells[4].value=false;
بعد کد مربوط به خالی بودن ستون datagridview را بنویس:
b=(bool)datagridview.currentRow.cells[4].value
if(b==false)
{
کد دلخواه مربوط به خودت
}

saba106
یک شنبه 16 اسفند 1388, 17:52 عصر
این کار انجام بده اگر باز خطا داد این کار رو بکن . یک بار در قسمت load این کد وارد کن:
bool b;
datagridveiw.curentrow.cells[4].value=false;
بعد کد مربوط به خالی بودن ستون datagridview را بنویس:
b=(bool)datagridview.currentRow.cells[4].value
if(b==false)
{
کد دلخواه مربوط به خودت
}
مرسی، این کد رو وارد کردم اما error داد.
چرا باید از try, catch استفاده کنم؟
تو فرمم یه دکمه ویرایش هست که وقتی کاربر کلیکش میکنه اطلاغات سطری که از دیتاگرید انتخاب کرده تو یه پنل میاد برای عکس میخام چک کنم که اگه کاربر عکس داره عکسو از دیتاگرید بگیره تو یه پیکچرباکس نشون بده. مشکلم فقط سر چک کردن null بودنه

multiman
دوشنبه 17 اسفند 1388, 11:34 صبح
من هم مشکل تو رو قبلا داشتم .برنامه فقط برای بار اول با null بودن errorمیده.
وقتی که از try , catch استفاده میکنی برای بار اول از کد:

datagridveiw.curentrow.cells[4].value.tostring()=null

خطا میگیره.
وقتی که این کد و در try بذاری ، هنگام خطا به (catch(nullexepticatch میره و بعد تو میتونی دستورات خودت و در این catch بنویسی.

multiman
دوشنبه 17 اسفند 1388, 11:42 صبح
امتحان کن اگر که باز کار نداد بگو که در مورد اون کدی که گفتی error میده کامل ترش کنم.
مشکل من در مورد چک کردن کلیک خورن checkbox در دیتا گرید بود که با همین کدی که گفتی error میده مشکلم و حل کردم.

saba106
پنج شنبه 20 اسفند 1388, 14:52 عصر
سلام کدها رو به روشی که گفتین وارد کردم


try
{
dataGridView1.CurrentRow.Cells[4].Value = null;

}
catch
{
byte[] imageData = (byte[])dataGridView1.CurrentRow.Cells[4].Value;
//Initialize image variable
Image newImage;
//Read image data into a memory stream
using (MemoryStream ms = new MemoryStream(imageData, 0, imageData.Length))
{
ms.Write(imageData, 0, imageData.Length);
//Set image variable value using memory stream.
newImage = Image.FromStream(ms, true);
}
//set picture
pictureBox1.Image = newImage;
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
}

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

hakelberfin
پنج شنبه 20 اسفند 1388, 16:12 عصر
سلام


وقتی که از try , catch استفاده میکنی برای بار اول از کد:

datagridveiw.curentrow.cells[4].value.tostring()=null

خطا میگیره.
وقتی که این کد و در try بذاری ، هنگام خطا به (catch(nullexepticatch میره و بعد تو میتونی دستورات خودت و در این catch بنویسی.
دوست عزیز لطفا در مورد این روش توضیح بده! برای اولین بار که یه همچین روشی میبینم.
Try...Catch برای مدیریت خطاهای احتمالیه . نه اینکه ما به عمد کدی بنویسیم که باعث ایجاد خطا بشه و به Catch بره.! هرگز از همچین روش هایی استفاده نکنید.

دوست عزیز شما عکس هاتون رو در DataGridView نشون میدین؟

saba106
جمعه 21 اسفند 1388, 14:04 عصر
دوست عزیز شما عکس هاتون رو در DataGridView نشون میدین؟
بله عکسها رو در datagridview نشون میدم. مشکلم فقط چک کردن null بودن عکسهاست

Himalaya
جمعه 21 اسفند 1388, 17:09 عصر
if (((DataGridViewImageCell)dataGridView1.CurrentRow. Cells[0]).Value != null)




try
{
dataGridView1.CurrentRow.Cells[4].Value = null;

}
catch
{
byte[] imageData = (byte[])dataGridView1.CurrentRow.Cells[4].Value;
//Initialize image variable
Image newImage;
//Read image data into a memory stream
using (MemoryStream ms = newMemoryStream(imageData, 0, imageData.Length))
{
ms.Write(imageData, 0, imageData.Length);
//Set image variable value using memory stream.
newImage = Image.FromStream(ms, true);
}
//set picture
pictureBox1.Image = newImage;
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
}


ضمنا واسه این که عکس رو از gridview به picturebox منتقل کنی لازم نیست این همه کد بنویسی و با استریم کار کنی و .... کد زیر کفایت میکنه


if (((DataGridViewImageCell)dataGridView1.CurrentRow. Cells[0]).Value != null)
{
Bitmap imageData = (Bitmap)((DataGridViewImageCell)dataGridView1.Curr entRow.Cells[0]).Value;
pictureBox1.Image = imageData;
}
else
pictureBox1.Image = null;
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;


جواب سوالت واسه خودم هم جالب بود (نه اینکه بخوام ازش استفاده کنم ها ، فقط محض کنجکاوی گفتم برنامه شو بنویسم)
برات آپ میکنم.

saba106
شنبه 22 اسفند 1388, 17:55 عصر
مرسی از کدی که گذاشتین. اونا رو تو برنامه وارد کردم. این خط ارور میده:

Bitmap imageData = (Bitmap)((DataGridViewImageCell)dataGridView1.Curr entRow.Cells[0]).Value;

ارور:

Unable to cast object of type 'System.Byte[]' to type 'System.Drawing.Bitmap'.
مرسی

Himalaya
شنبه 22 اسفند 1388, 18:27 عصر
Bitmap imageData = (Bitmap)((DataGridViewImageCell)dataGridView1.Curr entRow.Cells[0]).Value;

من ستون اولم با اندیس 0 از نوع DataGridViewImageCell هستش.
ولی ستون اول شما از نوع DataGridViewTextBoxCell هستش. خوب معلومه که نمیتونه تبدیل کنه
اندیس ستون عکستون رو بهش بدید

saba106
شنبه 22 اسفند 1388, 20:02 عصر
Bitmap imageData = (Bitmap)((DataGridViewImageCell)dataGridView1.Curr entRow.Cells[0]).Value;

من ستون اولم با اندیس 0 از نوع DataGridViewImageCell هستش.
ولی ستون اول شما از نوع DataGridViewTextBoxCell هستش. خوب معلومه که نمیتونه تبدیل کنه
اندیس ستون عکستون رو بهش بدید
بله اونو درست کردم. اروری که الان میده رو تو پست قبلی گذاشتم. پست قبلیو ویرایش کردم

Himalaya
شنبه 22 اسفند 1388, 23:11 عصر
:گریه:


Unable to cast object of type 'System.Byte[]' to type 'System.Drawing.Bitmap'.

به جان خودم عمرا اگه به اروره نگاه کرده باشی... من اصلا تو نمونه برنامه ای که برات فرستادم از بایت استفاده نکردم ، شما این بایت رو از کجا آوردید


Bitmap imageData = (Bitmap)((DataGridViewImageCell)dataGridView1.Curr entRow.Cells[0]).Value;

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

saba106
یک شنبه 23 اسفند 1388, 20:27 عصر
سلام شما تو برنامم قبل از ویرایش عکس رو از دیتابیس میخونم و وارد دیتاگرید میکنم. بعد از این کار میتونم یکی از ستون های دیتا گرید رو به imagecell تغییر بدم؟
فک کنم اگه تغییر کنه میشه از کدی که گفتین استفاده کنم. راستش من در این زمینه اطلاعات کافی ندارم.
مرسی

Himalaya
یک شنبه 23 اسفند 1388, 21:48 عصر
برنامه رو بزار اینجا اگه برات امکان داره...اینطوری بهتر میشه کمک کرد
شما نباید cell رو تغییر بدید بلکه ستون عکستون باید از نوع
DataGridViewImageColumn باشه که صد البته اگه نوع ستونتون تو پایگاه داده از نوع image باشه موقع قرار دادن اون تو گرید ستون مربوطه خود به خود از نوع
DataGridViewImageColumn در نظر گرفته میشه...
با این حال اگه برنامه رو قرار بدید ( یا حداقل یه نمونه کوچیک درست کنید که همچنان اون ایراد توش باشه) تا بتونیم بهتر کمکتون کنیم

saba106
یک شنبه 23 اسفند 1388, 21:48 عصر
اون ارور برای سطرهایی که تصویر داشتن بود. برای سطرهایی که تصویر ندارن ارور اینه:

Unable to cast object of type 'System.DBNull' to type 'System.Drawing.Bitmap'.
منم نمیدونم چرا ارورش به بایت مربوط میشه. خودمم گیج شدم. یه ماهه درگیر ارورها و مشکلات این قسمت برنامه ام.

saba106
یک شنبه 23 اسفند 1388, 21:52 عصر
کد دکمه ویرایش:


private void button3_Click_1(object sender, EventArgs e)
{
if (dataGridView1.SelectedRows.Count == 0)
{
FMessageBox.Show("هیچ موردی برای ویرایش انتخاب نشده است.", "خطا", FMessageBoxButtons.OK, FMessageBoxIcons.Error, FMessageBoxDefaultButtons.Button1);
}
else
{
elRichPanel1.Visible = true;
edit = Convert.ToString(dataGridView1.CurrentRow.Cells[0].Value);
nametxt.Text = Convert.ToString(dataGridView1.CurrentRow.Cells[1].Value);
familytxt.Text = Convert.ToString(dataGridView1.CurrentRow.Cells[2].Value);
sematcbo.Text = Convert.ToString(dataGridView1.CurrentRow.Cells[3].Value);
codemelitxt.Text = Convert.ToString(dataGridView1.CurrentRow.Cells[5].Value);
telltxt.Text = Convert.ToString(dataGridView1.CurrentRow.Cells[6].Value);
addresstxt.Text = Convert.ToString(dataGridView1.CurrentRow.Cells[7].Value);
getpicback();
}
}

تابع getpicback:


private void getpicback()
{
if (((DataGridViewImageCell)dataGridView1.CurrentRow. Cells[4]).Value != null)
{
Bitmap imageData = (Bitmap)((DataGridViewImageCell)dataGridView1.Curr entRow.Cells[4]).Value;
pictureBox1.Image = imageData;
}
else
pictureBox1.Image = null;
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
}

برای این تابع از پروسیجر هم استفاده کردم. مشکلاتی که با پروسیجرش داشتم تو یه پست اینجا گذاشتم. ولی جوابی دریافت نکردم
مرسی از وقتی که میذارین

saba106
یک شنبه 23 اسفند 1388, 23:04 عصر
برنامه رو بزار اینجا اگه برات امکان داره...اینطوری بهتر میشه کمک کرد
شما نباید cell رو تغییر بدید بلکه ستون عکستون باید از نوع
DataGridViewImageColumn باشه که صد البته اگه نوع ستونتون تو پایگاه داده از نوع image باشه موقع قرار دادن اون تو گرید ستون مربوطه خود به خود از نوع
DataGridViewImageColumn در نظر گرفته میشه...
با این حال اگه برنامه رو قرار بدید ( یا حداقل یه نمونه کوچیک درست کنید که همچنان اون ایراد توش باشه) تا بتونیم بهتر کمکتون کنیم

نوع ستون از نوع image هست.
مرسی

Himalaya
یک شنبه 23 اسفند 1388, 23:52 عصر
if (dataGridView1.CurrentRow.Cells[4].Value != DBNull.Value)
{
ImageConverter ic = new ImageConverter();
Image img = (Image)ic.ConvertFrom(dataGridView1.CurrentRow.Cel ls[4].Value);
pictureBox1.Image = new Bitmap(img); ;
}
else
pictureBox1.Image = null;

saba106
دوشنبه 24 اسفند 1388, 00:36 صبح
if (dataGridView1.CurrentRow.Cells[4].Value != DBNull.Value)
{
ImageConverter ic = newImageConverter();
Image img = (Image)ic.ConvertFrom(dataGridView1.CurrentRow.Cel ls[4].Value);
pictureBox1.Image = newBitmap(img); ;
}
else
pictureBox1.Image = null;

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