[VBNET] Bloccare un campo di un datagrid

giovedì 26 marzo 2009 - 11.28

$ilver Profilo | Junior Member

Ciao a tutti,
io avrei bisogno di bloccare una riga di un datagri come posso fare?

perchè se metto mygrid.enable=false me la blocca tutta invece io vorrei bloccare solo una riga, si può?

In pratica vorrei che quando si clicca su edit mi cambia l'immagine e mi mette l'immagine per la cancellazione ma vorrei che la linea selezionata sia bloccata senza che uno possa scriverci.

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Grazie a tutti

alx_81 Profilo | Guru

>Ciao a tutti,
Ciao!

>perchè se metto mygrid.enable=false me la blocca tutta invece
>io vorrei bloccare solo una riga, si può?
Metti tutti i campi readonly, uno alla volta, sull'evento di editing della riga.

>Grazie a tutti
di nulla!

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

$ilver Profilo | Junior Member

quindi devo mettere :

mygrid.Item.Cells(0).Text=readonly

?

alx_81 Profilo | Guru

>quindi devo mettere :
>
>mygrid.Item.Cells(0).Text=readonly
no, puoi proprio mettere readonly la colonna della riga selezionata.
Ad esempio i BoundField:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.boundfield.readonly.aspx
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

sankyu Profilo | Senior Member

potresti fare anche così per disabilitare l'intera riga anche se non so a cosa ti serva!!

Private Sub GridView1_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.PreRender
For Each rw As GridViewRow In GridView1.Rows
If rw.RowState = DataControlRowState.Edit Then
rw.Enabled = False
End If
Next
End Sub

$ilver Profilo | Junior Member

quindi se metto
Dim instance As BoundField
Dim value As Boolean

value = instance.ReadOnly

instance.ReadOnly = value
tutti i campi diventano readonly?

Scusate la mia ignoranza

sankyu Profilo | Senior Member

più semplicemente negli eventi che ti ho elencato prima puoi ciclare con un for each tutti i controlli e se sono textbox imposti la proprieta readonly=true

Private Sub GridView1_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.PreRender
For Each rw As GridViewRow In GridView1.Rows
If rw.RowState = DataControlRowState.Edit Then
For Each bf As BoundField In rw.Controls
bf.ReadOnly = True
Next
End If
Next
End Sub

questo codice non so se funziona dato che non ho il tempo di provarlo forse devi ciclare nelle cells della row e li cercare i controlli boundfield

alx_81 Profilo | Guru

>quindi se metto
no, devi gestire l'evento di editing. Quando premi il pulsantino modifica, devi scorrere tutti i campi e mettere ogni colonna a ReadOnly. Alcuni saranno boundfield, altri templatefield, ecc..
posta la gridview asp.net e vediamo come ti devi muovere.
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

$ilver Profilo | Junior Member

<asp:datagrid id="GridRouter" runat="server" OnEditCommand="Data_EditRouter" OnCancelCommand="Data_CancelRouter" Width="90%" CellPadding="0" BorderWidth="1px" BorderColor="#2E2651" GridLines="Horizontal" Font-Names="Verdana" AutoGenerateColumns="False">
<AlternatingItemStyle Font-Size="Smaller" Font-Names="Verdana" ForeColor="#2E2651" BackColor="White"></AlternatingItemStyle>
<ItemStyle Font-Size="Smaller" Font-Names="Verdana" ForeColor="#2E2651" BackColor="#E4E9E9"></ItemStyle>
<HeaderStyle Font-Size="Smaller" Font-Names="Verdana" Font-Bold="True" ForeColor="White" BackColor="#2E2651"></HeaderStyle>
<Columns>
<asp:BoundColumn DataField="ID" ReadOnly="True" HeaderText="ID"></asp:BoundColumn>
<asp:BoundColumn DataField="NOMERO" HeaderText="Nome" ></asp:BoundColumn>

<asp:EditCommandColumn ButtonType="LinkButton" CancelText="&lt;img src='immagini/IMGcancel.gif' border='0'&gt;" EditText="&lt;img src='immagini/IMGedit.gif' border='0'&gt;"></asp:EditCommandColumn>
</Columns>
</asp:datagrid>


Ecco la grid

sankyu Profilo | Senior Member

sono una bestia !! mi sono dimenticato l'evento rowEditing (Grazie alex!!) in questo caso è più semplice basta dato che negli argomenti hai già l'indice della riga da modificare; non è che sia molto chiaro il codice che hai postato! se disabiliti la textbox a cosa ti serve editare??

$ilver Profilo | Junior Member

Sankyu, io in pratica vorrei che cliccando su edit la tabella fosse pronta per essere modificata o cancellata.

per essere modificata ho fatto in modo che mi comparisse un pulsante modifica e quindi non mi serve che si modifichi direttamente dal datagrid ed è per questo che vorrei bloccare le celle ma non riesco a farlo.

$ilver Profilo | Junior Member

Avete per caso voglia di mettermi due linee di codice?

$ilver Profilo | Junior Member

Niente?

io sto provando ma sono bloccato :-(

alx_81 Profilo | Guru

>Niente?
>
>io sto provando ma sono bloccato :-(
non è un esempio molto veloce da fare e purtroppo non ho molto tempo ora. Ti chiedo un po' di pazienza..

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

$ilver Profilo | Junior Member

Ok grazie mille. e scusami.

Se trovo la soluzione prima io te la posto.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5