DropDownList中的System.Data.DataRowView

我正在尝试使用列中的值填充下拉列表。 现在问题是:我没有在下拉列表中获得实际值(像印度(+61)这样的国家代码)。 相反,我在下拉列表中获得“System.Data.DataRowView”(多次)。

public void bind() { DataSet ds1 = new DataSet(); SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]); con.Open(); string strQuery = "select CountryCode from AUser"; SqlCommand cmd = new SqlCommand(strQuery, con); using (SqlDataAdapter da = new SqlDataAdapter(cmd)) da.Fill(ds1, "AUser"); ddlMobile.DataSource = ds1.Tables["AUser"]; ddlMobile.DataBind(); con.Close(); } 

我在page_load上调用bind方法。 CountryCode数据类型是varchar(50) ,值类似于India(+91)Australia(+61)等…

您应该设置下拉列表的DataValueFieldDataTextField属性。

 ddlMobile.DataSource = ds1.Tables["AUser"]; ddlMobile.DataValueField = "CountryCode"; ddlMobile.DataTextField = "CountryName"; ddlMobile.DataBind(); 

此处CountryCode和CountryName必须是与DataRow中的值对应的列名

您正在查看DataRowView.ToString()的默认实现。 要从DataRow中选择要显示的特定字段,请执行以下操作。

 ddlMobile.DataSource = ds1.Tables["AllUser"]; ddlMobile.DataTextField = "CountryCode"; // This is text displayed ddlMobile.DataValueField = "CountryCode"; // This is the value returned ddlMobile.DataBind(); 

您尚未在DropDownList设置DataTextField 。 建议同时设置DataValueField在aspx中添加DataTextField属性:

  

您也可以在后面的代码中设置它,就像其他答案所示。

否则,您看到的行为是因为DataBound正在调用ToString()来显示信息,因为您没有提供数据字段查找。