Я придерживаюсь 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>
Я хочу иметь метод в уровне данных, который вызывает тот жеОператор 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();
}
}