0

我有一个带有按钮的下拉列表,当单击该按钮时,会调用一个单独的类来调用一个函数来运行在表中插入一行的 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

4 回答 4

0

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

private void FillRadWorkerDDL()
{
    ...
    ddlRadWorkers.DataSource = dsRADWorkers.Tables[0];
    ...
}
于 2012-04-05T12:42:22.133 回答
0

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

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

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

于 2012-04-06T14:03:57.820 回答
0

利用

Convert.ToInt32(Request.QueryString["Opportunity"].ToString()) and 
int EmpId = Convert.ToInt32(ddlRadWorkers.SelectedValue.ToString());
于 2012-04-05T13:02:21.933 回答
0

是的问题可能是由于回发,我也遇到了同样的问题,并且因为类似的问题卡了好几个小时,但是一旦我将 ispostback 放入包含 FillRadWorkerDLL() 函数声明的页面加载功能中,问题就解决了。尝试这样做。

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

FillRadWorkerDDL(){ //your code here }

建议: 1)尝试在该行使用调试模式(ctrl+ )并尝试解决。F10FillRadWorkerDLL();

于 2018-03-23T11:51:48.387 回答