Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [asp] problema con nested gridview

    sono un neofitissimo di asp.net.

    sto creando una tabella per cui ogni riga esplode in una colonna determinati valori di una sottoquery... tipico meccanismo master-detail

    ho provato l'utilizzo delle nested gridview,
    ma ora non so referenziare la gridview nested..... cioè volevo assegnargli il datasource, ma non so come farlo....

    c'è qualcuno che puo' aiutarmi (calcolando che è il 3 giorno di asp.net)

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    Ciao!
    domanda, per capire meglio:
    tu vuoi fare una sotto query per ogni rigra della tabella?
    ovvero, hai una colonna che contiene la sottolista dei details?
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  3. #3
    esatto....lo so che mi sono spiegato da cani.....

    Ho visto qualcosina in rete, ma niente che mi dica come accedere alla componente gridview all'interno dell'altra gridview.

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    CIAO!

    Allora, innanzi tutto all' interno del file aspx devi creare una colonna di tipo TemplateField:

    <columns>
    <asp:TemplateField>
    <asp:GridView id="nestedGW" runat="server" />
    </asp:TemplateField>

    (Supponiamo sia la PRIMA colonna, per comodita, cioe con indice zero=

    inoltre, nella gridview principale, imposti l'attributo onRowDataBound al valore "intecerctRowDataBound". Quindi definisci questo metodo nel modo seguente:

    public void intecerctRowDataBound( Object src, GridViewRowEventArgs e ) {
    // l' if seguente serve per scartare footer e header
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
    // recupera chiave detail
    DataRowView currentRow= (DataRowView)e.Row.DataItem;
    int idChiaveDetail = (int) currentRow["chiaveDetail"];

    // recupera gridview annidato
    GridView nestedGridView = (GridView) e.Row.Cells[0].findControl("nestedGW");

    // TODO: fare sotto query e popolare nestedGridView
    }
    }

    Spero si capisca qualcosa!
    Cmq se hai bisogno chiedi pure!!

    Dato che fai queste cose gia al terzo giorno, mi sembri una persona che si impegna, e mi fa piacere quindi se ti posso aiutare
    }
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  5. #5
    Innanzitutto ti ringrazio vivamente.

    Ora veniamo al problema.
    La colonna TemplateField l'avevo già impostata, però il mio codice è:

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
    <Columns>
    <asp:TemplateField HeaderText="Persone">
    <ItemTemplate>
    <asp:Label ID="nestedGW" runat="server"></asp:Label>
    </ItemTemplate>
    </asp:TemplateField>
    <asp:BoundField DataField="CONTATTO" HeaderText="Contatto" />
    <asp:BoundField DataField="LOCALITA" HeaderText="Localita" />
    <asp:BoundField DataField="CAP" HeaderText="CAP" />
    </Columns>
    </asp:GridView>

    Ho provato a metterlo come tu hai definito ma mi da errore creating control gridview1.
    type system.web....etc... doesn't have a public property named "Gridview".

    Penso che pero' sia lo stesso di quanto ho scritto sopra io.

    Ora andiamo ai problemi successivi..

    ah.. primo punto, io utilizzo VB come linguaggio, anche se con un po' di interpretazione forse ci arrivo.....

    Poi il punto cruciale.... nelle proprietà dell'oggetto gridview non vedo onRowDataBound.... ma trovo un RowDataBound... io ho provato lì ad assegnare la sub intecerctRowDataBound, ma non so se è corretto....

    se così fosse ora devo tradurre il tuo c, nel mio vb.. giusto?

    grazie davvero infinite

  6. #6
    Sono arrivato a questo punto....
    La griglia l'ho creata
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
    Width="395px">
    <Columns>
    <asp:TemplateField HeaderText="Persone">
    <ItemTemplate>
    <asp:GridView ID="nestedGW" runat="server">
    </asp:GridView>
    </ItemTemplate>
    </asp:TemplateField>
    <asp:BoundField DataField="CONTATTI" HeaderText="Contatto" />
    <asp:BoundField DataField="LOCALITA" HeaderText="Localita" />
    <asp:BoundField DataField="CAP" HeaderText="CAP" />
    <asp:TemplateField HeaderText="Prova">
    <ItemTemplate>
    <asp:Label ID="PROVA" runat="server">
    </asp:Label>
    </ItemTemplate>
    </asp:TemplateField>

    </Columns>
    </asp:GridView>

    ma non riesco a mettere i valori dentro la sottogriglia.....

    Ho provato a mettere anche un template label ed a scrivergli "Ciao" ma a video non vedo niente, ma in debug entro.....
    Posto sotto il codice.

    Protected Sub intecerctRowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound

    If e.Row.RowType = DataControlRowType.DataRow Then

    Dim grd As GridView

    grd = CType(e.Row.FindControl("nestedGW"), GridView)
    Dim oRubrica As New DalRubrica
    Dim dsRubrica As New dsRubrica

    dsRubrica = oRubrica.CaricaRubrica(txtStringaCerca.Text, 5)

    grd.DataSource = dsRubrica

    Dim lbl As String = CType(e.Row.FindControl("PROVA"), Label).Text
    lbl = "CIao"
    End If

    End Sub



    Dove sbaglio???

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    ci sei quasi!!
    :-)

    ti manca solo il databind:

    grd.DataBind();

    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  8. #8
    Eh...no... mi sa che non ci sono....

    Protected Sub intecerctRowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound


    If e.Row.RowType = DataControlRowType.DataRow Then

    If Not (e.Row.RowState = DataControlRowState.Edit) Then
    e.Row.RowState = DataControlRowState.Edit
    Dim grd As GridView = CType(e.Row.FindControl("nestedGW"), GridView)
    Dim oRubrica As New DalRubrica
    Dim dsRubrica As New dsRubrica

    dsRubrica = oRubrica.CaricaRubrica(txtStringaCerca.Text, 5)

    grd.DataSource = dsRubrica
    grd.BackColor = Drawing.Color.Red
    grd.DataBind()

    Dim lbl As String = CType(e.Row.FindControl("PROVA"), Label).Text
    lbl = "CIao"


    End If
    End If

    End Sub

    ho aggiunto quello che mi dici,ma niente.... ma la cosa paradossale è che, seguendo questo ragionamento anche il template 2, quello con ID="PROVA" avrebbe dovuto presentarmi qualcosa, ma invece vedo le colonne sempre desolatamente vuote.

    Eppure lì dentro ci entra.

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    mm dsRubrica contiene righe?

    per la stringa prova, c' e' un piccolo errore; prova cosi:

    CType(e.Row.FindControl("PROVA"), Label).Text = "prova"

    ps: magari ne parliamo in privato?
    dato che mi sa che stiamo sforando rispetto al titolo del post!
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.