Visualizzazione in tabella di record collegati

sabato 09 maggio 2009 - 14.49

squilibrio Profilo | Expert

Ciao a tutti ho due tabelle (attività e tipo), collegate tra loro:


Activities
ID
Description



Type
ID
IDActivity
Description




Vorrei creare una pagina che mi visualizzi l'elenco delle attività (in una colonna) ed accanto le tipologie associate all'attività (in una seconda colonna)

esempio

prima riga

ActivityA typeA

typeB



second riga

ActivityB typeD



terza riga

ActivityC typeE

typeF

typeS



Accanto alla descrizione di ogni tipologia dovrei poi inserire un textbox .... quindi per dare all'utente la possibiltà di inserire un valore per ogni associazione del tipo Attività/Tipo ... e devo salvare questo valore inserito.... come mi consigliate di gestire/creare questa tabella a due livelli?

Grazie

mrub Profilo | Junior Member

Activities
IDactivity
Description

IDtype
idActivity
Type
Description

Usa un griview (gridview1) per le attività utilizzando i template.
in una colonna inserisci:
- una label (IDactivityLabel) che "binda" ad IDactivity
- un altro gridview (gridview2) associato al datasource "SELECT IDtype,... WHERE idActivity=? utilizzando il controlparameter -> IDactivityLabel)

in un altra colonna (di gridview1) inserisci:
- una textbox (NuovaAttivitaTextBox) non associata ad alcun campo
- un linkButton(o imagebutton o button) con commandName="Select"

Ora all'evento selectedindexchanged di griview1:
- recuperi il valore della textbox con GridView1.SelectedRow.FindControl("NuovaAttivitaTextBox").text
- recuperi IDactivity ad es. con GridView1.SelectedDataKey.Value
- esegui una query di inserimento utilizzando i valori recuperati
- .....

Ciao.

squilibrio Profilo | Expert

Grazie per l'aiuto e per la pronta risposta .... ho capito la logica da adottare ... purtroppo non saprei come implementarla impostando da zero la tua soluzione :-(

Potresti darmi qualche dritta?


Grazie

mrub Profilo | Junior Member

usi visual studio?

squilibrio Profilo | Expert

si!

mrub Profilo | Junior Member

Puoi gestire il tutto in modo visuale.
Allora:
- inizia creando un gridview in modo visuale per le attività
- converti le colonne in templatecolumn
- vai nella colonna che contiene IDactivityLabel ed inserisci l'altro gridview il cui datasource conterrà la condizione idActivity=? dove ? sarà associato al controlparameter -> IDactivityLabel). Gridview e IDactivityLabel devono essere nella medesima colonna perchè in modo contenuti nello stesso contenitore)

l'inserimento di un nuovo recortd lo vediamo dopo .... :)

squilibrio Profilo | Expert

Grazie per l'aiuto!!

Sono arrivato alla griglia funzionante con il template column

potresti aiutarmi a proseguire??? grazie mille!!!!


<asp:GridView ID="gvElenco" runat="server" AutoGenerateColumns="False"
Width="99%" ForeColor="#333333" Font-Names="Verdana" DataKeyNames="Id" DataSourceID="odsAttivita"
BorderColor="#999999" BorderStyle="None" BorderWidth="1px" ShowFooter="True"
AllowSorting="True" CellPadding="8" GridLines="Vertical">
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<EditRowStyle BackColor="#999999" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White"/>
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<Columns>
<asp:TemplateField HeaderText="Id" SortExpression="Id">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Id") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Id") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Descrizione"
SortExpression="DescrizioneAttivita">
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("DescrizioneAttivita") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server"
Text='<%# Bind("DescrizioneAttivita") %>'></asp:TextBox>
</EditItemTemplate>
<HeaderStyle HorizontalAlign="Left" />
<ItemStyle HorizontalAlign="Left" />
</asp:TemplateField>
</Columns>
<RowStyle Height="25px" BackColor="#EEEEEE" ForeColor="Black" />
<AlternatingRowStyle BackColor="#DCDCDC" />
<FooterStyle BackColor="#003366" ForeColor="Black" Height="1px" />
<PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#003366" Font-Bold="True" Height="15px" ForeColor="White" />
</asp:GridView>


<asp:ObjectDataSource ID="odsAttivita"
DataObjectTypeName="Spaanjaars.ContactManager.BusinessEntities.Attivita"
runat="server"
DeleteMethod="Delete"
InsertMethod="Save"
SelectMethod="GetList"
TypeName="Spaanjaars.ContactManager.Bll.AttivitaManager"
UpdateMethod="Save"
EnablePaging="False"
SelectCountMethod="SelectCountForGetList">
</asp:ObjectDataSource>

mrub Profilo | Junior Member

<ItemTemplate>
<asp:Label ID="IdLabel" runat="server" Text='<%# Bind("Id") %>'></asp:Label>

qui inserisci il gridview(2) dei tipi associato al datasource dei tipi dove inserisci il controlparameter IdLabel.text

</ItemTemplate>

mrub Profilo | Junior Member

<ItemTemplate>
<asp:Label ID="IdLabel" runat="server" Text='<%# Bind("Id") %>'></asp:Label>

qui inserisci il gridview(2) dei tipi associato al datasource dei tipi dove inserisci il controlparameter IdLabel.text

</ItemTemplate>

squilibrio Profilo | Expert

mmmm non ho ben capito sai... (colpa mia ovviamente)

alcuni dubbi)

1) cosa c'entra la "lbl" alla quale fai riferimento?
2) se inserisco in un nuovo grdiview nella cella (itemtemplate) ... come linko la riga (attività) ai record da visualizzare in ogni singolo gridview presente in ogni riga?
3) e per rendere modificabili i texbox? ... devo lavorare sull'edittemplate e non sull'item?

Potresti farmi un esempio completo di come dovrebbe essere "disegnato" il gridview e di come linko ogni riga (attività) con il dettaglio elementi collegati ad ogni singola attività (quindi il secondo gridview)?

Grazie

mrub Profilo | Junior Member

se vuoi ti posso inviare un esempio con accessadatasource (domani)...
cmq quando crei in modo visuale un accessdatasource puoi inserire dei parametri nella clausaola where ...
basta, dopo aver selezionato "origine parametro"=control, selezionare "ControlID"=ID..Label

Per le textbox ...
se ti riferisci alle textbox per oggiornare i dati tramite datasource ovviamente devono essere contenuti nell'edititem

se ti riferisci alla textbox (non "bindata" ad alcun campo) per inserire tramite SQL da codice un nuovo tipo allora può tranquillamente stare nell'itemtemplate del gridview esterno.

squilibrio Profilo | Expert

Se riesci ad inviarmi un esempio mi fai un grosso favore !!!

Grazie ancora

mrub Profilo | Junior Member

Sono riuscito a trovare un po' di tempo solo ora... spero di esserti stato di aiuto :)

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="IDattivita" DataSourceID="AccessDataSource1" Width="600px" HeaderStyle-CssClass="etichettab" BorderColor="Transparent" BorderWidth="0px" CellSpacing="2" GridLines="None">
<Columns>
<asp:TemplateField InsertVisible="False">
<EditItemTemplate>
<asp:LinkButton ID="SalvaLinkButton" CommandName="Update" CausesValidation="True" tooltip="Salva" runat="server" CssClass="salva25"></asp:LinkButton>
<asp:LinkButton ID="AnnullaLinkButton" CommandName="Cancel" CausesValidation="False" tooltip="Annulla" runat="server" CssClass="annulla25"></asp:LinkButton>
</EditItemTemplate>
<ItemTemplate>
<asp:LinkButton ID="ModificaLinkButton" CommandName="Edit" CausesValidation="False" tooltip="Modifica" runat="server" CssClass="modifica25"></asp:LinkButton>
<asp:LinkButton ID="EliminaLinkButton" CommandName="Delete" CausesValidation="False" tooltip="Elimina" OnClientClick="return confirm('Sei sicuro?');" runat="server" CssClass="elimina25"></asp:LinkButton>
</ItemTemplate>
<ItemStyle Width="60px" CssClass="barrastrumenti" />
</asp:TemplateField>
<asp:BoundField DataField="IDattivita" HeaderText="ID" ReadOnly="True"
SortExpression="IDattivita">
</asp:BoundField>
<asp:TemplateField HeaderText="Attivita" >
<EditItemTemplate>
<asp:TextBox ID="ZonaTextBox" runat="server" Text='<%# Bind("Attivita") %>' MaxLength="50" ></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="AttivitaLabel" runat="server" Text='<%# Bind("Attivita") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Tipi" >
<EditItemTemplate>
<asp:Label ID="IDattivitaLabel1" runat="server" Text='<%# Bind("IDattivita") %>'></asp:Label>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="IDattivitaLabel1" runat="server" Text='<%# Bind("IDattivita") %>'></asp:Label>
<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">nuova attivita</asp:LinkButton>
<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" DataKeyNames="IDtipo"
DataSourceID="ADS_tipi">
<Columns>
<asp:BoundField DataField="IDtipo" HeaderText="IDtipo" InsertVisible="False" ReadOnly="True"
SortExpression="IDtipo" />
<asp:BoundField DataField="Tipo" HeaderText="Tipo" SortExpression="Tipo" />
<asp:BoundField DataField="idAttivita" HeaderText="idAttivita" SortExpression="idAttivita" />
</Columns>
</asp:GridView>
<asp:AccessDataSource ID="ADS_tipi" runat="server" DataFile="~/App_Data/charterdaysicily.mdb"
DeleteCommand="DELETE FROM [Tipi] WHERE [IDtipo] = ?" InsertCommand="INSERT INTO [Tipi] ([IDtipo], [Tipo], [idAttivita]) VALUES (?, ?, ?)"
SelectCommand="SELECT [IDtipo], [Tipo], [idAttivita] FROM [Tipi] WHERE ([idAttivita] = ?)"
UpdateCommand="UPDATE [Tipi] SET [Tipo] = ?, [idAttivita] = ? WHERE [IDtipo] = ?">
<DeleteParameters>
<asp:Parameter Name="IDtipo" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="Tipo" Type="String" />
<asp:Parameter Name="idAttivita" Type="Int32" />
<asp:Parameter Name="IDtipo" Type="Int32" />
</UpdateParameters>
<SelectParameters>
<asp:ControlParameter ControlID="IDattivitaLabel1" Name="idAttivita" PropertyName="Text"
Type="Int32" />
</SelectParameters>
<InsertParameters>
<asp:Parameter Name="IDtipo" Type="Int32" />
<asp:Parameter Name="Tipo" Type="String" />
<asp:Parameter Name="idAttivita" Type="Int32" />
</InsertParameters>
</asp:AccessDataSource>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<HeaderStyle CssClass="tdheader1" Height="20px" />
<RowStyle CssClass="tdVal2" />
<AlternatingRowStyle CssClass="tdVal1" />
</asp:GridView>
</td>
</tr>
</table>
<br />
&nbsp;
<asp:AccessDataSource ID="AccessDataSource1" runat="server" DataFile="~/App_Data/charterdaysicily.mdb"
SelectCommand="SELECT [IDattivita], [Attivita] FROM [attivita]" DeleteCommand="DELETE FROM [attivita] WHERE [IDattivita] = ?" InsertCommand="INSERT INTO [attivita] ([IDattivita], [Attivita]) VALUES (?, ?)" UpdateCommand="UPDATE [attivita] SET [Attivita] = ? WHERE [IDattivita] = ?">
<DeleteParameters>
<asp:Parameter Name="IDattivita" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="Attivita" Type="String" />
<asp:Parameter Name="IDattivita" Type="Int32" />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="IDattivita" Type="Int32" />
<asp:Parameter Name="Attivita" Type="String" />
</InsertParameters>
</asp:AccessDataSource>




Protected Sub LinkButton1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim mioidL As Label = sender.namingcontainer.FindControl("IDattivitaLabel1")
Dim mioidattivita As Integer = mioidL.Text
Dim miogridview As GridView = sender.namingcontainer.FindControl("GridView2")
nuovoattivita(mioidattivita, miogridview)
End Sub
Sub nuovoattivita(ByVal a_idattiivita As Integer, ByVal a_gridview As GridView)
miaconn.Open()
Dim miasql As String = "INSERT INTO [Tipi] ([idAttivita]) VALUES (?)"
Dim miocomando As New OleDbCommand(miasql, miaconn)
miocomando.Parameters.Add(New System.Data.OleDb.OleDbParameter("idAttivita", System.Data.OleDb.OleDbType.Integer, 0, "idAttivita"))
Try
miocomando.Parameters("idAttivita").Value = a_idattiivita
miocomando.ExecuteNonQuery()
miaconn.Close()
Me.tip.Text = "Per completare l'inserimento inserisci i dati e fai clic su salva. "

a_gridview.Sort("IDtipo", SortDirection.Descending)
a_gridview.DataBind()
a_gridview.EditIndex = 0

Catch exc As Exception
Me.tip.Text = "Inserimento non riuscito!!!" & exc.Message & "-" & exc.Source
miaconn.Close()
GridView1.DataBind()
End Try
End Sub
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5