错误输入字符串格式不正确c#

时间:2014-11-28 01:49:26

标签: c# excel

我正在一个项目中工作,它必须导入excel文件并在3个不同的数据网格中显示其详细信息。我在这里有一个带代码的按钮。

private void btn1_Click(object sender, EventArgs e)
    {
        try
        {
            if (Convert.ToInt32(txtreg.Text) >  0)
            {
                for (int i = 0; i < dgResult1.Columns.Count; i++)
                {

                    if (dgResult1.Columns[i].HeaderText == "REGHRS")
                    {
                        for (int j = 0; j < dgResult1.Rows.Count; j++)
                        {
                            if          (Convert.ToInt32(dgResult1.Rows[j].Cells["REGHRS"].Value.ToString()) >= 12)
                            {
                                dgResult1.Rows[j].Cells["REGHRS"].Value = txtreg.Text;
                                dgResult2.Rows[j].Cells["REGHRS"].Value = Convert.ToInt32(dgResult2.Rows[j].Cells["REGHRS"].Value.ToString().Trim()) - Convert.ToInt32(txtreg.Text);
                                dgResult3.Rows[j].Cells["REGHRS"].Value = 0;
                            }
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message.ToString());
        }
    }

并且它输出错误,输入字符串格式不正确。有人帮助我。谢谢

4 个答案:

答案 0 :(得分:2)

这是经典的调试101,除非你是第一次编写无错代码的Kwisatz Haderach编码,否则在你的职业生涯早期学习它是个好主意:-)

每次尝试使用以下内容进行转换之前

Convert.ToInt32(blah)

(我在你的代码中看到其中的四个,一行中有两个),你应该输入一些临时的调试代码(消息框,或者控制台,或者某些东西)来找出blah实际上是什么调成。这应包括实际字符串,由[]字符包围,以及字符串的长度。

这将让您识别哪个字符串未通过整数转换。一旦你确定了这一点, next 步骤将解决原因。

答案 1 :(得分:0)

处理Convert.ToInt32

你的异常是由Convert.ToInt32(...)发生的 - 你多次使用它...这意味着在某些时候没有传递给这个函数的数字的字符串

我的猜测是数据库中的某些字段包含null并由空字符串

表示

然后Convert.ToInt32可以处理它在空字符串值上失败的空值

潜在的解决方案 - 使用您自己的方法:

int ConvertInt(string val)
{
    return (val.IsNullOrEmpty(val)) ? 0 : int.Parse(val); // Parse aimed to deal with strings only while Convert deals withe several types
}

答案 2 :(得分:0)

     private void btn1_Click(object sender, EventArgs e)
     {

        int regNumber = 0;
        bool regFlag = int.TryParse(txtreg.Text, regNumber)

        if(!regFlag)
        {
           MessageBox.Show("Reg textbox doesn't have integer value");
           return;
        }

        if(regNumber <= 0)
        {
           MessageBox.Show("Reg textbox has negative or 0 value");
           return;
        }


        for (int i = 0; i < dgResult1.Columns.Count; i++)
        {

           if (dgResult1.Columns[i].HeaderText != "REGHRS")
                continue;


           for (int j = 0; j < dgResult1.Rows.Count; j++)
           {
               string regHrs = dgResult1.Rows[j].Cells["REGHRS"].Value.ToString();
               int regValue = 0;

               bool regCheck = int.TryParse(regHrs, out regValue)

               if(!regCheck || reg < 12)
                   continue;

               dgResult1.Rows[j].Cells["REGHRS"].Value = txtreg.Text;


               //till now both converts should be okay.
               dgResult2.Rows[j].Cells["REGHRS"].Value = Convert.ToInt32(dgResult2.Rows[j].Cells["REGHRS"].Value.ToString()) - Convert.ToInt32(txtreg.Text);

              dgResult3.Rows[j].Cells["REGHRS"].Value = 0;

           }


       }

    }

错误是您正在转换错误的整数值。你的代码结构也很糟糕。你应该避免嵌套if。我写了代码应该是怎么样的。也是为什么要捕获系统异常,没有用户关心它们。你应该显示相关的文字。

答案 3 :(得分:-1)

Below is my opinion 

private void btn1_Click(object sender, EventArgs e)
        {
            try
            {
                if (Convert.ToInt32(txtreg.Text) >  0)
                {
                    for (int i = 0; i < dgResult1.Columns.Count; i++)
                    {

                        if (dgResult1.Columns[i].HeaderText == "REGHRS")
                        {
                            for (int j = 0; j < dgResult1.Rows.Count; j++)
                            {
                                if          (Convert.ToInt32(dgResult1.Rows[j].Cells["REGHRS"].Value.ToString()) >= 12)
                                {
                                    dgResult1.Rows[j].Cells["REGHRS"].Value = txtreg.Text;
                                    dgResult2.Rows[j].Cells["REGHRS"].Value = Convert.ToInt32(dgResult2.Rows[j].Cells["REGHRS"].Value.ToString().Trim()) - Convert.ToInt32(txtreg.Text);
                                    dgResult3.Rows[j].Cells["REGHRS"].Value = "0";//UpDate this

                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
        }