C# 异常详细信息:System.FormatException:输入字符串的格式不正确
我正在根据另一个dropdownlist填充dropdownlist。。 当我在第一个dropdownlist中选择一个值时,我一直会得到这个错误 有人能给我解释一下吗。。这是密码C# 异常详细信息:System.FormatException:输入字符串的格式不正确,c#,C#,我正在根据另一个dropdownlist填充dropdownlist。。 当我在第一个dropdownlist中选择一个值时,我一直会得到这个错误 有人能给我解释一下吗。。这是密码 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Configu
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 =@CountryID";
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 =@StateID";
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数据类型。如果ddlCountry.SelectedValue.ToString()的值为非数字或空,则会发生此错误。尝试将其放入Try-catch块。可能下拉列表值不是整数的字符串表示形式 虽然您可以使用
int.TryParse
或(更糟的是)try/catch块,但想必SelectedValue
选项是由您而不是用户控制的,因此它们应该对您将要使用它们的任何操作都有效
要做的第一件事可能是在调试器中查看这一点-当您得到一个异常(这会使调试器中断)时,您试图转换的值是什么?一旦你得到了“坏值”,计算出它是如何到达那里的
编辑:如果你有一个值“PRC0001”,那么这显然不是一个整数。如果您在所有表中都使用
varchar
,那么您的CountryID字段可能也是一个varchar
-那么您为什么要首先尝试转换为整数呢?soddlCountry。SelectedValue
不是有效的Int32
CountryID列应该是数字谢谢快速回复。。但是你能详细说明一下吗。。我是c#…@DorCohen的新手,但我无法更改我的表CountryID的数据类型。。varchar数据类型是否有其他代码行?问题是,您试图解析一个字符串值,该字符串值应为有效的Int32
格式,并且您得到该异常,因为它不是有效的格式,即它是字母/字母数字,而不是numeric@user1213269没有示例代码。您必须调试应用程序,并查看您的DropDownList`包含哪些值。如果您在那里看到非数值-这就是您的问题。我已经提到,我正在使用varchar作为CountryID的数据类型。。有没有替代的代码?我们没有问数据类型是什么,我们问的是值是什么!无法将prc001
转换为整数,因为它包含字母字符。我认为你缺乏一些基本知识,建议你在继续你的问题之前,再进一步阅读一些关于C的知识。看,这家伙也有同样的意图:)