输入字符串格式不正确,下拉列表选择值

时间:2012-04-05 11:51:39

标签: c# asp.net .net drop-down-menu

我有一个带有按钮的下拉列表,当单击该按钮时,将调用一个单独的类来运行在表中插入行的SQL存储过程。但是,单击该按钮时,我收到FormatException错误。

    protected void btnAssignWork_Click(object sender, EventArgs e)
    {
            RequestBO requestBO = new RequestBO();
            int oppid = Convert.ToInt32(Request.QueryString["Opportunity"]);
            int EmpId = Convert.ToInt32(ddlRadWorkers.SelectedValue);
            requestBO.AssignOpportunity(EmpId, oppid);

    }



       private void FillRadWorkerDDL()
    {
        RequestBO requestBO = new RequestBO();
        DataSet dsRADWorkers = null;
            dsRADWorkers = requestBO.GetRadWorkers();
            ddlRadWorkers.DataSource = dsRADWorkers;
            ddlRadWorkers.DataTextField = "EmpName";
            ddlRadWorkers.DataValueField = "EmployeeID";
            ddlRadWorkers.DataBind();
            ddlRadWorkers.Items.Insert(0, "Select Employee");
    }

在页面加载时调用Fill Rad Worker,RequestBO.GetRadWorkers返回2列,EmployeeID和EmpName。单击该按钮时,应将Employee ID和Opportunity ID提供给存储过程,但FormatException会停止此操作。

感谢任何指导

更新:回复问题是对不起家伙,价值是不正确的,因为ASP.NET没有接受DDL的新值

4 个答案:

答案 0 :(得分:0)

尝试查看/打印Request.QueryString["Opportunity"]ddlRadWorkers.SelectedValue的值。您没有告诉它抛出异常的哪一行,如果它出现在Convert.ToInt32(ddlRadWorkers.SelectedValue);那么您可能没有正确设置ddlRadWorkers的数据源。设置如下:

private void FillRadWorkerDDL()
{
    ...
    ddlRadWorkers.DataSource = dsRADWorkers.Tables[0];
    ...
}

答案 1 :(得分:0)

使用

Convert.ToInt32(Request.QueryString["Opportunity"].ToString()) and 
int EmpId = Convert.ToInt32(ddlRadWorkers.SelectedValue.ToString());

答案 2 :(得分:0)

您应该执行以下操作,而不是调用Convert.ToInt32(string str):

   if (!string.IsNullOrEmpty(str))
   {
       Convert.ToInt32(str);
   }

或者您可以使用int.TryParse。此方法返回布尔值而不是抛出异常,并在输出参数中返回整数值。使用TryParse的好处是,如果字符串包含其他字符而不是数字,您还可以防止代码抛出异常

答案 3 :(得分:0)

是的问题可能是由于回发,我也遇到了同样的问题,并且因为类似的问题而停留了好几个小时但是只要我把ispostback放在页面加载功能中,并附上FillRadWorkerDLL()函数声明,问题就解决了。 试着这样做。

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        FillRadWorkerDLL();
    }
}

FillRadWorkerDDL(){ //your code here }

建议: 1)尝试在FillRadWorkerDLL();行使用调试模式( ctrl + F10 )并尝试解决它。​​