Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,582

    [merge cells ] gridview o datagrid

    salve a tutti
    dovrei unire celle o colonne, in asp mi bastava impostare il "colspan" oppure "rowspan" e aggiungere mano mano le righe o colonne nella colonna,riga successiva
    in asp.net č possibile fare una cosa del genere? se si come?

    grazie
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Io non userei nč l'uno nč l'altro ma farei una table a mano. Perō, tempo fa, in questo forum ho visto questo esempio che ti ripropongo. L'esempio crea una riga di intestazione unendo due colonne.

    codice:
    <%@ Page Language="C#"  %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
    
        protected void Page_Load(object sender, EventArgs e)
        {
            ModuloWeb.DataBind(this.GridView1, MioModulo.StringaConnessioneTest, "SELECT * FROM REGIONI ORDER BY NOME_REGIONE", new string[] { "codice_istat_regione" });
        }
    
    
        protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
        {
            //reindirizzo il metodo render predefinito al metodo personalizzato
            if (e.Row.RowType == DataControlRowType.Header)
                e.Row.SetRenderMethodDelegate(CreaIntestazione);
        }
    
        private void CreaIntestazione(HtmlTextWriter writer, Control ctl)
        { 
            //non c'č bisogno di <tr> perchč il writer lo mette in automatico
            writer.Write("<td colspan=\"2\" align=\"center\" style=\"color:darkblue;background-color:#99ccff\" >CAMPI</td>");
            writer.Write("</tr>");
            this.GridView1.HeaderStyle.AddAttributesToRender(writer);
            
            //ricostruisco la testata originale generata da gridwiew
            writer.RenderBeginTag("tr");
            int ind = 0;
            while (ind <= ctl.Controls.Count - 1)
            {
                ctl.Controls[ind++].RenderControl(writer);
                
            }
            //non c'č bisogno della chiusura </tr> perchč il writer lo mette in automatico
            
        }
        
        
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Pagina senza titolo</title>
        <link href="../../../../stili/Styles.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
        <form id="form1" runat="server">
            <asp:GridView ID="GridView1" runat="server" EnableViewState="false" CellPadding="4" ForeColor="#333333" GridLines="None" OnRowCreated="GridView1_RowCreated">
                <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
                <EditRowStyle BackColor="#999999" />
                <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
                <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
                <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
            </asp:GridView>
        </form>
    </body>
    </html>
    Pietro

  3. #3
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,582
    ciao
    provando il tuo codice (scusa del ritardo, ma mi avevano associato ad un'altra attivita')

    ho cercato di tradurlo in vb.net
    ma nella parte di codice che richiama la funzione "CreaIntestazione(HtmlTextWriter writer, Control ctl)",mi da un errore in quanto vuole che gli passi un argomento

    mentre nel tuo codcie non gli passi nessun argomento

    o il c# funzona diversamente (ma non mi pare)
    oppure ho sbagliato qualcosa io,quindi visto che mi sto impappinando mi puoi spiagar ecome mai non passi nessun argomento e pare che ti funziona bene?
    grazie
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    il metodo SetRenderMethodDelegate, ha come argomento un delegate.

    in c# la sintassi č:
    e.Row.SetRenderMethodDelegate(CreaIntestazione);

    dove CreaIntestazione č il puntatore (indirizzo) della funzione


    Purtroppo in basic la sintassi č prolissa:
    e.Row.SetRenderMethodDelegate(AddressOf CreaIntestazione)

    la traduzione, se sei ancora interessato č:
    codice:
    <%@ Page Language="VB" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
            libreria.DataBind(Me.GridView1, MioModulo.StringaConnessioneTest, "SELECT * FROM REGIONI ORDER BY NOME_REGIONE", New String() {"codice_istat_regione"})
        End Sub
        
        
        Protected Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
            If (e.Row.RowType = DataControlRowType.Header) Then
                e.Row.SetRenderMethodDelegate(AddressOf CreaIntestazione)
            End If
                
    
        End Sub
        
        Private Sub CreaIntestazione(ByVal writer As HtmlTextWriter, ByVal ctl As Control)
            '//non c'č bisogno di <tr> perchč il writer lo mette in automatico
            writer.Write("<td colspan=""2"" align=""center"" style=""color:darkblue;background-color:#99ccff"" >CAMPI</td>")
            writer.Write("</tr>")
            Me.GridView1.HeaderStyle.AddAttributesToRender(writer)
            
            '//ricostruisco la testata originale generata da gridwiew
            writer.RenderBeginTag("tr")
            Dim ind As Integer = 0
            Do While (ind <= ctl.Controls.Count - 1)
                ctl.Controls(ind).RenderControl(writer)
                ind += 1
            Loop
            '//non c'č bisogno della chiusura </tr> perchč il writer lo mette in automatico
            
        End Sub
            
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Pagina senza titolo</title>
    </head>
    <body>
        <form id="form1" runat="server">
            <asp:GridView ID="GridView1" runat="server" EnableViewState="false" CellPadding="4" ForeColor="#333333" GridLines="None" OnRowCreated="GridView1_RowCreated">
                <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
                <EditRowStyle BackColor="#999999" />
                <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
                <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
                <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
            </asp:GridView>
        </form>
    </body>
    </html>
    Pietro

  5. #5
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,582
    wow č vero
    avevo ragione tu,infatti cosi' funziona
    ma da quello che noto č che questo codice aggiunge un'intestazione in modo da craere un tag <td> che comprende 2 celle
    mentre io ne voglio unire 2 celle o righe gia' esistenti,ho fatto un po' di test e dopo i primi rincoglionimenti riposto qui
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  6. #6
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Ho un esempio fatto col GridView. Non so a che serva, ma se si vogliono unire colonne, credo che funzioni.
    codice:
        Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
            Select Case e.Row.RowType
                Case DataControlRowType.Header
                    Dim tcc As TableCellCollection = e.Row.Cells
                    Dim nTotalCols As Integer = tcc.Count
                    For i As Integer = nTotalCols - 1 To 1 Step -1
                        e.Row.Cells.RemoveAt(i)
                    Next
                    Dim c As TableCell = e.Row.Cells(0)
                    c.ColumnSpan = nTotalCols
                    c.Text = "Id regione e nome regione"
    
                Case DataControlRowType.DataRow
                    Dim tcc As TableCellCollection = e.Row.Cells
                    Dim nTotalCols As Integer = tcc.Count
                    For i As Integer = nTotalCols - 1 To 1 Step -1
                        e.Row.Cells.RemoveAt(i)
                    Next
                    Dim c As TableCell = e.Row.Cells(0)
                    c.ColumnSpan = nTotalCols
                    Dim dr As System.Data.Common.DbDataRecord = DirectCast(e.Row.DataItem(), System.Data.Common.DbDataRecord)
                    c.Text = "Id regione = " & dr(0).ToString() & ", Nome regione = " & dr(1).ToString()
            End Select
        End Sub
    Pietro

  7. #7
    Vorrei consigliarti di tentare usando le proprietā del gridview TemplateColumn
    Ti posto un esempio che puoi adattare alle tue esigenze ma ti consiglio di studiart l'oggetto
    come sto facendo io Qui

    codice:
    <asp:datagrid id="dgPopularFAQs" runat="server"
    	AutoGenerateColumns="False">	
      <Columns>
        <asp:BoundColumn DataField="FAQID" ItemStyle-Width="10%" 
    			ItemStyle-HorizontalAlign="Center" HeaderText="FAQ ID" />
    	    
        <asp:TemplateColumn HeaderText="FAQ Information">
          <ItemTemplate>
            <table border="0">
              <tr>
                <td align="right">Description:</td>
                <td><%# DataBinder.Eval(Container.DataItem, "Description") %></td>
              </tr>
              <tr>
                <td align="right">Category Name:</td>
                <td><%# DataBinder.Eval(Container.DataItem, "CatName") %></td>
              </tr>
              <tr>
                <td align="right">View Count:</td>
                <td><%# DataBinder.Eval(Container.DataItem, "ViewCount", "{0:#,###}") %>
                </td>
              </tr>
            </table>
          </ItemTemplate>
        </asp:TemplateColumn>
      </Columns>	
    </asp:datagrid>

  8. #8
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,582
    ok funziona
    ora ho una difficilta'


    purtroppo quando ciclo gli elementi della datagrid, se ho una colonna template con una combo non riesce a prendermi il valore dentro ma solo alla prima occcorenza dell'unione

    infatti il findcontrol("controllo") non genera errore ma se faccio text da sempre vuoto
    cosa posso fare?
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  9. #9
    sinceramente non ho capito quel che intendi fare,sorry

  10. #10
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,582
    ciao
    ti posto il codice dwella funzione che riesce a unire le celle , la funzione vuole il numero colonna come parametro e unisce le celle in base lla colonna,se trova le stesse occorrenze

    codice:
        Public Sub UnisciColonneDatagrid(ByVal DG As DataGrid, ByVal Col As Int16)
    
            Dim i As Integer
            Dim Sapp As String = ""
            Dim Ssucc As String = ""
            Dim conta As Int16 = 1 'conta le occorrenze
            Dim cc As TableCell
    
            For i = 0 To DG.Items.Count - 1
                Sapp = DG.Items(i).Cells(Col).Text
    
    
                If i = DG.Items.Count - 1 Then '-----ultima riga
                    If Ssucc = Sapp Then
                        DG.Items(i).Cells.RemoveAt(Col)
                        cc.RowSpan = conta ' - 1 '+ 1
                        cc.Text = Sapp
                        DG.Items(i - conta + 1).Cells.AddAt(Col, cc) '- conta
                    End If
    
                    GoTo continua'sostituire con variabile bool
                Else
                    Ssucc = DG.Items(i + 1).Cells(Col).Text
                End If
    
    
                If Sapp = Ssucc Then 'Or (Ssucc = Sapp) Then 'And Sprec <> ""
                    conta = conta + 1
                    cc = DG.Items(i).Cells(Col)
                    DG.Items(i).Cells.RemoveAt(Col)
    
                ElseIf Sapp <> Ssucc And conta > 1 Then
                    DG.Items(i).Cells.RemoveAt(Col)
    
                    cc.RowSpan = conta ' - 1 '+ 1
                    cc.Text = Sapp
                    DG.Items(i - conta + 1).Cells.AddAt(Col, cc) '- conta
                    conta = 1 'resetto il conta
                End If
    
    continua:'da eliminare
    
            Next
    
        End Sub
    il guaio di questa funzione č che nonostanze sembri funzionare, se si ha nel datagrid una colonna template con una combobox e si tenta di ciclare la grigglia, riusciresti solo a prendere la prima occorrenza della combo,se in una cella prima č stata unita

    grazie
    p.s.
    la funzione ovviamente č da migliorare,quindi non guardare le ottimizzazioni, ma solo dove genera questa fastidioso errore,e mi riferisco ache ad "on error..."
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

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.