我有一个带有按钮的下拉列表,当单击该按钮时,将调用一个单独的类来运行在表中插入行的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的新值
答案 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 )并尝试解决它。