| ASP .NET 2.0 - prosty problem z gridem [wiadomość #713] |
pon, 02 lipiec 2007 17:54  |
Slawomir Wiadomości: 4 Dołączył(a): lipiec 2007 |
Junior Member |
|
|
Witam serdecznie.
Mam pytanie związane z gridem. Wyobraźmy sobie taką sytuację:
Jest sobie w bazie tabela z zadaniami, która ma następującą strukturę:
id_zadania (int)
id_pracownika(int)
zadanie (text)
obok oczywiście istnieje tablica pracownicy
id_pracownika
nazwisko
tabele połączone są oczywiście odpowiednią relacją po id_pracownika
W gridzie chciałbym prezentować zamiast id_pracownika - jego nazwisko.
Pytanie brzmi tak: W jaki sposób rozwiązujecie problem wyświetlania
danych przy możliwości ich edycji? W momencie gdy chcemy użyć trybu
edycji sprawa jest prosta - pole w gridzie typu template i ładujemy do
niego combobox. Ale co w przypadku, gdy jesteśmy w trybie oglądania
danych? Do labela nie da się podpiąć datasource i wskazać pól
zawierających text i wartość.
Mogę sobie wyciągnąć odpowiednim selectem z joinem dane (Select
z.id_zadania, p.nazwisko, z.zadanie from zadania z join pracownicy p on
z.id_zadania=p.id_zadania) i updatować dane w ten sposób:
Update zadania set id_pracownika = (select id_pracownika from pracownicy
where nazwisko = @nazwisko), zadania = @zadanie
ale chyba nie jest to to, o co mi chodzi a już na pewno nie jest to
wydajny mechanizm z punktu widzenia bazy danych. Jak więc sobie poradzić
z takim problemem zgodnie ze sztuką ?
z góry dzięki za podpowiedzi,
pozdrawiam
Sławek
|
|
|
|
| Re: ASP .NET 2.0 - prosty problem z gridem [wiadomość #721 (odpowiedź na #714) ] |
śro, 04 lipiec 2007 02:25  |
Slawomir Wiadomości: 4 Dołączył(a): lipiec 2007 |
Junior Member |
|
|
Yamma napisał(a):
> Przeanalizuj sobie poniższy przykład:
>
> <asp:GridView ID="GridView1" runat="server" AllowPaging="True"
> AllowSorting="True" AutoGenerateColumns="False"
> DataKeyNames="id_zadania" DataSourceID="SqlDataSource1">
> <Columns>
> <asp:CommandField ShowEditButton="True" />
> <asp:BoundField DataField="zadanie" HeaderText="zadanie"
> SortExpression="zadanie" />
> <asp:TemplateField HeaderText="nazwisko" SortExpression="nazwisko">
> <EditItemTemplate>
> <asp:DropDownList ID="DropDownList1" runat="server"
> DataSourceID="SqlDataSource2"
> DataTextField="nazwisko" DataValueField="id_pracownika"
> SelectedValue='<%# Bind("id_pracownika") %>'>
> </asp:DropDownList>
> </EditItemTemplate>
> <ItemTemplate>
> <asp:Label ID="Label1" runat="server" Text='<%# Bind("nazwisko")
> %>'></asp:Label>
> </ItemTemplate>
> </asp:TemplateField>
> </Columns>
> </asp:GridView>
> <asp:SqlDataSource ID="SqlDataSource1" runat="server"
> ConnectionString="<%$ ConnectionStrings:zadaniaConnectionString %>"
> SelectCommand="SELECT id_zadania, id_pracownika, zadanie, nazwisko
> FROM zadania INNER JOIN pracownicy ON zadania.id_pracownika =
> pracownicy.id_pracownika"
> UpdateCommand="UPDATE zadania SET
> zadanie=@zadanie,id_pracownika=@id_pracownika WHERE
> id_zadania=@id_zadania">
> <UpdateParameters>
> <asp:ControlParameter ControlID="GridView1" Name="zadanie"
> PropertyName="SelectedValue" />
> <asp:ControlParameter ControlID="GridView1" Name="id_pracownika"
> PropertyName="SelectedValue" />
> <asp:ControlParameter ControlID="GridView1" Name="id_zadania"
> PropertyName="SelectedValue" />
> </UpdateParameters>
> </asp:SqlDataSource>
> <asp:SqlDataSource ID="SqlDataSource2" runat="server"
> ConnectionString="<%$ ConnectionStrings:zadaniaConnectionString %>"
> SelectCommand="SELECT * FROM [pracownicy]"></asp:SqlDataSource>
>
> yamma
Dzięki, właśnie o to chodziło.
Sławek
|
|
|
Łączny czas generowania strony wyniósł 0,01904 sekund.