将数据从数据库绑定到.NET中的下拉列表

时间:2011-07-28 12:52:10

标签: c# .net asp.net oracle

我遵循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>

我想在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();
    }
}

4 个答案:

答案 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

请参阅:http://msdn.microsoft.com/en-us/library/9a4kyhcx.aspx