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");
    }

ページの読み込み時にFillRadWorkerが呼び出され、RequestBO.GetRadWorkersはEmployeeIDとEmpNameの2つの列を返します。ボタンがクリックされると、従業員IDと商談IDがストアドプロシージャに提供されますが、FormatExceptionはこれを停止します。

任意のガイダンスをいただければ幸いです

更新:ポストバックの問題でした。申し訳ありませんが、ASP.NETがDDLの新しい値を取得していなかったため、値が正しくありませんでした。

4

4 に答える 4

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

Request.QueryString["Opportunity"]との両方の値を表示/印刷してみてくださいddlRadWorkers.SelectedValue。どの行で例外がスローされるかはわかりませんでした。例外が発生した場合はConvert.ToInt32(ddlRadWorkers.SelectedValue);、おそらく のデータ ソースを正しく設定していませんddlRadWorkers。次のように設定します。

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