我遵循3层体系结构,所以我不想在aspx页面中附加数据源,如下所示:
<asp:DropDownList ToolTip="Select User" ID="users" runat="server"
DataSourceID="SqlDataSource1" DataTextField="CURRENCY_SHORT_DESCRIPTION"
DataValueField="CURRENCY_SHORT_DESCRIPTION" Width="100px">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>"
SelectCommand="SELECT DISTINCT "Usernames" FROM "Users"">
</asp:SqlDataSource>
我想在datalayer中有一个调用相同SQL语句并接收数据的方法,然后我会在业务层中有一个方法将数据绑定到下拉列表,如下所示:
private void populateUnitList()
{
unitList.DataSource = DatabaseHandler.getUnitList();
unitList.DataBind();
}
这是我在数据库处理程序中的代码:
public static string getUnitList()
{
DatabaseAdapter dba = DatabaseAdapter.getInstance();
string sqlQuery = ("SELECT DISTINCT Usernames FROM Users");
return dba.queryDatabase(sqlQuery).ToString();
}
我正在使用C#和.NET Framework 4.0。这对我来说还不行。
更新#3:
它正如我所希望的那样工作,在这里:
//controller class
private void populateCurrencyList()
{
currencyList.DataSource = DatabaseHandler.getCurrencyList();
currencyList.DataTextField = "CURRENCY_SHORT_DESCRIPTION";
currencyList.DataValueField = "CURRENCY_SHORT_DESCRIPTION";
currencyList.DataBind();
}
//db handler class
public static DataTable getCurrencyList()
{
DatabaseAdapter dba = DatabaseAdapter.getInstance();
string sqlQuery = ("SELECT DISTINCT CURRENCY_SHORT_DESCRIPTION FROM CURRENCY");
DataTable dt = new DataTable();
dt.Load(dba.queryDatabase(sqlQuery));
return dt;
}
//controller class, the !IsPostBack prevents duplication of fields
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
populateUnitList();
populateCurrencyList();
}
}
答案 0 :(得分:5)
SqlConnection conn = new SqlConnection("Connectionstring")
SqlCommand cmd = new SqlCommand ();
cmd.CommandText = " Select * From GetUsersID";
cmd.Connection = conn;
conn.Open();
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
conn.Close();
DropDownList1.DataSource = dt;
DropDownList1.DataTextField = "Name";
DropDownList1.DataValueField = "ID";
DropDownList1.DataBind(); `
您必须提及下拉列表的DataTextField和DataValueField属性。 DataTextField是要显示的字段,DataValueField是该字段的值
答案 1 :(得分:2)
DataSource必须实现IEnumerable,但数据库处理程序方法返回一个字符串。我不知道你的databaseAdapter类在做什么,但是它应该从数据库中公开一个可枚举的行集合,这就是你需要返回的行。
答案 2 :(得分:1)
<asp:DropDownList ID="ddl1" DataTextField="Desc" DataValueField="Id"
runat="server" />
List<yourclass> operation = new List<yourclass>();
ddl1.DataSource = GetOperationData; //get connect to your BAL or DAL
ddl1.DataTextField = "Desc";
ddl1.DataValueField = "Id";
ddl1.DataBind();
答案 3 :(得分:0)
您需要在aspx页面中使用Objectdatasource而不是Sqldatasource