Mam problem nad którym spędziłem trochę czasu i nie udało mi się znaleźć rozwiązania, proszę więc o pomoc. Na Web Form mam około 15 textbox-ów typu imię, nazwisko, adres... itp. oraz SqlDataSource w którym mam skonfigurowane połączenie, nie potrafię sprawić aby przy Page Load textboxy wypełniły się danymi z zapytania w SqlDataSource. Ktoś ma pomysł jak to rozwiązać?? Z góry dziękuje za pomoc i pozdrawiam.
Napisać zwykłą metodę z użyciem SqlDataReader, która wstawia dane do Textboxów - ręcznie!
A jeśli chcesz trochę to zautomatyzować, możesz stworzyć jakiś swój moduł ORM, który ładnie to powstawia.
.. Pewnie i by się udało z użyciem DetailsPanela..
Dzięki wielkie za pomocną odpowiedź. Moje rozwiązanie poniżej:
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection dbpolacz = new SqlConnection(" ---String połączenia z bazą--- ");
try
{
dbpolacz.Open();
SqlCommand querySeansDane = new SqlCommand ("dbo.PORT_PROC_DANE_OSOBOWE", dbpolacz);
querySeansDane.CommandType = CommandType.StoredProcedure;
querySeansDane.Parameters.Add("@IDENTY","IK090909");
SqlDataReader czytacz = querySeansDane.ExecuteReader();
if(czytacz.Read())
{
tb_nazwisko.Text = czytacz["NAZWISKO"].ToString();
tb_imie.Text = czytacz["IMIE"].ToString();
tb_dru_imie.Text = czytacz["IMIE_DRUG"].ToString();
tb_pesel.Text = czytacz["PESEL"].ToString();
string plec= czytacz["PLEC"].ToString();
if (plec == "M") tb_plec.Text = "MĘŻCZYZNA";
if (plec == "K") tb_plec.Text = "KOBIETA";
string stan_cyw = czytacz["STAN_CYWIL"].ToString();
if (stan_cyw == "KA") tb_stan_cyw.Text = "PANNA";
if (stan_cyw == "KB") tb_stan_cyw.Text = "MĘŻATKA";
if (stan_cyw == "KC") tb_stan_cyw.Text = "WOLNA";
if (stan_cyw == "KD") tb_stan_cyw.Text = "WDOWA";
if (stan_cyw == "KE") tb_stan_cyw.Text = "ROZWIEDZIONA";
if (stan_cyw == "MA") tb_stan_cyw.Text = "KAWALER";
if (stan_cyw == "MB") tb_stan_cyw.Text = "ŻONATY";
if (stan_cyw == "MC") tb_stan_cyw.Text = "WOLNY";
if (stan_cyw == "MD") tb_stan_cyw.Text = "WDOWIEC";
if (stan_cyw == "ME") tb_stan_cyw.Text = "ROZWIEDZIONY";
tb_naz_rod.Text = czytacz["NAZ_RODOW"].ToString();
tb_imie_ojca.Text = czytacz["IMIE_OJCA"].ToString();
tb_imie_matki.Text = czytacz["IMIE_MATKI"].ToString();
tb_nazw_rod_matki.Text = czytacz["NAZ_RODMAT"].ToString();
tb_data_uro.Text = czytacz["DATA_URODZ"].ToString();
tb_data_zgon.Text = czytacz["DATA_ZGONU"].ToString();
tb_miej_urodz.Text = czytacz["MIEJ_URODZ"].ToString();
tb_nip.Text = czytacz["NIP"].ToString();
tb_identyfikator.Text = czytacz["IDENTY"].ToString();
tb_obywatelstwo_1.Text = czytacz["KOD_OBY"].ToString();
tb_obywatelstwo_2.Text = czytacz["NAZWA_OBY"].ToString();
tb_dor_naukowy.Text = czytacz["DOROBEK"].ToString();
tb_tyt_naukowy_1.Text = czytacz["KOD_TYT_NAUK"].ToString();
tb_tyt_naukowy_2.Text = czytacz["NAZWA_TYT_NAUK"].ToString();
tb_prawo_jazd_kat.Text = czytacz["PJ_KAT"].ToString();
if ((czytacz["PJ_ZAWOD"].ToString()) == "T") cb_zawodowe_praw_jazd.Checked = true;
else cb_zawodowe_praw_jazd.Checked = false;
tb_sprzeciw.Text = czytacz["SPRZECIW"].ToString();
tb_karalnosc.Text = czytacz["KARALNOSC"].ToString();
// tb_num_dostawcy.Text
// tb_num_odbiorcy.Text
}
// czytacz.NextResult();
// if(czytacz.Read()){}
}
catch(Exception ex)
{/*komunikat błędu*/}
finally
{
dbpolacz.Close();
}
}
Xavier_pr napisał(a)
Dzięki wielkie za pomocną odpowiedź. Moje rozwiązanie poniżej:
string stan_cyw = czytacz["STAN_CYWIL"].ToString();
if (stan_cyw == "KA") tb_stan_cyw.Text = "PANNA";
if (stan_cyw == "KB") tb_stan_cyw.Text = "MĘŻATKA";
if (stan_cyw == "KC") tb_stan_cyw.Text = "WOLNA";
if (stan_cyw == "KD") tb_stan_cyw.Text = "WDOWA";
if (stan_cyw == "KE") tb_stan_cyw.Text = "ROZWIEDZIONA";
if (stan_cyw == "MA") tb_stan_cyw.Text = "KAWALER";
if (stan_cyw == "MB") tb_stan_cyw.Text = "ŻONATY";
if (stan_cyw == "MC") tb_stan_cyw.Text = "WOLNY";
if (stan_cyw == "MD") tb_stan_cyw.Text = "WDOWIEC";
if (stan_cyw == "ME") tb_stan_cyw.Text = "ROZWIEDZIONY";
Tylko po co 10 razy sprawdzać jedną wartość, nie lepiej użyć else if?
Albo w ogóle w takim przypadku jakiegoś słownika.
Zresztą, tyle tych textboxów, że może lepiej je do jakiejś kolekcji wrzucić...
Rzeczywiście lepiej było by to zrobić przez elsa ponieważ po spełnieniu warunku reszta nie była by już sprawdzana, ale to nieistotne w tym temacie.
Udało mi się znaleŹć inny sposób niż napisanie metody z palca wykożystującej SqlDataReadera.
Jest specjalna kontrolka DetailsView, którą podłącza się do bazy za pomocą kreatora. Wewnątrz niej można umieścić textboxy które będą automatycznie wypełniane danymi z bazy.
<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False"
DataSourceID="SqlDataSource1" Height="50px" Width="125px"
BorderStyle="None" GridLines="None" style="margin-left: 0px">
<Fields>
<asp:TemplateField>
<ItemTemplate>
<table style="width: 100%; height: 36px;">
<tr>
<td class="style22">
Nazwisko:</td>
<td class="style23">
Imię:</td>
<td class="style32">
Drugie imię:</td>
<td class="style31">
PESEL:</td>
</tr>
<tr>
<td class="style21" style="text-align: left">
<asp:TextBox ID="tb_nazwisko" runat="server" Width="247px" ReadOnly="True"
Text='<%# Bind("NAZWISKO") %>'></asp:TextBox>
</td>
<td class="style20" style="text-align: left">
<asp:TextBox ID="tb_imie" runat="server" ReadOnly="True"
Text='<%# Bind("IMIE") %>'></asp:TextBox>
</td>
<td class="style20" style="text-align: left">
<asp:TextBox ID="tb_dru_imie" runat="server" ReadOnly="True"
Text='<%# Bind("IMIE_DRUG") %>'></asp:TextBox>
</td>
<td style="text-align: left">
<asp:TextBox ID="tb_pesel" runat="server" ReadOnly="True"
Text='<%# Bind("PESEL") %>'></asp:TextBox>
</td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
</Fields>
</asp:DetailsView>