sql >> Databasteknik >  >> RDS >> Sqlserver

Vad är det rätta sättet att fylla i en DropDownList från en databas?

Du kan binda DropDownList till en datakälla (DataTable, List, DataSet, SqlDataSource, etc).

Till exempel, om du vill använda en DataTable:

ddlSubject.DataSource = subjectsTable;
ddlSubject.DataTextField = "SubjectNamne";
ddlSubject.DataValueField = "SubjectID";
ddlSubject.DataBind();

EDIT - Mer komplett exempel

private void LoadSubjects()
{

    DataTable subjects = new DataTable();

    using (SqlConnection con = new SqlConnection(connectionString))
    {

        try
        {
            SqlDataAdapter adapter = new SqlDataAdapter("SELECT SubjectID, SubjectName FROM Students.dbo.Subjects", con);
            adapter.Fill(subjects);

            ddlSubject.DataSource = subjects;
            ddlSubject.DataTextField = "SubjectNamne";
            ddlSubject.DataValueField = "SubjectID";
            ddlSubject.DataBind();
        }
        catch (Exception ex)
        {
            // Handle the error
        }

    }

    // Add the initial item - you can add this even if the options from the
    // db were not successfully loaded
    ddlSubject.Items.Insert(0, new ListItem("<Select Subject>", "0"));

}

För att ställa in ett initialt värde via uppmärkningen, snarare än kod-bakom, anger du alternativen och ställer in attributet AppendDataBoundItems till true:

<asp:DropDownList ID="ddlSubject" runat="server" AppendDataBoundItems="true">
    <asp:ListItem Text="<Select Subject>" Value="0" />
</asp:DropDownList>

Du kan sedan binda DropDownList till en datakälla i koden bakom (kom bara ihåg att ta bort:

ddlSubject.Items.Insert(0, new ListItem("<Select Subject>", "0"));

från koden bakom, annars har du två "" objekt.



  1. Något snabbare än get_headers()

  2. SQL-spårning, händelse 10046 i Oracle:trcsess, tkprof-verktyg

  3. En lösning för markörstödet är inte en implementerad funktion för SQL Server Parallel DataWarehousing TDS-fel

  4. Lägg till en kolumn till en befintlig tabell i SQLite