2010-11-29 2 views
0

У меня есть функция, как этотОшибка формата Исключение

/// /// Эта функция связывает 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, ошибка исключения формата поимка говоря это, что входная строка не в правильной форме в жирной линии ниже

защищаемой недействительный cmbempList_SelectedIndexChanged (объект отправитель , 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

Это потому, что DataValueField cmbempList в настоящее время устанавливается в пустую строку в методе BindEmpDropDownForMentor.

cmbempList.DataValueField = ""; 

Это заставит значения cmbempList быть связанным со значениями в DataTextField, которые являются строками. Когда вызывается событие SelectedIndexChange, он пытается разобрать строки в Int32, который бросает исключение.

Convert.ToInt32(cmbempList.SelectedValue) > 0 

Чтобы исправить это можно добавить поле ID псевдонимом в запросе SQL и установите 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";

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)) 
    { 
     // ... 
Смежные вопросы