Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Was ist der richtige Weg, um eine DropDownList aus einer Datenbank zu füllen?

Sie könnten die DropDownList an eine Datenquelle (DataTable, List, DataSet, SqlDataSource usw.) binden.

Wenn Sie beispielsweise eine DataTable verwenden möchten:

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

BEARBEITEN - Vollständigeres Beispiel

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"));

}

Um einen Anfangswert über das Markup statt Code-Behind festzulegen, geben Sie die Option(en) an und setzen Sie das Attribut AppendDataBoundItems auf true:

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

Sie könnten dann die DropDownList im CodeBehind an eine DataSource binden (denken Sie nur daran, Folgendes zu entfernen:

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

aus dem Code-Behind, oder Sie haben zwei "" Elemente.