54 messaggi dal 07 aprile 2005
ciao a tutti
cosa NON voglio fare:

asp:GridView ID="GridView1" runat="server"...>
...
<asp:CheckBox Visible="False" ID="ariacondizionata" runat="server" text='<%# eval("aria_condizionata")%>' />
<asp:CheckBox Visible="False" ID="ascensore" runat="server" Checked='<%# eval("ascensore")%>' />
<asp:CheckBox Visible="False" ID="biciclette" runat="server" Checked='<%# eval("biciclette")%>' />
...
</asp:GridView>

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
For Each row As GridViewRow In GridView1.Rows
Dim ariacondizionata As CheckBox = CType(row.FindControl("ariacondizionata"), CheckBox)
If ariacondizionata.Checked = True Then
...

cosa VOGLIO fare (invece di elencare duecento checkbox oltre a quelle che potrebbero eventualmente aggiungersi in futuro):

asp:GridView ID="GridView1" runat="server"...>
<asp:checkboxlist ID="CheckBoxList1" runat="server" DataSourceid="selezione_checkbox" />

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
For Each row As GridViewRow In GridView1.Rows

Dim CheckBoxList1 As CheckBoxList = CType(row.FindControl("CheckBoxList1"), CheckBoxList)

ora viene il (per me) difficile
"per ogni controllo contenuto in CheckBoxList11 ho bisogno di verificare se è o meno "checked"

ho provato con cose tipo
For Each c As Control In CheckBoxList1.Controls
For Each c As CheckBox In CheckBoxList1.Controls

ed altre innumerevoli variazioni sul tema

ma senza ottenere il risultato auspicato: come recuperare/accedere a tali controlli/item facenti parte della CheckBoxList1 e ottenuti dalla sql select - e che, peraltro, vengono correttamente visualizzati dalla CheckBoxList1 - (aria condizionata, ascensore, biciclette, etc..)

qualcuno può darmi una mano?
non è chiaro cosa ha che non va il primo sistema che non vuoi usare.
che problema hai dipreciso?

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
54 messaggi dal 07 aprile 2005
come ho detto non mi sembra ne' pratico, ne'"elegante" dover scrivere duecento righe elencando uno ad uno i controlli

<asp:CheckBox Visible="False" ID="ascensore" runat="server" Checked='<%# eval("ascensore")%>' />

invece di scriverne una sola

<asp:checkboxlist ID="CheckBoxList1" runat="server" DataSourceid="selezione_checkbox" Visible="False" />


per non parlare della parte script

Dim ariacondizionata As CheckBox = CType(row.FindControl("ascensore"), CheckBox)
If ascensore.Checked = True Then

altre due righe ri-moltiplicate per duecento....

invece di scrivere (cosa che non mi riesce e sono appunto qui a chiedere) un sola, semplice volta

"per ogni controllo checkbox nella checklistbox.. se è checked allora.."

Sempre che quanto sto cercando di fare sia possibile, il risparmio complessivo sarebbe di circa seicento righe di codice:
perchè mi dici che non comprendi le motivazioni del tentativo?
le tue CheckBox sono definite in una TemplateField vero?

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
54 messaggi dal 07 aprile 2005
no marco

i singoli controlli NON sono definiti proprio in quanto NON intendo definirli singolarmente tutti e 200

bensì vengono recuperati da database tramite DataSourceid

<asp:GridView ID="GridView2" runat="server" Visible="false" DataSourceid="selezione_checkbox" />

dato che si tratta di campi bit (vero / falso) vorrei ciclare tra la collezione dei controlli della grid ed evidenziare quali sono "checked" (ovvero quali sono i campi "true") e quali no per abbinare loro delle gif e, al contempo, non mostrare quelli "unchecked"

però non mi riesce di identificare tali controlli

ad esempio:

For Each c As Control In GridView2.Controls
Response.Write(c)
Next

il risultato è
System.Web.UI.WebControls.ChildTable
System.Web.UI.WebControls.ChildTable
System.Web.UI.WebControls.ChildTable
....

oppure:

For Each c As Control In GridView2.Rows
Response.Write(c)
Next

il response è
System.Web.UI.WebControls.GridViewRow
System.Web.UI.WebControls.GridViewRow
System.Web.UI.WebControls.GridViewRow
....

e dunque: come va impostato il loop for each - next per individuare i campi / controlli, item.... contenuti nelle gridview.rows e poterli manipolare?

for each c as (???? - che cosa - ????)

luca
definentdo una colonna di tipo TemplateField , e dichiarando al suo interno una CheckBox (anche se non è necessario esiste un tipo di colonna apposta) questa verrà creata n volte pari al numero di Item presenti nella fonte dati.

quindi 200, 10 o uno soltanto.

gestendo poi l'evento GridView.RowCreated, generato dal GridView ogni volta che vine creata una nuova riga, recuperi l'istanza della CeckBox.

spero di essere chiaro

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
54 messaggi dal 07 aprile 2005
no scusa ma davvero non ci arrivo

ho la mia bella gridview, con il suo DataSourceid

<asp:GridView ID="GridView2" runat="server" DataSourceid="selezione_checkbox">

che è tutto quanto mi serve per mostrare le 200 checkbox che corrispondono ad altrettanti campi del db di origine:
vengono tutte visualizzate senza alcun problema


ora tu mi dici: no devi creare una checkbok in una template all'interno della grid..

ok, immagino che tu sottintenda anche le necessarie column e itemtemplate

bene

<asp:GridView ID="GridView2" runat="server" DataSourceid="selezione_checkbox">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

a questo punto alle mie 200 checkbox a video se ne è aggiunta una, a differenza delle altre 200 senza header e, naturalmente, unchecked

ed ora?

scusa ma se conosci la soluzione del problema non ci metti lo stesso tempo a scrivere le due righe di codice che ci vogliono invece di "sperare di essere chiaro"?

luca
       <div>
            <asp:GridView ID="PropertyGridView" runat="server" AutoGenerateColumns="False" DataSourceID="PropertyObjectDataSource"
                DataKeyNames="ID" OnRowCreated="PropertyGridView_RowCreated" OnPreRender="PropertyGridView_PreRender">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:CheckBox runat="server" ID="myCheckBox" Checked='<%# Bind("IsRequired") %>' />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
                    <asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" />
                    <asp:BoundField DataField="Value" HeaderText="Value" SortExpression="Value" />
                    <asp:BoundField DataField="Type" HeaderText="Type" ReadOnly="True" SortExpression="Type" />
                </Columns>
            </asp:GridView>
            <asp:ObjectDataSource ID="PropertyObjectDataSource" runat="server" SelectMethod="GetProperties"
                TypeName="Giada.TP.Manager.KindPropertyManager"></asp:ObjectDataSource>
            <asp:Button ID="Button1" runat="server" Text="Button" />
        </div>


private Collection<CheckBox> checkBoxCollection = new Collection<CheckBox>();

    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void PropertyGridView_RowCreated(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {

            checkBoxCollection.Add((CheckBox)e.Row.FindControl("myCheckBox"));
           
        }
    }

    protected void PropertyGridView_PreRender(object sender, EventArgs e)
    {
        foreach (CheckBox c in checkBoxCollection)
        {
            Response.Write(string.Format("il valore di {0} è:{1}</br>",c.ClientID,c.Checked));
        }

    }


ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx

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.