绑定列表以在Asp.net中下载

时间:2015-07-25 09:26:56

标签: c# asp.net sql-server

我想从Lis下拉列表中添加数据文本字段和数据值字段。我怎么能这样做?

到目前为止,我确实喜欢这个,但它有一个错误:

  

DataBinding:'System.String'不包含具有名称的属性   'cos_name'。

这是我的数据访问层:

public List<String> GetAllCourseName()
{
    SqlConnection objsqlconn = new SqlConnection(conn);
    objsqlconn.Open();
    SqlDataAdapter da = new SqlDataAdapter("select cos_ID, cos_name from course_details", objsqlconn); 
    DataSet ds = new DataSet(); 
    da.Fill(ds, "course_details"); 

    List<String> courseName = new List<String>();

    foreach(DataRow row in ds.Tables["course_details"].Rows)
    {
        courseName.Add(row["cos_ID"].ToString());
        courseName.Add(row["cos_name"].ToString());
    }
    return courseName;
}

这是我的表单加载

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        FillCourseName();
    }   
}
public void FillCourseName()
{
    ddcoursename.DataSource = objda.GetAllCourseName();
    ddcoursename.DataTextField = "cos_name";
    ddcoursename.DataValueField = "cos_ID";
    ddcoursename.DataBind();
}

2 个答案:

答案 0 :(得分:4)

Dotnetom有一个很好的答案。但是,如果你仍然想要使用List,你仍然可以通过采用另一种方法来实现:

为您的数据创建一个新类...

public class CourseDetailsClass
{
    public string cos_ID { get; set; }
    public string cos_name { get; set; }
}

然后像这样修改你的GetAllCourseName方法......

public List<CourseDetailsClass> GetAllCourseName()
{
   SqlConnection objsqlconn = new SqlConnection(conn);
   objsqlconn.Open();
   SqlDataAdapter da = new SqlDataAdapter("select cos_ID, cos_name from course_details", objsqlconn); 
   DataSet ds = new DataSet(); 
   da.Fill(ds, "course_details"); 

   List<CourseDetailsClass> courseName = new List<CourseDetailsClass>();

   foreach(DataRow row in ds.Tables["course_details"].Rows)
   {
        courseName.Add(new CourseDetailsClass
        {
            cos_ID = row["cos_ID"].ToString(),
            cos_name = row["cos_name"].ToString()
        });         
    }

     return courseName;
}

那也应该对你有用。然后,您可以将该列表用作数据源,现在它将能够找到TextDataFieldTextValueField字段。

答案 1 :(得分:1)

问题是您的方法GetAllCourseName会返回一个字符串列表,这些字符串显然没有属性cos_namecos_ID。相反,您可以返回一个数据表并将其绑定到下拉列表:

public DataTable GetAllCourseName()
{
   SqlConnection objsqlconn = new SqlConnection(conn);
   objsqlconn.Open();
   SqlDataAdapter da = new SqlDataAdapter("select cos_ID, cos_name from course_details", objsqlconn); 
   DataSet ds = new DataSet(); 
   da.Fill(ds, "course_details"); 

   return ds.Tables["course_details"];
}

FillCourseName方法无需更改。