mozemy wyobrazic sobie 2 scenariusze, zalezy od tego ile bedzie danych w tabeli Auta
- jesli malo
raz laczymy sie do bazy i pobieramy zawartosc Auta do np. DataTable (ewentualnie mozemy pomyslec nad jakims mechanizmem co jakis czas odswiezajacym nam te dane)
- jesli danych jest duzo
proponuje jednak po zmainie marki laczyc sie za kazdym razem do bazy zeby wybrac modele
z moich doswiadczen wynika ze jesli polaczenie do bazy jest dosc szybkie, np. dlatego ze aplikacja (web) stoi na tej samej maszynie co sql srv to jest to wydajny mechanizm
wiec zaproponuje rozwiazanie 2:
w Page_Load
if (!Page.IsPostBack)
GetAllCarBrands();
void GetAllCarBrands()
{
SqlConnection conn = new SqlConnection(myConnStr);
SqlCommand comm = new ("select distinct marka from Auta", conn);
SqlDataReader r = null;
try
{
conn.Open();
r = comm.ExecuteReader();
comboBrands.DisplayMember = "marka";
comboBrands.ValueMember = "marka";
comboBrands.DataSource = r;
}
catch()
{/jakis komunikat dla usera/}
finally
{
if (r!=null && !r.IsClosed) r.Close();
conn.Close();
}
}
przykladowa deklaracja DropDownList w kodzie strony z obsluga zdarzenia SelectedIndexChanged
<asp:DropDownList ID="DropDownList1" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"></asp:DropDownList>
teraz w code behind masz metode:
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(myConnStr);
SqlCommand comm = new ("select distinct model from Auta where marka=@marka", conn);
comm.Parameters.Add("@marka", SqlDbTypes.NVarChar).Value = comboBrandes.SelectedValue;
SqlDataReader r = null;
try
{
conn.Open();
r = comm.ExecuteReader();
comboModels.DisplayMember = "model";
comboModels.ValueMember = "model";
comboModels.DataSource = r;
}
catch()
{/jakis komunikat dla usera/}
finally
{
if (r!=null && !r.IsClosed) r.Close();
conn.Close();
}
}
pisane z palca, wiec moga byc literowki i bledy, ale z grubsza to tak powinno byc :)