Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 19 su 19
  1. #11
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    valeria, ma lo conosci il c# :master:


    codice:
    // duplico il datatable per creare le intestazioni ogni X righe
    
    DataTable StartPlanning = DsDati.Tables["Planning"];
    DataTable TmpPlanning = null;
    
    
    for (int i = 0; i < StartPlanning.Rows.Count; i++)
    {
    	TmpPlanning.Columns.Add(StartPlanning.Columns[i].Caption, Type.GetType("string"));
    }
    
    
    int c=0;
    
    foreach (DataRow r in StartPlanning.Rows) 
    {
    	c=c+1;
    
    	if(c>5) 
    	{
    		c=0;
    
    		DataRow dr1 = TmpPlanning.NewRow();
    
    		for (int i=0; i < TmpPlanning.Columns.Count; i++)
    		{
    			dr1[i] = TmpPlanning.Columns[i].Caption;
    		}
    
    		TmpPlanning.Rows.Add(dr1);
    
    
    		c = c+1;
    
    		DataRow dr = StartPlanning.NewRow();
    
    		for (int i=0; i < TmpPlanning.Columns.Count; i++)
    		{
    			dr[i] = r[i];
    		}
    
    		TmpPlanning.Rows.Add(dr);
    
    	}
    
    	else
    
    	{
    		DataRow dr = TmpPlanning.NewRow();
    
    		for (int i=0; i < TmpPlanning.Columns.Count; i++)
    		{
    			dr[i] = r[i];
    		}
    
    		TmpPlanning.Rows.Add(dr);
    
    
    	}
    
    
    	MyDataGrid.DataSource = TmpPlanning.DefaultView;
    
    	MyDataGrid.DataBind();
    
    
    }
    Pietro

  2. #12
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,117
    ho controllato col debugger, e startplanning contiene righe, ma vedo sempre una pagina bianca, senza datagrid

  3. #13
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da valeria75
    ho controllato col debugger, e startplanning contiene righe, ma vedo sempre una pagina bianca, senza datagrid
    Hai voglia di usare il debug devi SOLO tradurre bene dal basic al c . Il codice che ti mando adesso è (o dovrebbe) in c#, ma, dato che non lo conosco, farai bene a controllarlo per bene.
    codice:
    private void Page_Load(object sender, System.EventArgs e)
    {
    	// Inserire qui il codice utente necessario per inizializzare la pagina.
    
    
    	//datatable originario
    	DataTable StartPlanning = lib.GetDataTable(StringaConnessione(), "SELECT TOP 100 * FROM COMUNI ORDER BY [ID]");//DsDati.Tables["Planning"];
    
    	// duplico il datatable per creare le intestazioni ogni X righe
    	DataTable TmpPlanning = new DataTable();
    
    	//creo la riga con tante colonne di tipo stringa quante il dt originario
    	for (int i = 0; i < StartPlanning.Columns.Count; i++)
    		TmpPlanning.Columns.Add(StartPlanning.Columns[i].Caption, typeof(string));
    
    
    	int c = 0; //contatore righe stampate
    
    
    	//scansione delle righe del dt origirario per riempire il clone
    	foreach (DataRow r in StartPlanning.Rows) 
    	{
    		c++;
    
    		if(c > k) //se ho superato le righe prefissate
    		{
    			c = 0; //azzero contatore
    
    			DataRow dr1 = TmpPlanning.NewRow(); //creo una nuova riga di intestazione
    
    			for (int i = 0; i < TmpPlanning.Columns.Count; i++)
    				dr1[i] = TmpPlanning.Columns[i].Caption;
    
    			//aggiungo la riga appena creata
    			TmpPlanning.Rows.Add(dr1);
    
    
    			c++;
    
    			//creo una nuova riga
    			DataRow dr2 = TmpPlanning.NewRow();
    			//la riempio dei dati del dt originario, riga corrente
    			for (int i = 0; i < TmpPlanning.Columns.Count; i++)
    				dr2[i] = r[i];
    
    			//aggiungo la riga appena creata
    			TmpPlanning.Rows.Add(dr2);
    
    		}
    
    		else 
    		//sono tra una intestazione e l'altra: aggiungo una riga di dati copiandoli dalla riga corrente del dt originario
    		{
    			DataRow dr2 = TmpPlanning.NewRow();
    
    			for (int i = 0; i < TmpPlanning.Columns.Count; i++)
    				dr2[i] = r[i];
    
    			TmpPlanning.Rows.Add(dr2);
    
    		}
    
    	}
    
    	//lego la griglia al dt clone creato
    	MyDataGrid.DataSource = TmpPlanning.DefaultView;
    	MyDataGrid.DataBind();
    
    }
    
    const int k = 10; //righe visualizzate tra una intestazione e l'altra
    private int c = 0;
    protected void MyDataGrid_ItemDataBound(object Sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    	if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    	{
    		c++;
    		if(c > k)
    		{
    			c = 0;
    			e.Item.Style.Add("background", "#009999");
    			e.Item.Style.Add("color", "#CCFF99");
    		}
    
    	}
    }
    Pietro

  4. #14
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,117
    graaaaaaaaaaaaaaaaaaazie mille

    per l'aiuto

  5. #15
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,117
    E' tutto perfetto ... ho solo un piiiiiccolo problema,

    ho notato che dopo aver aggiunto queste righe (in mezzo alla datagrid) non riesco piu a gestire il "tipo" delle colonne; mi spiego: io utilizzo un datagrid creato dinamicamente sulla base di alcuni dati presenti in 2 tabelle .... successivamente carico i dati in un datatable (planning appunto) e, da codice imposto i "tipi" delle colonne, come ad esempio:


    // colonna con la data (completa)
    if (col.DataType == typeof(DateTime))
    {
    NewCol.DataFormatString = "{0:d}";
    NewCol.ItemStyle.Width = new Unit(60, UnitType.Pixel);
    NewCol.ItemStyle.VerticalAlign = VerticalAlign.Top;
    }
    else
    {
    NewCol.DataFormatString = "{0}";
    }


    dopo la modifica visualizzo la prima colonna con questo formato:

    "15/12/2004 0.00.00"

    e non

    "15/12/2004"

    è strano dato che il controllo sul "tipo" è rimasto invariato, cosa può essere successo?

    thanks

  6. #16
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    :master: Boh! non so. La risposta più sensata credo sia abbandonare questa tecnica (cioè inserire righe di intestazione aggiuntive) ma se vuoi ancora percorrere questa strada...
    Ragioniamo. Adesso abbiamo un DataTable clonato dove tutte le colonne sono di tipo stringa. Ma il valore nelle celle possiamo preformattarlo come vogliamo.
    Io proverei a lavororar su questa istruzione:
    codice:
    dr2[i] = r[i];
    perché la colonna i-esima so di che tipo è... perciò posso usare il formato più opportuno. Io non posso sperimentare, prova e fai sapere.
    Ciao
    Pietro

  7. #17
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,117
    Ho un problema,

    non riesco ad impostare la proprietà

    .DataFormatString = "{0:d}"

    o meglio: non so a cosa assegnarla


    prima della duplicazione, quando creo il mio datatable uso



    // creo dinamicamente le colonne del DataGrid

    foreach (DataColumn col in DsDati.Tables["Planning"].Columns)
    {

    BoundColumn NewCol = new BoundColumn();
    NewCol.HeaderText = col.ColumnName;
    NewCol.DataField = col.ColumnName;
    NewCol.ItemStyle.Width = new Unit(200, UnitType.Pixel);
    NewCol.ItemStyle.CssClass = "Testo8";


    // colonna con la data (completa)
    if (col.DataType == typeof(DateTime))
    {
    NewCol.DataFormatString = "{0:d}";
    NewCol.ItemStyle.Width = new Unit(60, UnitType.Pixel);
    NewCol.ItemStyle.VerticalAlign = VerticalAlign.Top;
    }
    else
    {
    NewCol.DataFormatString = "{0:d}";
    }
    ma dopo la duplicazione, come imposto le proprietà della colonna con la data?

    Grazie infinite per l'aiuto!

  8. #18
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da pietro09
    :master: Boh! non so. La risposta più sensata credo sia abbandonare questa tecnica (cioè inserire righe di intestazione aggiuntive) ma se vuoi ancora percorrere questa strada...
    Ragioniamo. Adesso abbiamo un DataTable clonato dove tutte le colonne sono di tipo stringa. Ma il valore nelle celle possiamo preformattarlo come vogliamo.
    Io proverei a lavororar su questa istruzione:
    codice:
    dr2[i] = r[i];
    perché la colonna i-esima so di che tipo è... perciò posso usare il formato più opportuno. Io non posso sperimentare, prova e fai sapere.
    Ciao
    codice:
    					for (int i = 0; i < TmpPlanning.Columns.Count; i++)
    						if(i == 5)
    							dr2[i] = string.Format("{0:d}", r[i]);
    						else
                                dr2[i] = r[i];
    supponendo che la 5° colonna contenga date
    Pietro

  9. #19
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,117
    funzia!

    grazie 1000

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 © 2026 vBulletin Solutions, Inc. All rights reserved.