2012-02-16 32 views
0

我正在基於其他下拉列表.. 當我選擇的第一個下拉列表我不斷收到這個錯誤的值填充下拉列表..異常詳細信息:System.FormatException:輸入字符串的不正確的格式

有人可以解釋給我..這裏是代碼..

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Configuration; 
using System.Data.SqlClient; 
using System.Data; 

public partial class _Default : System.Web.UI.Page 
{ 
protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     FillCountry(); 
    } 
} 
protected void ddlCountry_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    int CountryID = Convert.ToInt32(ddlCountry.SelectedValue.ToString()); 
    FillStates(CountryID); 
    ddlCity.SelectedIndex = 0; 
} 
protected void ddlState_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    int StateID = Convert.ToInt32(ddlState.SelectedValue.ToString()); 
    FillCities(StateID); 
} 

private void FillCountry() 
{ 
    string strConn =  ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 
    SqlConnection con = new SqlConnection(strConn); 
    SqlCommand cmd = new SqlCommand(); 
    cmd.Connection = con; 
    cmd.CommandType = CommandType.Text; 
    cmd.CommandText = "SELECT CountryID, CountryName FROM Country"; 
    DataSet objDs = new DataSet(); 
    SqlDataAdapter dAdapter = new SqlDataAdapter(); 
    dAdapter.SelectCommand = cmd; 
    con.Open(); 
    dAdapter.Fill(objDs); 
    con.Close(); 
    if (objDs.Tables[0].Rows.Count > 0) 
    { 
     ddlCountry.DataSource = objDs.Tables[0]; 
     ddlCountry.DataTextField = "CountryName"; 
     ddlCountry.DataValueField = "CountryID"; 
     ddlCountry.DataBind(); 
     ddlCountry.Items.Insert(0, "--Select--"); 
    } 
    else 
    { 
     lblMsg.Text = "No Countries found"; 
    } 


} 

private void FillStates(int countryID) 
{ 
    string strConn = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 
    SqlConnection con = new SqlConnection(strConn); 
    SqlCommand cmd = new SqlCommand(); 
    cmd.Connection = con; 
    cmd.CommandType = CommandType.Text; 
    cmd.CommandText = "SELECT StateID, StateName FROM State WHERE CountryID [email protected]"; 
    cmd.Parameters.AddWithValue("@CountryID", countryID); 
    DataSet objDs = new DataSet(); 
    SqlDataAdapter dAdapter = new SqlDataAdapter(); 
    dAdapter.SelectCommand = cmd; 
    con.Open(); 
    dAdapter.Fill(objDs); 
    con.Close(); 
    if (objDs.Tables[0].Rows.Count > 0) 
    { 
     ddlState.DataSource = objDs.Tables[0]; 
     ddlState.DataTextField = "StateName"; 
     ddlState.DataValueField = "StateID"; 
     ddlState.DataBind(); 
     ddlState.Items.Insert(0, "--Select--"); 
    } 
    else 
    { 
     lblMsg.Text = "No states found"; 
    } 
} 

private void FillCities(int stateID) 
{ 
    string strConn = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 
    SqlConnection con = new SqlConnection(strConn); 
    SqlCommand cmd = new SqlCommand(); 
    cmd.Connection = con; 
    cmd.CommandType = CommandType.Text; 
    cmd.CommandText = "SELECT CityID, CityName FROM City WHERE StateID [email protected]"; 
    cmd.Parameters.AddWithValue("@StateID", stateID); 
    DataSet objDs = new DataSet(); 
    SqlDataAdapter dAdapter = new SqlDataAdapter(); 
    dAdapter.SelectCommand = cmd; 
    con.Open(); 
    dAdapter.Fill(objDs); 
    con.Close(); 
    if (objDs.Tables[0].Rows.Count > 0) 
    { 
     ddlCity.DataSource = objDs.Tables[0]; 
     ddlCity.DataTextField = "CityName"; 
     ddlCity.DataValueField = "CItyID"; 
     ddlCity.DataBind(); 
     ddlCity.Items.Insert(0, "--Select--"); 
    } 
    else 
    { 
     lblMsg.Text = "No Cities found"; 
    } 
} 
} 

我想我的問題是在這裏行..

int CountryID = Convert.ToInt32(ddlCountry.SelectedValue.ToString()); 

即時通訊使用VARCHAR數據類型爲我的所有表..

+0

所以'ddlCountry.SelectedValue'不是一個有效的'Int32' – Shai 2012-02-16 07:57:54

+0

CountryID列應該是數字 – 2012-02-16 07:58:50

+0

感謝快速回復..但你可以請詳細說明它..即時通訊新的C#.. – drayl 2012-02-16 07:59:01

回答

-1

如果ddlCountry.SelectedValue.ToString()的值是非數字或空值,則會發生此錯誤。嘗試把它放在try catch塊中。

+0

看這傢伙有同樣的意圖.. :) – 2012-02-16 08:16:20

2

推測下拉列表值不是整數的字符串表示形式。

雖然你可以要麼使用int.TryParse或(較差)一個try/catch塊,想必SelectedValue選項是那些由而不是用戶控制,所以他們應該所有的有效期爲任何你」重新去做他們。

第一件要做的事情可能是在調試器中查看 - 當你得到一個異常(應該讓調試器中斷)時,你試圖轉換的值是什麼?一旦你得到了「不好的價值」,弄清楚它是如何到達那裏的。

編輯:如果你有一個值「PRC0001」那麼明確是不是一個整數。如果您在所有表格中使用varchar,那麼可能是您的CountryID字段爲 a varchar - 那麼爲什麼你想要轉換爲第一個整數?

+0

你能告訴我一個示例代碼嗎? – drayl 2012-02-16 08:08:21

+0

@ user1213269沒有示例代碼。您將不得不調試應用程序並查看您的DropDownList持有的WHICH值。如果您看到非數字值 - *這就是*您的問題。 – Shai 2012-02-16 08:11:47

+0

我已經提到,我正在使用varchar作爲CountryID的數據類型。是否有任何替代代碼而不是? – drayl 2012-02-16 08:14:37

相關問題