begin process at 2008 05 16 08:47:39
1 173 235 membres
76 nouveaux aujourd'hui
13 970 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

AJOUT DE DYNAMIQUE DE TEXTBOX DANS LE FOOTER D'UN DATAGRID


Information sur la source

Catégorie :ASP.Net Source .NET ( DotNet ) Classé sous : textbox, footer, datagrid Niveau : Débutant Date de création : 04/09/2004 Vu / téléchargé: 9 930 / 480

Note :
3,5 / 10 - par 2 personnes
3,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

Description

<!-- Cet extrait de code montre :
Comment creer dynamiquement des textBox dans le footer d'un DataGrid
Le Nb de TextBox est variable, indiqué par une DropDownList
Suit un test de remplissage dans le 'Page_load' C'est ça l'astuce.
Si les boites sont bien remplies, elles disparaissent au postBack et le contenu va dans la base
Si elles sont mal remplies les boites réapparaissent avec un message d'info
Commentaire :
On remarque l'utilisation d'un conteneur (une TableCell ici) pour les textBox. j'ai trouvé que ça comme solution pour
faire appel à l'ID_client avec FindControl("ID_client"). Si vous avez mieux, vous gênez pas pour le dire....
La page est créée avec DreamWeaver, elle n'est bien sûr pas fonctonelle.-->

Source

  • <%@ Page Explicit="True" Language="VB" Debug="True" EnableViewstate="True" AutoEventWireup="true"%>
  • <%@ Import Namespace="System.Data" %>
  • <%@ Import Namespace="System.Data.OleDb" %>
  • <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  • <html>
  • <head>
  • <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  • <script runat="server">
  • 'Déclaration des variables communes aux "Sub"
  • Dim Conn As OleDbConnection = New OleDbConnection
  • Dim Chem as string 'Chemin conduisant à la base
  • Dim ConnString, SelectSql As String
  • Dim Commande As OleDbCommand
  • Dim StrOleDb as string
  • Dim CreaTest as boolean
  • Dim Nb, h As Integer
  • Dim VerifNR as boolean
  • '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  • Sub Page_Load(Src As Object, E As EventArgs)
  • chem=ConfigurationSettings.AppSettings("chem") 'le chemin est enregistré dans le "Web.config"
  • ConnString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath(chem)
  • Conn= New OleDbConnection(ConnString)
  • 'Nb est le nombre indiqué par la dropDownList du footer
  • Nb=ViewState("Nb")
  • If Not IsPostBack Then
  • Session("CreaTest")=false
  • 'Charger le dataGrid
  • SelectSql = "Select * From [Ma_table] etc..."
  • ChargerData(SelectSql,MonDataGrid)
  • 'Si des boites ont été créées
  • elseif Page.IsPostBack andalso Ctype(Session("CreaTest"),Boolean) then
  • VerifNR = true 'initialisation de la variable test
  • 'Verification des remplissages (ou autre vérif)
  • dim striNom as string
  • 'L'ID_Client peut dépendre du nb d'enregistrements si on met des contrôles dans les items (ici des checkBox par ex)
  • Dim NOrdre as integer= (MonDataGrid.items.count + 2) ' le nombre "2" ne sera pas forcément le même
  • 'boucle de vérification des remplissages
  • for h=1 to Nb
  • striNom = request.Form("MonDataGrid:_ctl" & NOrdre & ":tbNomAd" & h)
  • '(NB._ L'ID-Client s'obtient en affichant la page et en "afficher la source")
  • if striNom=""
  • VerifNR=false
  • end if
  • next
  • 'Si c'est mal rempli, on recharge les textBox
  • if VerifNR = false
  • AjouterControl(Nb)
  • else
  • 'autrement elles disparaissent et la variable da session est réinitialisée
  • Session("CreaTest")=false
  • end if
  • End If
  • End Sub
  • '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  • Sub AjouterControl(Nb as integer)
  • '"placeNom" est le nom de la tableCell qui contiendra les contrôles .
  • 'Un autre conteneur qui possède une ID_client peut parfaitement convenir (un Control Panel doit sûrement marcher)
  • Dim Cont as TableCell=Ctype(page.findcontrol("MonDataGrid:_ctl" & (MonDataGrid.items.count + 2) & ":placeNom"),TableCell)
  • CreerControle(Nb ,Cont,"tbNomAd",110,14)
  • End Sub
  • '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  • Sub jeterControl()
  • Dim Cont as TableCell=Ctype(page.findcontrol("MonDataGrid:_ctl" & (MonDataGrid.items.count + 2) & ":placeNom"),TableCell)
  • Cont.Controls.Clear()
  • Cont.dispose
  • End Sub
  • '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  • Sub CreerControle(N as integer, conteneur as object, Ident as String, larg as integer, Max as integer)
  • for h=1 to N
  • dim tbNomAd As New TextBox
  • tbNomAd.ID=Ident & h 'identification
  • tbNomAd.Attributes("runat")="server"
  • tbNomAd.Width=New Unit(larg & "px") 'Réglages divers
  • tbNomAd.height=New Unit("17px")
  • tbNomAd.MaxLength=Max
  • conteneur.Controls.Add(tbNomAd)
  • conteneur.Controls.Add(New LiteralControl("<br>")) 'pour que les contrôles s'affichent l'un sous l'autre
  • tbNomAd.Dispose()
  • next
  • End Sub
  • '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  • Sub ChargerData(ChaineSQL as string, XGrid as DataGrid)
  • Commande = New OleDbCommand(ChaineSQL, Conn)
  • Conn.Open
  • XGrid.DataSource=Commande.ExecuteReader()
  • XGrid.DataBind
  • End Sub
  • '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  • Sub commander(source As Object, e As System.Web.UI.WebControls.DataGridCommandEventArgs)
  • Dim btnAn As Button = CType(e.Item.FindControl("btnAn"), Button)
  • Dim btnAdd As Button = CType(e.Item.FindControl("btnAdd"), Button)
  • Dim lnkAdd As LinkButton = CType(e.Item.FindControl("lnkAdd"), LinkButton)
  • 'COMMANDE DU LINKBUTTON "LNKADD"
  • if e.commandName="Insert" then
  • jeterControl 'on commence par virer les anciens s'ils existent
  • Dim dpNb As DropDownList= CType(e.Item.FindControl("dpNb"), DropDownList)
  • Dim Nb As Integer =dpNb.SelectedValue
  • 'RAJOUT DES TEXTBOX
  • AjouterBoites(Nb)
  • Viewstate("Nb")=Nb
  • 'Variable servant à tester si des boites ont été créées
  • Session("CreaTest")=true
  • 'COMMANDE DU BUTTON "BTNADD"
  • elseif e.commandName="Ajouter" then
  • Dim dpNb As DropDownList= CType(e.Item.FindControl("dpNb"), DropDownList)
  • Dim Nb As Integer =dpNb.SelectedValue
  • Dim NOrdre as string = CStr(MonDataGrid.Items.count +2)
  • Nb=ViewState("Nb")
  • 'Ici on met les messages d'alerte suite à la vérification du contenu des textBox dans le Page_Load, qui aboutira à "exit sub"
  • If VerifNR = false then
  • Message.text="<br>Remplissez les boites !<br>"
  • exit sub
  • end if
  • 'ENVOI vers la base de données car tout est OK
  • Message.text=""
  • for h=1 to Nb
  • Dim TxtbNomAdd as String =request.form("MonDataGrid:_ctl" & NOrdre & ":tbNomAd" & h)
  • StrOleDb="Insert Into [Ma_Table] (MonChamp) Values (@TxtbNomAdd)"
  • Commande=New OleDbCommand(StrOleDb, Conn)
  • Conn.Open
  • Commande.Parameters.Add("@TxtbNomAdd", TxtbNomAdd)
  • Commande.ExecuteNonQuery()
  • Conn.Close
  • next
  • SelectSql = "Select * From [Ma_Table] "
  • ChargerData(SelectSql, MonDataGrid)
  • MonDataGrid.EditItemIndex=-1
  • 'COMMANDE DU BUTTON "BTNAN"
  • elseif e.commandName="AnnulAjout" then
  • 'la variable indiquant que des boites ont été créées est remise à false
  • Session("CreaTest")=false
  • 'les controles sont effacés
  • jeterControl
  • end if
  • </script>
  • </head>
  • <body >
  • <form runat="server">
  • <!-- Pour les infos -->
  • <asp:Label ID="Message" runat="server" ForeColor="#5B5BDF"></asp:Label>
  • <!-- Le DataGrid -->
  • <asp:DataGrid ID="MonDataGrid" Width="100%" AutoGenerateColumns="false" OnItemCommand="commander" ShowFooter="true" runat="server" EnableViewState="true">
  • <columns>
  • <asp:TemplateColumn >
  • <itemtemplate>
  • <asp:CheckBox ID="ChkDel" runat="server"></asp:CheckBox>
  • </itemtemplate>
  • <footertemplate>
  • <asp:LinkButton ID="lnkAdd" runat="server" AccessKey="A" Text="Ajouter" Visible="true" CommandName="Insert"/>
  • <asp:DropDownList ID="dpNb" runat="server" AutoPostBack="false" >
  • <asp:ListItem Value="0" ></asp:ListItem>
  • <asp:ListItem Value="1" ></asp:ListItem>
  • <asp:ListItem Value="2" ></asp:ListItem>
  • <asp:ListItem Value="3" ></asp:ListItem>
  • <asp:ListItem Value="4" ></asp:ListItem>
  • <asp:ListItem Value="5" ></asp:ListItem>
  • </asp:DropDownList><br>
  • <asp:Button id="btnAn" runat="server" Text="Ann" Visible="false" CommandName="AnnulAjout"/>&nbsp;
  • <asp:Button id="btnAdd" runat="server" Width="50" Text="OK" Visible="false" CommandName="Ajouter"/>
  • </footertemplate>
  • </asp:TemplateColumn>
  • <asp:TemplateColumn HeaderText="Nom" ><!-- Colonne où apparaissent les contrôles -->
  • <itemtemplate>
  • <asp:Label id=LabelNom Font-Bold="true" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Nom") %>'/>
  • <br>
  • </itemtemplate>
  • <footertemplate>
  • <!-- Le conteneur des textBox -->
  • <asp:Table runat="server"><asp:TableRow runat="server">
  • <asp:TableCell ID="placeNom" runat="server" BorderWidth="2px"></asp:TableCell>
  • </asp:TableRow></asp:Table>
  • </footertemplate>
  • </asp:TemplateColumn>
  • </columns>
  • </asp:DataGrid>
  • <!-- Message d'info -->
  • <asp:Label ID="Averto" ForeColor="#FF3300" Font-Size="14" runat="server"/><br>
  • </form>
  • </body>
  • </html>
<%@ Page Explicit="True" Language="VB" Debug="True" EnableViewstate="True" AutoEventWireup="true"%>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script runat="server">
'Déclaration des variables communes aux "Sub"
	Dim Conn As OleDbConnection = New OleDbConnection
   Dim Chem as string						'Chemin conduisant à la base
   Dim ConnString, SelectSql As String
   Dim Commande As OleDbCommand
	Dim StrOleDb as string
	
	Dim CreaTest as boolean
	Dim Nb, h As Integer
	
	Dim VerifNR as boolean
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Sub Page_Load(Src As Object, E As EventArgs)
chem=ConfigurationSettings.AppSettings("chem") 'le chemin est enregistré dans le "Web.config"
ConnString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath(chem)
Conn= New OleDbConnection(ConnString)

'Nb est le nombre indiqué par la dropDownList du footer
Nb=ViewState("Nb") 

	If Not IsPostBack Then
		Session("CreaTest")=false
			'Charger le dataGrid	
		SelectSql = "Select * From [Ma_table] etc..." 
		ChargerData(SelectSql,MonDataGrid)
	
	'Si des boites ont été créées
	elseif 		Page.IsPostBack    andalso Ctype(Session("CreaTest"),Boolean) then  			
				 VerifNR = true 'initialisation de la variable test
					'Verification des remplissages (ou autre vérif)
				 dim striNom  as string
					'L'ID_Client peut dépendre du nb d'enregistrements si on met des contrôles dans les items (ici des checkBox par ex)
				Dim  NOrdre as integer= (MonDataGrid.items.count + 2) ' le nombre "2" ne sera pas forcément le même
					 'boucle de vérification des remplissages
			for h=1 to Nb 
				striNom  = request.Form("MonDataGrid:_ctl" & NOrdre & ":tbNomAd" & h)
'(NB._ L'ID-Client s'obtient  en affichant la page et en "afficher la source")
					if striNom=""
					VerifNR=false
					end if
			next
						'Si c'est mal rempli, on recharge les textBox 
					if VerifNR = false  
					AjouterControl(Nb)
					else
						'autrement elles disparaissent et la variable da session est réinitialisée
						Session("CreaTest")=false 
					end if

	End If
End Sub
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Sub AjouterControl(Nb as integer)
'"placeNom" est le nom de la tableCell qui contiendra les contrôles .
'Un autre conteneur qui possède une ID_client  peut parfaitement convenir (un Control Panel doit sûrement marcher)
	Dim Cont as TableCell=Ctype(page.findcontrol("MonDataGrid:_ctl" & (MonDataGrid.items.count + 2) & ":placeNom"),TableCell)
				CreerControle(Nb ,Cont,"tbNomAd",110,14)
End Sub
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Sub jeterControl()
	Dim Cont as TableCell=Ctype(page.findcontrol("MonDataGrid:_ctl" & (MonDataGrid.items.count + 2) & ":placeNom"),TableCell)
			Cont.Controls.Clear()
	Cont.dispose	
End Sub
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Sub CreerControle(N as integer, conteneur as object, Ident as String, larg as integer, Max as integer)

						for h=1 to N
						dim tbNomAd As New TextBox
						tbNomAd.ID=Ident & h 						'identification
						tbNomAd.Attributes("runat")="server"
						
							tbNomAd.Width=New Unit(larg & "px")		'Réglages divers
							tbNomAd.height=New Unit("17px")
			 				tbNomAd.MaxLength=Max

						conteneur.Controls.Add(tbNomAd)
						conteneur.Controls.Add(New LiteralControl("<br>")) 'pour que les contrôles s'affichent l'un sous l'autre
						 tbNomAd.Dispose()
						next
End Sub
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Sub ChargerData(ChaineSQL as string, XGrid as DataGrid)

Commande = New OleDbCommand(ChaineSQL, Conn)
Conn.Open
XGrid.DataSource=Commande.ExecuteReader()
XGrid.DataBind

End Sub

'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Sub commander(source As Object, e As System.Web.UI.WebControls.DataGridCommandEventArgs)

Dim btnAn As Button = CType(e.Item.FindControl("btnAn"), Button)
Dim btnAdd As Button = CType(e.Item.FindControl("btnAdd"), Button)
Dim lnkAdd As LinkButton = CType(e.Item.FindControl("lnkAdd"), LinkButton)

'COMMANDE DU LINKBUTTON "LNKADD"
if e.commandName="Insert" then 


			jeterControl 'on commence par virer les anciens s'ils existent

			Dim dpNb As DropDownList= CType(e.Item.FindControl("dpNb"), DropDownList)
			Dim Nb As Integer =dpNb.SelectedValue
			
'RAJOUT DES TEXTBOX
						AjouterBoites(Nb)
						Viewstate("Nb")=Nb
						'Variable servant à tester si des boites ont été créées 
						Session("CreaTest")=true
						
'COMMANDE DU BUTTON "BTNADD"
elseif e.commandName="Ajouter" then 
 
 			Dim dpNb As DropDownList= CType(e.Item.FindControl("dpNb"), DropDownList)
			Dim Nb As Integer =dpNb.SelectedValue
			Dim NOrdre as string = CStr(MonDataGrid.Items.count +2) 
		Nb=ViewState("Nb")
		
'Ici on met les messages d'alerte suite à la vérification du contenu des textBox dans le Page_Load, qui aboutira à "exit sub"
		If VerifNR = false  then
		Message.text="<br>Remplissez les boites !<br>"
		exit sub
		end if

'ENVOI vers la base de données car tout est OK
		Message.text=""
	for h=1 to Nb

Dim TxtbNomAdd as String =request.form("MonDataGrid:_ctl" & NOrdre & ":tbNomAd" & h)
StrOleDb="Insert Into [Ma_Table]  (MonChamp) Values (@TxtbNomAdd)"

						Commande=New OleDbCommand(StrOleDb, Conn)
					Conn.Open
						Commande.Parameters.Add("@TxtbNomAdd", TxtbNomAdd)
						Commande.ExecuteNonQuery()
						Conn.Close
	next		
					SelectSql = "Select * From [Ma_Table] " 
					ChargerData(SelectSql, MonDataGrid)	
						MonDataGrid.EditItemIndex=-1

'COMMANDE DU BUTTON "BTNAN"
elseif e.commandName="AnnulAjout" then 

		'la variable indiquant que des boites ont été créées est remise à false
		Session("CreaTest")=false 
		
		'les controles sont effacés
		jeterControl

end if
</script>

</head>
<body >

<form runat="server">


<!-- Pour les infos -->
<asp:Label ID="Message" runat="server" ForeColor="#5B5BDF"></asp:Label>
<!-- Le DataGrid -->
<asp:DataGrid ID="MonDataGrid" Width="100%"  AutoGenerateColumns="false"  OnItemCommand="commander"  ShowFooter="true"  runat="server" EnableViewState="true">
	<columns>
					<asp:TemplateColumn >

						<itemtemplate>
							<asp:CheckBox ID="ChkDel"  runat="server"></asp:CheckBox>
						</itemtemplate>
						<footertemplate>
							<asp:LinkButton ID="lnkAdd"  runat="server" AccessKey="A" Text="Ajouter" Visible="true" CommandName="Insert"/>
							<asp:DropDownList ID="dpNb" runat="server" AutoPostBack="false" >
								<asp:ListItem Value="0" ></asp:ListItem>
								<asp:ListItem Value="1" ></asp:ListItem>
								<asp:ListItem Value="2" ></asp:ListItem>
								<asp:ListItem Value="3" ></asp:ListItem>
								<asp:ListItem Value="4" ></asp:ListItem>
								<asp:ListItem Value="5" ></asp:ListItem>
							</asp:DropDownList><br>
							<asp:Button id="btnAn" runat="server"  Text="Ann" Visible="false"   CommandName="AnnulAjout"/>&nbsp;
							<asp:Button id="btnAdd" runat="server" Width="50" Text="OK" Visible="false"  CommandName="Ajouter"/>
						</footertemplate>
	</asp:TemplateColumn>									
		<asp:TemplateColumn HeaderText="Nom"  ><!-- Colonne où apparaissent les contrôles -->
						<itemtemplate>
							<asp:Label id=LabelNom  Font-Bold="true" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Nom") %>'/>
								<br>
						</itemtemplate>
						<footertemplate>
						<!-- Le conteneur des textBox -->
						<asp:Table runat="server"><asp:TableRow runat="server">
						<asp:TableCell ID="placeNom" runat="server"  BorderWidth="2px"></asp:TableCell>
						</asp:TableRow></asp:Table>
						</footertemplate>
		</asp:TemplateColumn>		
		
	</columns>
</asp:DataGrid>
<!-- Message d'info -->
<asp:Label ID="Averto" ForeColor="#FF3300" Font-Size="14" runat="server"/><br>

</form>
</body>
</html>

Conclusion

Merci à JesusOnLine sans lequel je ramerais encore...
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

    Aucun commentaire pour le moment.

Ajouter un commentaire

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS