我有一个问题,当加载下拉列表,城市而不是ID似乎在dropdownlist值。有什么问题?
#region CITIES
public List<ListItem> loadCities()
{
using (SqlConnection conn = new SqlConnection(DataBase.Conn))
{
conn.Open();
string query = "SELECT * FROM Cities";
using (SqlCommand cmd = new SqlCommand(query, conn))
{
SqlDataReader dr = cmd.ExecuteReader();
List<ListItem> li = new List<ListItem>();
try
{
while (dr.Read())
{
li.Add(new ListItem(dr["Cities"].ToString(), dr["Id"].ToString()));
}
}
catch (Exception)
{
throw;
}
return li;
}
}
}
#endregion
答案 0 :(得分:0)
如果你的表看起来像这样
ID | Cities
1 | New York
2 | Paris
然后你的列表显示“纽约”和“巴黎”,使用SelectedValue
属性,你应该得到1或2.
你的桌子在我的例子中是什么样的?
您使用的是SelectedValue
吗?
答案 1 :(得分:0)
由于调试数据加载器并不总是很容易,因此您可以将内容存储在一个变量中,然后检查该变量:
while (dr.Read())
{
String value = dr["Id"].ToString();
String text = dr["Cities"].ToString();
li.Add(new ListItem(text, value));
}
然后在li.Add
上放置一个断点,检查value
和text
变量是否包含您需要的内容。
答案 2 :(得分:0)
public List<City> GetCities()
{
try
{
List<City> cityList = new List<City>();
using (sqlCon = new SqlConnection(Database.GetConnectionString()))
{
sqlCmd = new SqlCommand("sp_Cities", sqlCon);
sqlCmd.Parameters.AddWithValue("@Mode", 1);
sqlCmd.CommandType = System.Data.CommandType.StoredProcedure;
if (sqlCon.State != System.Data.ConnectionState.Open)
{
sqlCon.Open();
}
sqlReader = sqlCmd.ExecuteReader();
using (sqlReader)
{
if (sqlReader.HasRows)
{
City c = new City();
while (sqlReader.Read())
{
c = new City ();
c.ID = Convert.ToInt32(sqlReader["ID"]);
c.Name = Convert.ToString(sqlReader["Name"]);
cityList.Add(c);
}
}
}
}
return cityList;
}
catch (Exception)
{
throw;
}
}
你可以用ID和CityName这两个属性创建一个类,并创建该类的对象和该类型的列表然后迭代sqlReader并将对象添加到列表中,然后你可以像这样分配到Dropdown List
private void LoadCities()
{
try
{
List<City> cityList = new cityBLL().GetAllcity();
ddlGender.DataSource = cityList;
ddlGender.DataTextField = "Name";
ddlGender.DataValueField = "ID";
ddlGender.DataBind();
}
catch (Exception)
{
throw;
}
}