2010-01-27 11 views
1

J'ai le code suivantPourquoi ma variable de compteur ne s'incrémente-t-elle pas dans cet exemple de code VB.NET?

Protected Sub btnAdd_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAdd.Click 

    Dim counter As Integer = 0 
    Dim t As DataTable = DirectCast(Session("MyDataTable"), DataTable) 
    Dim row1 As DataRow = t.NewRow() 



    If (isUnique(t) And counter < 30) Then 
     row1("ID") = counter + 1 
     row1("univirsityID") = ddlUnivs.SelectedValue 
     row1("majorID") = ddlMajors.SelectedValue 
     row1("UniName") = ddlUnivs.SelectedItem.Text 
     row1("MajorName") = ddlMajors.SelectedItem.Text 
     t.Rows.Add(row1) 
     Session("MyDataTable") = t 
     GridView1.DataSource = t 
     GridView1.DataBind() 
     lblMsg.Text = "تم اضافة الرغبة" 
     counter = counter + 1 

    Else 
     lblMsg.Text = "سبق لك ادخال الرغبة" 
    End If 

End Sub 

Le problème est le row1 (« ID »), la dose change pas garde obtenir la valeur de 1 pour toutes les lignes ajoutées à datatable toute aide est appréciée grâce à l'avance.

Répondre

3

Retirez votre déclaration de contre-courant (pour les raisons que chacun a été l'envoi) et mis cela sur le dessus de votre classe:

Public Property Counter() As Integer 
    Get 
     Return IIf(ViewState("counter") Is Nothing, 0, CInt(ViewState("counter"))) 
    End Get 
    Set(ByVal value As Integer) 
     ViewState("counter") = value 
    End Set 
End Property 

De cette façon, vous enregistrez votre variable counter dans le ViewState de statefull de votre page, et il ne sera pas perdu après un cycle de page.

2

Avec cette ligne

Dim counter As Integer = 0 

Vous définissez le compteur à chaque fois que vous cliquez sur le bouton.

Vous devez stocker le compteur en session ou d'une autre manière.

1

Le compteur sera toujours égal à 0 lorsque vous le réinitialiserez à l'entrée de la méthode.

Y a-t-il une supposée boucle pour quelque part?

0

counter est une variable locale qui sort du cadre lorsque la sous-session se termine. C'est pourquoi il n'augmente pas.

1

Je me risquerais à deviner que vous recherchez réellement une colonne d'identité dans la base de données. Sinon, votre identifiant pourrait être dupliqué, ce qui n'est pas le cas.

Cherchez-vous à faire une boucle dans ce code? Il n'y a pas de boucle, donc le compteur commence à zéro et obtient 1 ajouté. Cela pourrait seulement insérer une rangée.

1

Le problème est que vous initialisez la variable de compteur à 0 chaque fois que vous cliquez sur le bouton. Vous devrez passer au niveau supérieur et le sauvegarder quelque part entre les publications. Je suggérerais de créer une variable de session et de la sauvegarder là-dedans.

Questions connexes