-1

My operation work is when I click on the cells of gridview: The Records in gridview will go to the textbox and picture box.

This exception error occurs when I click on an empty cell(No records in datagridview) in the gridview.

I share picture of my operation

It comes from the error is. Here is my codes:

  private void btn_picopen_Click(object sender, EventArgs e)
    {
        /*OpenFileDialog opf = new OpenFileDialog();
        opf.Filter = "Select Pic(*.JPG;*.png;.gif)|*.jpg;*.png;*.gif";
        if (opf.ShowDialog() == DialogResult.OK)
         {
            pic_staff.Image = Image.FromFile(opf.FileName);
        }*/
        OpenFileDialog dialog = new OpenFileDialog();
        dialog.Filter = "png files(*.png)|*.png|jpg files(*.jpg)|*.jpg|All files(*.*)|*.* ";
        if(dialog.ShowDialog() == DialogResult.OK)
        {
            imglocation = dialog.FileName.ToString();
            pic_staff.ImageLocation = imglocation;
        }
        


    }
private void btn_save_Click(object sender, EventArgs e)
    {

        if (Isvalid())
        {
            byte[] images = null;
            FileStream streem = new FileStream(imglocation, FileMode.Open, FileAccess.Read);
            BinaryReader brs = new BinaryReader(streem);
            images= brs.ReadBytes((int)streem.Length);

            SqlCommand cmd = new SqlCommand("INSERT INTO Add_New_Staff VALUES(@Staff_Name, @Father_Name, @City, @Address, @Mobile_No, @E_mail, @CNIC, @Education, @Subject, @Experience, @pic, @designation)", con);  //AddEsp ki jaga store procedure ka name
            cmd.CommandType = CommandType.Text;

            cmd.Parameters.AddWithValue("@Staff_Name", txt_name.Text);
            cmd.Parameters.AddWithValue("@Father_Name", txt_fathername.Text);
            cmd.Parameters.AddWithValue("@City", txt_city.Text);
            cmd.Parameters.AddWithValue("@Address", txt_address.Text);
            cmd.Parameters.AddWithValue("@Mobile_No", txt_mobileno.Text);
            cmd.Parameters.AddWithValue("@E_mail", txt_email.Text);
            cmd.Parameters.AddWithValue("CNIC", txt_cnic.Text);
            cmd.Parameters.AddWithValue("@Education", txt_education.Text);
            cmd.Parameters.AddWithValue("@Subject", txt_subject.Text);
            cmd.Parameters.AddWithValue("@Experience", txt_experience.Text);
            cmd.Parameters.AddWithValue("@designation", txt_designation.Text);
            cmd.Parameters.AddWithValue("@pic", images);
            cmd.Parameters.AddWithValue("@Staff_Id", this.staff_Id);


            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
            MessageBox.Show("New Staff has been Added", "Saved", MessageBoxButtons.OK, MessageBoxIcon.Information);
            GetStudentsrecord();
            Clearformat();
        }
    }
 private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
    {

        staff_Id = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells[0].Value);
        txt_name.Text = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();
        txt_fathername.Text = dataGridView1.SelectedRows[0].Cells[2].Value.ToString();
        txt_city.Text = dataGridView1.SelectedRows[0].Cells[3].Value.ToString();
        txt_address.Text = dataGridView1.SelectedRows[0].Cells[4].Value.ToString();
        txt_mobileno.Text = dataGridView1.SelectedRows[0].Cells[5].Value.ToString();
        txt_email.Text = dataGridView1.SelectedRows[0].Cells[6].Value.ToString();
        txt_cnic.Text = dataGridView1.SelectedRows[0].Cells[7].Value.ToString();
        txt_education.Text = dataGridView1.SelectedRows[0].Cells[8].Value.ToString();
        txt_experience.Text = dataGridView1.SelectedRows[0].Cells[9].Value.ToString();
        txt_subject.Text = dataGridView1.SelectedRows[0].Cells[10].Value.ToString();
        txt_designation.Text = dataGridView1.SelectedRows[0].Cells[11].Value.ToString();
        // pic_staff.Image = dataGridView1.SelectedRows[0].Cells[10].Value as Image;
        byte[] bytes = (byte[])dataGridView1.SelectedRows[0].Cells[12].Value;
        MemoryStream ms = new MemoryStream(bytes);
        pic_staff.Image = Image.FromStream(ms);


    }
Vivek Jain
  • 2,730
  • 6
  • 12
  • 27
gmJ
  • 9
  • 3
  • Also see [What is the difference between null and System.DBNull.Value?](https://stackoverflow.com/questions/4958379/what-is-the-difference-between-null-and-system-dbnull-value) – gunr2171 Sep 09 '20 at 13:09
  • [Can we stop using AddWithValue() already?](https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/) [AddWithValue is Evil](https://www.dbdelta.com/addwithvalue-is-evil/) – AlwaysLearning Sep 09 '20 at 13:14
  • I m beginner in c#. I don't Much know about C# codes.So guide me with the best and easy way. – gmJ Sep 09 '20 at 13:17
  • @gmj There are already links to potential answers in the comments. Have you read them ? – Mohan Radhakrishnan Sep 10 '20 at 14:39

2 Answers2

1

If you want to detect only one row's data, you can use datagirdview.CurrentRow property.

You can use Convert.IsDBNull method to check if the value is DBnull.

Here is code example may help you.

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if ((!Convert.IsDBNull(dataGridView1.CurrentRow.Cells[1].Value)))
            {
                byte[] bytes = (byte[])dataGridView1.CurrentRow.Cells[1].Value;
                Image image = byteArrayToImage(bytes);
                pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
                pictureBox1.Image = image;
            }
            else
            {
                MessageBox.Show("there is no image in the row, please click aonther row");
            }
        }

       
        //convert bytearray to image
        public Image byteArrayToImage(byte[] byteArrayIn)
        {
            using (MemoryStream mStream = new MemoryStream(byteArrayIn))
            {
                return Image.FromStream(mStream);
            }
        }

Result:

enter image description here

Jack J Jun
  • 5,633
  • 1
  • 9
  • 27
0

you can check the first column before performing all of those code by

if (dataGridView1.SelectedRows[0].Cells[0].Value != null)
{
    staff_Id = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells[0].Value);
    ......
}

or you can just uncheck your grid's Enable Adding property to eliminate that new empty row. enter image description here