retrieving number value from datagridview C#

2019-08-01 10:47发布

问题:

I am trying to retrieve a numerical value from datagridview. The data type for both the value in the table, and the variable (weeklyTotal), are integer. Also I am trying to cast it into integer. I looked through the whole website for similar problems, and yet none of the solutions were helpful. The error message that I am getting is “when casting form a number, the value must be less than infinity”. I went back to my table more than one time to make sure that I don’t have invalid value.

it's a runtime error and the IDE always point at this line

weeklyTotal += (int)dataGridView1.Rows[i].Cells[1].Value;

for (int i = 0; i < this.dataGridView1.Rows.Count; i++)
        {
            sdate = dataGridView1.Rows[i].Cells[2].Value.ToString();
            ddate = dataGridView1.Rows[i].Cells[3].Value.ToString();

            if ((weekFirstDay <= Convert.ToInt32(sdate) &&
                Convert.ToInt32(sdate) <= (weekFirstDay + 7))||(weekFirstDay <= `Convert.ToInt32(ddate) &&`
                Convert.ToInt32(ddate) <= (weekFirstDay + 7)))
            {
                dataGridView1.Rows[i].Selected = true;
                dataGridView1.Rows[i].Visible = true;
                weeklyTotal += (int)dataGridView1.Rows[i].Cells[1].Value;

                //weeklyTotalString = dataGridView1.Rows[i].Cells[1].Value.ToString();
                //weeklyTotal += Convert.ToInt32(weeklyTotalString);


            }
            else

回答1:

Well, that's because

(int)dataGridView1.Rows[i].Cells[1].Value

won't cast your cell value to the int type. You're just taking the string saying "hey compiler, please treat it as an int type" but it still will be a string type underneath. Use the Convert.ToInt32 method like you did earlier.



回答2:

You may be trying to to an (int) cast on a DBNull value. I'm assuming that you populating the datagridview with data from the database.

Try this:

if(dataGridView1.Rows[i].Cells[1].Value != DBNull.Value)
{
    weeklyTotal += (int)dataGridView1.Rows[i].Cells[1].Value;
}