我有以下代码
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
问题是row1(“ID”)剂量没有改变它为所有添加到datatable的行保持获得值1 任何帮助表示赞赏 提前致谢。
答案 0 :(得分:3)
删除您当前的柜台声明(由于每个人都张贴的原因)并将其置于您的班级之上:
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
这样您就可以将counter
变量保存在页面的有状态ViewState中,并且在页面循环后不会丢失。
答案 1 :(得分:2)
使用此行
Dim counter As Integer = 0
每次单击按钮时都会设置计数器。
您需要以会话或其他方式存储计数器。
答案 2 :(得分:1)
当您在进入方法时重新初始化时,计数器将始终为0。
那里应该有一个for循环吗?
答案 3 :(得分:1)
我冒昧地猜测你实际上是在寻找数据库中的标识列。否则你的ID可能会重复,这不是bueno。
您是否希望在此代码中执行循环?没有循环,所以计数器从零开始并增加1。这只能插入一行。
答案 4 :(得分:1)
问题是,每次单击按钮时,都会将计数器变量初始化为0。您需要将计数器移动到下一个更高级别并将其保存在回发之间。我建议创建一个会话变量并将其保存在那里。
答案 5 :(得分:0)
counter
是一个局部变量,当子结束时它超出了范围。这就是它没有递增的原因。