格式异常错误

时间:2010-11-29 07:09:48

标签: c# asp.net

我有这样的功能

///         ///此函数绑定指导者用户的emplist下拉列表。         ///

    private void BindEmpDropDownForMentor()

    {

        string strSelectMentorQuery = "SELECT FIRST_NAME + ' ' + LAST_NAME AS NAME FROM M_USER_DETAILS MUD INNER JOIN M_LEADERLED MLL "
               + "ON MLL.LED_ID = MUD.PK_ID WHERE MLL.LEADER_ID = '" + Session["UserID"].ToString()
               + "' AND MUD.ACTIVE = 1 AND MLL.START_DATE <= Getdate() AND"
               + " MLL.END_DATE > Getdate()";

        OleDbConnection oleConnection = new OleDbConnection(ConfigurationSettings.AppSettings["SQLConnectionString"]);
        OleDbCommand oleCommand = new OleDbCommand(strSelectMentorQuery, oleConnection);

        try
        {
            //Open Connection
            oleConnection.Open();

            //Set Datasource and close connection   
            cmbempList.DataSource = oleCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
            cmbempList.DataValueField = "";
            cmbempList.DataTextField = "NAME";

            //Bind the Dropdown
            cmbempList.DataBind();

            //Add a new item 'ALL TEAM MEMBERS' to the member list
            cmbempList.Items.Insert(0, new ListItem("ALL TEAM MEMBERS", "0"));
            cmbempList.SelectedIndex = 0;

            GridViewDataShowBy = cmbempList.SelectedValue;

        }
        catch (Exception ex)
        {
            ExceptionLogger.LogException(ex);
        }
        finally
        {
            // Close the connection when done with it.
            oleConnection.Close();
        }

    }

但是在cmbempList的选定更改事件中,正在捕获格式异常错误,说输入字符串在下面的粗线中的格式不正确

protected void cmbempList_SelectedIndexChanged(object sender,EventArgs e)

    {

        gvLeaveList.CurrentPageIndex = 0;
        dgDaysAbsent.CurrentPageIndex = 0;

        **if (!(Convert.ToInt32(cmbempList.SelectedValue) > 0))
        {**
            if (this.Session["RoleID"].ToString() == "1")
            {
                cmbLeads.ClearSelection();
                cmbLeads.SelectedIndex = cmbLeads.Items.IndexOf(cmbLeads.Items.FindByValue(this.Session["UserID"].ToString()));
            }
        }

        GridViewDataShowBy = cmbempList.SelectedValue.ToString();

        if (cmbempList.SelectedValue != "0" && cmbempList.SelectedValue != "")
        {
            Page.Title = cmbempList.SelectedItem.Text + " | Leave List | "
                       + OrganizationManager.GetCurrentOrganizationName(Session["OrgID"]);
        }
        else
        {
            Page.Title = "Leave List | "
                       + OrganizationManager.GetCurrentOrganizationName(Session["OrgID"]);
        }

        PopulateLeaveList(GridViewDataShowBy, "0");
        BindLeaveListGrid(GridViewDataShowBy, cmbLeads.SelectedValue.ToString());
    }

2 个答案:

答案 0 :(得分:2)

这是因为cmbempList的DataValueField在BindEmpDropDownForMentor方法中被设置为空字符串。

cmbempList.DataValueField = "";

这将导致cmbempList的值绑定到DataTextField中的值,这些值是字符串。当调用SelectedIndexChange事件时,它会尝试将字符串解析为引发异常的Int32。

Convert.ToInt32(cmbempList.SelectedValue) > 0

要修复它,您可以在SQL查询中添加别名ID字段,并将cmbempList.DataValueField设置为该ID名称,这可能是您的意图。

例如,在BindEmpDropDownForMentor中对您的查询进行编辑:

string strSelectMentorQuery = "SELECT FIRST_NAME + ' ' + LAST_NAME AS NAME, MLL.LED_ID AS ID FROM M_USER_DETAILS MUD INNER JOIN M_LEADERLED MLL "
               + "ON MLL.LED_ID = MUD.PK_ID WHERE MLL.LEADER_ID = '" + Session["UserID"].ToString()
               + "' AND MUD.ACTIVE = 1 AND MLL.START_DATE <= Getdate() AND"
               + " MLL.END_DATE > Getdate()";

并将您的DataValueField分配给:

cmbempList.DataValueField = "ID";

答案 1 :(得分:0)

试试这个。

如果仍然失败,请在调试器中查找cmbempList.SelectedValue包含的值。

protected void cmbempList_SelectedIndexChanged(object sender, EventArgs e)
{
    // ...
    object selectedValue = cmbempList.SelectedValue;
    if ((selectedValue != null) && (selectedValue != DBNull.Value) && (!(Convert.ToInt32(selectedValue) > 0))
    {
        // ...