填充.Net中的数据库下拉列表

时间:2016-06-25 06:27:26

标签: .net sql-server database

我的数据库代码:

USE Student
GO

CREATE PROCEDURE spDisplayCountry
AS
BEGIN
    SELECT countryName
    FROM CountryList
END

此代码创建了一个我想从C#代码中使用的存储过程。

用于检索数据的C#代码:

protected void Page_Load(object sender, EventArgs e)
{
    // Connection String
    string constr = ConfigurationManager.ConnectionStrings["EmployeeContext"].ToString();    

    SqlConnection con = new SqlConnection(constr);
    con.Open();

    SqlCommand cmd = new SqlCommand("spDisplayCountry",con);
    cmd.CommandType = CommandType.StoredProcedure;

    SqlDataAdapter da = new SqlDataAdapter(cmd);
    DataSet ds = new DataSet();
    da.Fill(ds);    // Fill Dataset

    countryList.DataTextField = ds.Tables[0].Columns["countryName"].ToString();
    countryList.DataValueField = ds.Tables[0].Columns["countryId"].ToString(); // to retrieve specific text feild name.

    countryList.DataSource = ds.Tables[0];   // assigning Datasource to DropDown List
    countryList.DataBind();  // binding dropdown list.
}

1 个答案:

答案 0 :(得分:0)

您需要指定要显示到DataTextFieldDataValueField的列的名称 - 而不是这些列的值 - 加上:您无法指定CountryId如果你没有在存储过程中检索它!

所以它应该是

countryList.DataTextField = "CountryName";
countryList.DataValueField = "CountryId";

您需要将存储过程更改为:

CREATE PROCEDURE spDisplayCountry
AS
BEGIN
    SELECT CountryId, CountryName
    FROM dbo.CountryList
END

此外,如果你只检索一组数据(你通常会这样做),那么实例化DataSet(可能包含几个相关的数据集)真的没有意义 - 只需使用{{1} }:

DataTable