Связывание данных из базы данных с выпадающим списком в .NET - PullRequest
1 голос
/ 28 июля 2011

Я придерживаюсь 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 &quot;Usernames&quot; FROM &quot;Users&quot;">
</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();
    }
}

Ответы [ 4 ]

5 голосов
/ 28 июля 2011
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 - значение этого поля

2 голосов
/ 28 июля 2011

Источник данных должен реализовывать IEnumerable, но методы вашего обработчика базы данных возвращают строку.Я не знаю, что делает ваш класс databaseAdapter, но он должен предоставлять перечисляемую коллекцию строк из базы данных, и это то, что вам нужно вернуть.

1 голос
/ 28 июля 2011
<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();
0 голосов
/ 28 июля 2011

Вам нужно использовать объектный источник данных на странице aspx, а не Sqldatasource

см .: http://msdn.microsoft.com/en-us/library/9a4kyhcx.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...