dev*_*ull 46 c# asp.net sql-server-2008
我正在从SQL Server数据库填充DropDownList,如下所示.它工作正常,但我不确定这是一个好方法.有人可以对这种方法有所了解,并给出一些改进吗?
private void LoadSubjects()
{
ddlSubjects.Items.Clear();
string selectSQL = "SELECT SubjectID,SubjectName FROM Students.dbo.Subjects";
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(selectSQL, con);
SqlDataReader reader;
try
{
ListItem newItem = new ListItem();
newItem.Text = "<Select Subject>";
newItem.Value = "0";
ddlSubjects.Items.Add(newItem);
con.Open();
reader = cmd.ExecuteReader();
while (reader.Read())
{
newItem = new ListItem();
newItem.Text = reader["SubjectName"].ToString();
newItem.Value = reader["SubjectID"].ToString();
ddlSubjects.Items.Add(newItem);
}
reader.Close();
}
catch (Exception err)
{
//TODO
}
finally
{
con.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
Tim*_*Tim 98
您可以将DropDownList绑定到数据源(DataTable,List,DataSet,SqlDataSource等).
例如,如果您想使用DataTable:
ddlSubject.DataSource = subjectsTable;
ddlSubject.DataTextField = "SubjectNamne";
ddlSubject.DataValueField = "SubjectID";
ddlSubject.DataBind();
Run Code Online (Sandbox Code Playgroud)
编辑 - 更完整的例子
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"));
}
Run Code Online (Sandbox Code Playgroud)
要通过标记而不是代码隐藏来设置初始值,请指定选项并将AppendDataBoundItems属性设置为true:
<asp:DropDownList ID="ddlSubject" runat="server" AppendDataBoundItems="true">
<asp:ListItem Text="<Select Subject>" Value="0" />
</asp:DropDownList>
Run Code Online (Sandbox Code Playgroud)
然后,您可以将DropDownList绑定到代码隐藏中的DataSource(只需记住删除:
ddlSubject.Items.Insert(0, new ListItem("<Select Subject>", "0"));
Run Code Online (Sandbox Code Playgroud)
从代码隐藏,或者你将有两个""项目.
Fan*_*o68 15
我希望我不夸大显而易见的事,但为什么不直接在ASP方面呢?除非您根据程序中的某些条件动态更改SQL,否则应尽可能避免代码隐藏.
您可以直接在ASP中使用SqlDataSource控件和下拉列表中的属性直接执行上述所有操作.
<asp:GridView ID="gvSubjects" runat="server" DataKeyNames="SubjectID" OnRowDataBound="GridView_RowDataBound" OnDataBound="GridView_DataBound">
<Columns>
<asp:TemplateField HeaderText="Subjects">
<ItemTemplate>
<asp:DropDownList ID="ddlSubjects" runat="server" DataSourceID="sdsSubjects" DataTextField="SubjectName" DataValueField="SubjectID">
</asp:DropDownList>
<asp:SqlDataSource ID="sdsSubjects" runat="server"
SelectCommand="SELECT SubjectID,SubjectName FROM Students.dbo.Subjects"></asp:SqlDataSource>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)