[déplacé VB.NET -> ASP.NET] Desactiver 1 control (textbox) dans 1 templateColumn

lolymeupy Messages postés 33 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 6 janvier 2009 - 6 janv. 2009 à 09:45
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 - 6 janv. 2009 à 19:14
Bonjour,

j'ai 1 datagrid avec 2 colonnes de type templateColumn (pour pouvoir
les modifier avec 1 EditCommandColumn) mais selon les "circonstances"
il faudrait que j'empêche la modification de l'une ou l'autre des
colonnes...

Pour être plus clair voici 1 partie de mon code :

 
<%@ Control Language= "vb" AutoEventWireup="false" Codebehind="BonsLivraisonsCtrlAdresse.ascx.vb"Inherits="Sagem.DNN.Modules.BonsLivraisonsCtrlAdresse.BonsLivraisonsCtrlAdresse" %>
<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0 Transitional//EN">
....
"DG_CtrlAdresse" runat="server" Width="1800px" MaxWidth="2000px" AllowSorting="True"
CellPadding="0" BackColor="White" BorderWidth="1px" BorderStyle="None" BorderColor="#3366CC"
AutoGenerateColumns="False" GridLines="None"
OnEditCommand="Edit"
OnUpdateCommand="Update"
OnCancelCommand="Cancel">
....
<Columns>
"Action" HeaderStyle-ForeColor="red" HeaderStyle-Font-Bold="True"
HeaderStyle-HorizontalAlign="Left" ItemStyle-width="100px"
ItemStyle-HorizontalAlign="Left" ItemStyle-ForeColor="red" ItemStyle-Font-Bold="True"
CancelText="Annuler" UpdateText="MAJ" EditText="Modifier">

"Ad_idAdresse" HeaderText="Adresse" Visible="false"ReadOnly="true">
"En_idEntreprise" HeaderText="Adresse" Visible="false"ReadOnly="true">

"Entreprise">

<%#Container.DataItem("En_sNom")%>

<EditItemTemplate>
"TextBox2" name="TextBox2" Value='<%#Container.DataItem("En_sNom")%>' runat="Server" Width="400" >
</EditItemTemplate>
"500px">

 
"Si_sNomSite" HeaderText ="Site"ReadOnly= "true" ItemStyle-Width="100px">
 
"Adresse" >

<%#Container.DataItem("Ad_sAdresse")%>

<EditItemTemplate>
"TextBox1" name="TextBox1" Value='<%#Container.DataItem("Ad_sAdresse")%>' runat="Server" Width="400" >
</EditItemTemplate>
"500px">

 
....
"Cocher pour
invalider l'entreprise" ItemStyle-HorizontalAlign ="Center">

"chkSelectionEn" Runat= "server" />

"Center" width="150px">

"Cocher pour
invalider l'adresse" ItemStyle-HorizontalAlign ="Center">

"chkSelectionAd" Runat= "server" />

"Center" width="150px">

"Cocher pour mettre en attente" ItemStyle-HorizontalAlign ="Center">

"chkAttente" Runat= "server" />

"Center" width="150px">

</Columns>
"20px" HorizontalAlign ="Left" ForeColor="#003399" BackColor="#99CCCC" Mode="NumericPages">

.....
 

Les 2 colonnes en question sont Entreprise et Adresse. Elles
contiennent respectivement les controls TextBox2 et TextBox1, que je
voudrais rendre "non-editable" selon certains critères....


J'essaye de selectionner mon controle comme ça mais sans résultat :
 
DG_CtrlAdresse.FindControl("TextBox2").EnableViewState = False
 

J'ai cru lire que le Datagrid "changeait" les ID des controles à sa
manière, et qu'on ne peut donc pas selectionner le control par son Id
...Et je ne vois pas comment faire alors...

Je pense qu'il faut partir d'un truc comme ça :

Code :
DG_CtrlAdresse.EditItemIndex = e.Item.ItemIndex

mais je vois pas comment aller + loin...
Je précise que j'ai essayé avec un Cast :

Code :
 
Dim t As TextBox
t = CType(DG_CtrlAdresse.Items(e.Item.ItemIndex).FindControl("TextBox2"), TextBox)
t.Enabled = False
 

Mais il me met le message d'erreur suivant :

"La référence d'objet n'est pas définie à une instance d'un objet."


Merci d'avance
A voir également:

1 réponse

ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
6 janv. 2009 à 19:14
Bonsoir,

Tu essaies de récupérer ton textbox sur l'événement EditCommand ? Essaie plutôt de le faire lors de l'événement Itemcreated :

Protected Sub DataGrid1_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs)
        If e.Item.ItemType = ListItemType.EditItem Then
            Dim t As TextBox = CType(e.Item.FindControl("TextBox1"), TextBox)
         ... ton test ...
            t.enabled=false
         ...            
        End If
End Sub

GGtry
0
Rejoignez-nous