当我将以下方法作为下拉列表的数据源调用时,我得到 System.Data.DataRowView 而不是文件夹名称。我哪里做错了?
public DataTable listFolders()
{
DataTable dt = new DataTable();
dt.Columns.Add("name", typeof(string));
dt.Columns.Add("fullname", typeof(string));
string defaultPath = Server.MapPath(ConfigurationManager.AppSettings["defaultPath"].ToString());
foreach (var dir in new DirectoryInfo(defaultPath).GetDirectories("*", SearchOption.TopDirectoryOnly))
{
dr = dt.NewRow();
dr["name"] = dir.Name;
dr["fullname"] = dir.FullName;
dt.Rows.Add(dr);
}
return dt;
}
我的方法调用
ddl.DataSource = listFolders();
ddl.DataBind();
答案 0 :(得分:1)
您必须指定DataTextField
和DataValueField
:
ddl.DataSource = listFolders();
ddl.DataTextField = "name"; // or fullname
ddl.DataValueField = "fullname"; // or name
ddl.DataBind();
否则.NET不知道您要显示哪个字段以及要将其用作键。您也可以只使用其中之一,然后文本也是值,反之亦然。但是你不能省略它,否则使用object.ToString()
,这是DataRowView
的全类型名称。