51 messaggi dal 25 febbraio 2002
effittivamente non sarebbe una cattiva idea. l'unico problema è che non so come inserire lato codice una checkbox (che sia nell'header o in una nuova riga). suppongo che inserire un TemplateField nella pagina aspx non sia la strada giusta!
51 messaggi dal 25 febbraio 2002
in modo brutto e brutale ho inserito il seguente codice per creare una riga alla fine della gridview e contenente una checkbox in ogni cella.

DataRow rwFooter = dt.NewRow();
dt.Rows.Add(rwFooter);       

CheckBox cb0 = new CheckBox();
CheckBox cb1 = new CheckBox();
        
this.GridView1.DataSource = dt;
this.GridView1.DataBind();

GridView1.Rows[6].Cells[0].Controls.Add(cb0);
GridView1.Rows[6].Cells[1].Controls.Add(cb1);


ovviamente devo rendere tutto dinamico ma...pochi passi per volta
sto provando anche ad inserire il check nella riga di testata ma per ora...ho qualche difficoltà

spero, anche se brutta e da sistemare, che questa sia la strada. potrebbe andare???
grazie
Diciamo che sei sulla strada giusta... Per questo ti suggerivo di operare sull'header:
Sulla griglia associa l'evento di OnRowCreated. Lato codice all'interno del metodo relativo, controlla di trovarti sulla riga header e aggiungi una check per ogni colonna proprio come hai già fatto.

Immaginiamo poi che tu abbia un bottone al cui click rilevi le colonne con check: sul click vai su (CheckBox)griglia.FindControl(idcheck) e controlli se sia effettivamente spuntato (puoi farlo manualmente per poche colonne o con un ciclo per un numero elevato di colonne, in quest'ultimo caso dai degli id ragionati ai check)
Modificato da manuel0081 il 30 agosto 2007 14.34 -

Ormai programmano tutti... ma la professionalità appartiene a pochi
51 messaggi dal 25 febbraio 2002
infinitamente grazie per la pazienza.

allora..quello che ho fatto io per aggiungere i check nella testata è:

for (int k = 0; k < dtCSV.Columns.Count; k++)
            {
                CheckBox nameCb = new CheckBox();
                nameCb.Text = dataPeople.HeaderRow.Cells[k].Text;
                nameCb.ID = "nameCb" + k.ToString();
                dataPeople.HeaderRow.Cells[k].Controls.Add(nameCb);
            }


fin qui tutto ok (penso). a questo punto ho messo il bottone per poi sapere quali colonne siano checkate. il problema è che al click del bottone (o a qualsiasi postBack) spariscono le checkbox e quindi non riesco più a risalire al loro ID.
per te/voi sarà elementare ma io sto diventando pazza.
51 messaggi dal 25 febbraio 2002
sto provando e riprovando ma non riesco a far rimanere le mie checkbox nell'header della gridview. avete suggerimenti??

questo è il codice:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;

public partial class data : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        
        
    }

    protected void btUploadData_Click(object sender, EventArgs e)
    {
        string filePath = Request.PhysicalApplicationPath;
        filePath += "FileCaricati/";

        openFileSelected(filePath);
    }
    protected void openFileSelected(string nomeFile)
    {
        
        string file_path = "FileCaricati/miofile.txt"; 
        char[] tokens = new char[1] { char.Parse(";") };
        DataTable dt = new DataTable("GridView1");

        System.Collections.Generic.List<string> _rows = new System.Collections.Generic.List<string>();
        using (System.IO.StreamReader rd = new System.IO.StreamReader(Server.MapPath(file_path)))
        {
            while (!rd.EndOfStream)
            {
                _rows.Add(rd.ReadLine());
            }

            rd.Close();
        }

        string[] _columns = _rows[0].Split(tokens);
        int i;
        for (i = 0; i < _columns.Length; i++)
        {
_columns[i] = _columns[i]  ; 
            dt.Columns.Add(new DataColumn(_columns[i]));

        }
        

        for (i = 1; i < _rows.Count; i++)
        {
            DataRow rw = dt.NewRow();           
            string[] _cells = _rows[i].Split(tokens);
            
            if (_cells.Length > _columns.Length)
            {
                throw new Exception("Numero celle maggiore delle colonne alla riga " + i.ToString());
            }

            int j;
            for (j = 0; j < _cells.Length; j++)
            {
                rw[j] = _cells[j];                
            }
            dt.Rows.Add(rw);        
        }

        


        this.GridView1.DataSource = dt;
        this.GridView1.DataBind();

        for (int k = 0; k < 4; k++)
        {
            CheckBox nameCb = new CheckBox();
            nameCb.EnableViewState = true;
            nameCb.Text = GridView1.HeaderRow.Cells[k].Text;
            nameCb.ID = "nameCb" + k.ToString();
            GridView1.HeaderRow.Cells[k].Controls.Add(nameCb);

        }

        string MyGridView = GridView1.ToString();
        
    }

}



grazie mille
Devi associare alla griglia l'evento RowCreated e lì dentro creare i checkbox sull'header (dopo aver controllato che la riga in esame sia proprio l'header: if (e.Row.RowType == DataControlRowType.Header))

Ormai programmano tutti... ma la professionalità appartiene a pochi
51 messaggi dal 25 febbraio 2002
ciao Manuel,
ho provato con il tuo codice, e con un'altra prova che avevo fatto anche io. il risultato è ok, le checkbox rimangono al postback ma... il valore .checked delle checkbox, rimane sempre quello iniziale. quindi se all'inizio sono tutte false e poi ne checko una, visivamente le vedo corrette (una checkata e le altre no) ma nel momento in cui vado a recuperare il valore

((CheckBox)GridView1.HeaderRow.Cells .Controls[0]).Checked

sono tutte false.
ora provo a ripulire tutto il codice e vedo se riesco a cavare un ragno dal buco.
sempre grazie per la disponibilità ;)
Se "checki" una e premi un bottone devi analizzare il controllo corretto (magari con findControl). Dato che ricrei le checkbox ad ogni postback, devi salvarti quali sono checkate nel viewstate e nell'onRowCreated impostare sulla checkbox appena creata anche il valore .checked.

Ormai programmano tutti... ma la professionalità appartiene a pochi

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.