PDA

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



azitaj
چهارشنبه 06 خرداد 1394, 18:58 عصر
سلام دوستان وقتی می خوام اطلاعاتم توی data gridviewببینم این ارور نمایش میده لطفا راهنمایی کنید
131713

ebrahim.rayatparvar
چهارشنبه 06 خرداد 1394, 19:19 عصر
سسلام مهندس کد چی زدی؟

azitaj
چهارشنبه 06 خرداد 1394, 19:35 عصر
این کد فرم datagridview


private void loadlist()
{
dataGridView1.AutoGenerateColumns = false;

string sql = "select *from student";
dataadapter = new SqlDataAdapter(sql, cn);
DataSet ds = new DataSet();
cn.Open();
dataadapter.Fill(ds, "student");
cn.Close();
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "student";
dataGridView1.DataSource = ds.Tables[0].DefaultView;
foreach (DataGridViewRow row in dataGridView1.Rows)
{
row.Height = 80;
}
}

ebrahim.rayatparvar
چهارشنبه 06 خرداد 1394, 20:01 عصر
این کد رو چک کن :


private void loadlist()
{
string sql = "select * from student";
dataadapter = new SqlDataAdapter(sql, cn);
DataSet ds = new DataSet();
cn.Open();
dataadapter.Fill(ds);
cn.Close();
dataGridView1.DataSource = ds;
dataGridView1.DataBind();
}

ebrahim.rayatparvar
چهارشنبه 06 خرداد 1394, 20:05 عصر
و راستی موضوع دیگه فیلد عکس رو از چه نوعی گرفتی؟؟؟

azitaj
چهارشنبه 06 خرداد 1394, 20:17 عصر
ازاین ارور میگیره


dataGridView1.DataBind();


این هم کد عکس



private void button2_Click(object sender, EventArgs e)
{
if (txtn.Text != "" & txtfn.Text != "" & txtshsh.Text != "" & txtid.Text != "" & radf.Text != "" & txtin.Text != "" & txtsal.Text != "" & txtnu.Text != "" & txtem.Text != "" & txtav.Text != "" & txtj.Text != "" & txtadd.Text != "" )
{
cn.Open();
cmd.CommandText = "insert into student (name,fname,shsh,id,field,input,year,tnumber,email ,average,jensiat,address,image) values (N'" + txtn.Text + "',N'" + txtfn.Text + "',N'" + txtshsh.Text + "',N'" + txtid.Text + "',N'" + radf.Text + "',N'" + txtin.Text + "',N'" + txtsal.Text + "',N'" + txtnu.Text + "',N'" + txtem.Text + "',N'" + txtav.Text + "',N'" + txtj.Text + "',N'" + txtadd + "',@image)";
cmd.Parameters.AddWithValue("@image", ImageToByte(pictureBox1.Image));
cmd.ExecuteNonQuery();
cmd.Clone();
MessageBox.Show("اطلاهات با موفقیت ثبت شد", "ثبت اطلاعات");
cn.Close();
txtn.Text = "";
txtfn.Text = "";
txtshsh.Text = "";
txtid.Text = "";
radf.Text = "";
txtin.Text = "";
txtsal.Text = "";
txtnu.Text = "";
txtem.Text = "";
txtav.Text = "";
txtj.Text = "";
txtadd.Text = "";
loadlist();

////////////دکمه انتخاب عکس
OpenFileDialog OpenFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter = "Image Files|*.bmp;*.jpg;*.jpeg;*.png;*.gif ";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image = new Bitmap(openFileDialog1.FileName);

txtimage.Text = openFileDialog1.SafeFileName;
pictureBox1.ImageLocation = openFileDialog1.FileName;
}


این هم تبدیلش به باینری

public static byte[] ImageToByte(Image img)
{
ImageConverter converter = new ImageConverter();
return (byte[])converter.ConvertTo(img, typeof(byte[]));


}

ebrahim.rayatparvar
چهارشنبه 06 خرداد 1394, 20:38 عصر
اول اینو بگم بهتره موقع درج کردن همه رو از پارامتر بگیری نه فقط عکس رو.
پیشنهاد میدم dataset خودتو بایند کن به گریدت.
بد چک کن گرید ستون عکس رو image گرفتی؟

azitaj
چهارشنبه 06 خرداد 1394, 20:41 عصر
یعنی بایداز اول بشینم بنویسم
قبلا بایندش کردم
بله

ebrahim.rayatparvar
چهارشنبه 06 خرداد 1394, 21:22 عصر
بعد یه نکته ای هست شما عکس رو باینری میکنید ذخیره می کنید باید برای نمایش تبدیل به عکس کنید

azitaj
چهارشنبه 06 خرداد 1394, 21:48 عصر
خوب چه کدی بنویسم

ebrahim.rayatparvar
چهارشنبه 06 خرداد 1394, 21:55 عصر
حالا این کار رو بکن ببین پیغام خطا میبینی.
اول بجای اینکه داخل DataSet بریزی مقدار رو بریز تو DataTable هر چند فرقی نداره ولی الان نیازی به DataSet نداری.
حالا به طور دستی بگیر با حلقه for بگیر سطر به طیر اضافه کن شرط حلقه هم اگه از datatable استفاده کنی میشه dt.Row.Count
تو حلقه هم ستون ها رو مقدار بده فقط ستون عکس رو اول مقدار datatable رو بگیر از باینری تبدیل به BitMap بکن بعد بریز تو گرید.

azitaj
چهارشنبه 06 خرداد 1394, 22:03 عصر
منظورتون نفهمیدم حلقه روکجای بنویسم ؟توی قسمتی که گریدویوهست؟

ebrahim.rayatparvar
چهارشنبه 06 خرداد 1394, 22:10 عصر
شما تو تابع loadlist که گرید رو پر میکنید بیاین بعد اینکه dataset یا به جاش از datatable استفاده کنید بهتره اینجا زمانی که dataset پر شد یعنی مقدار از دیتابیس گرفت و fill شد حالا حلقه رو بنویسید.