데이터베이스에서 드롭다운 목록을 채우는 올바른 방법은 무엇입니까?
아래와 같이 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();
}
}
DropDownList를 데이터 원본(DataTable, List, DataSet, SqlDataSource 등)에 바인딩할 수 있습니다.
예를 들어, DataTable을 사용하려는 경우:
ddlSubject.DataSource = subjectsTable;
ddlSubject.DataTextField = "SubjectNamne";
ddlSubject.DataValueField = "SubjectID";
ddlSubject.DataBind();
EDIT - 보다 완벽한 예제
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"));
}
코드 비하인드가 아닌 마크업을 통해 초기값을 설정하려면 옵션을 지정하고 AddDataBoundItems 특성을 true로 설정합니다.
<asp:DropDownList ID="ddlSubject" runat="server" AppendDataBoundItems="true">
<asp:ListItem Text="<Select Subject>" Value="0" />
</asp:DropDownList>
그런 다음 DropDownList를 코드 뒤에 있는 DataSource에 바인딩할 수 있습니다(단, 제거해야 함:
ddlSubject.Items.Insert(0, new ListItem("<Select Subject>", "0"));
코드 비하인드에서, 그렇지 않으면 두 개의 "" 아이템을 갖게 됩니다.
저는 제가 명백한 것을 과대평가하는 것이 아니기를 바라지만, ASP 측에서 직접 하는 것은 어떨까요?프로그램의 특정 조건을 기반으로 SQL을 동적으로 변경하지 않는 한 코드를 최대한 사용하지 않는 것이 좋습니다.
SqlDataSource 컨트롤과 드롭다운 목록의 속성을 사용하여 코드 없이 ASP에서 직접 위의 모든 작업을 수행할 수 있습니다.
<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>
public void getClientNameDropDowndata()
{
getConnection = Connection.SetConnection(); // to connect with data base Configure manager
string ClientName = "Select ClientName from Client ";
SqlCommand ClientNameCommand = new SqlCommand(ClientName, getConnection);
ClientNameCommand.CommandType = CommandType.Text;
SqlDataReader ClientNameData;
ClientNameData = ClientNameCommand.ExecuteReader();
if (ClientNameData.HasRows)
{
DropDownList_ClientName.DataSource = ClientNameData;
DropDownList_ClientName.DataValueField = "ClientName";
DropDownList_ClientName.DataTextField="ClientName";
DropDownList_ClientName.DataBind();
}
else
{
MessageBox.Show("No is found");
CloseConnection = new Connection();
CloseConnection.closeConnection(); // close the connection
}
}
((TextBox)GridView1.Rows[e.NewEditIndex].Cells[3].Controls[0]).Enabled = false;
언급URL : https://stackoverflow.com/questions/7227510/what-is-the-right-way-to-populate-a-dropdownlist-from-a-database
'programing' 카테고리의 다른 글
중복된 행의 인덱스 찾기 (0) | 2023.09.11 |
---|---|
요소를 사용하여 Python에서 XML 구문 분석트리 예제 (0) | 2023.09.11 |
워드프레스 쇼트코드가 작동하지 않음 (0) | 2023.09.11 |
MySQLDB 패키지 설치 방법은?(가져오기 오류: setuptools라는 모듈이 없습니다.) (0) | 2023.09.11 |
IIS에서 브라우저 캐싱 활용(구글 페이지 속도 문제) (0) | 2023.09.11 |