2013-12-10 31 views
0

我拥有下一个按钮的代码。数据库中的数据正常显示。
问题是,当我点击下一步按钮,数据将再次重复 - >数据1>数据2>数据3>数据1>数据2 ...
我一直到有人告诉我应该算最大行数但我不知道该怎么做;我也在寻找编码,但我没有明白出来。
请帮我~~~(我不是很好的英语,抱歉)如何计算Visual Basic中的最大行数

私人小组btnNext_Click(BYVAL发件人为System.Object的,BYVALË作为 System.EventArgs)把手btnNext.Click

btnBack.Enabled = True 

    da.Fill(dt) 
    If position >= 0 Then 

     position = position + 1 
     Me.lblID.Text = dt.Rows(position).Item("RefNo") 
     Me.txtboxName.Text = dt.Rows(position).Item("Name") 
     Me.rtxtboxAddress.Text = dt.Rows(position).Item("Address") 
     Me.txtboxContactNo.Text = dt.Rows(position).Item("ContNo") 
     Me.txtboxFaxNo.Text = dt.Rows(position).Item("FaxNo") 
     Me.txtboxBrand.Text = dt.Rows(position).Item("Brand") 
     Me.txtboxModel.Text = dt.Rows(position).Item("Model") 
     Me.txtboxSN.Text = dt.Rows(position).Item("SN") 
     Me.rtxtboxProblems.Text = dt.Rows(position).Item("Problems") 
     Me.rtxtboxTechRemark.Text = dt.Rows(position).Item("TechRemark") 
     Me.rtxtboxServChange.Text = dt.Rows(position).Item("ServiceChange") 
     Me.rtxtboxPartChange.Text = dt.Rows(position).Item("PartsChange") 
     Me.txtboxTotal.Text = dt.Rows(position).Item("TotalPrice") 

    End If 

End Sub 

我不知道这是不是也需要被告知,但......有两个不同的类
1)database.vb - SQL编码
2)forms.vb - 编码我的视觉基本形式


请帮帮我!


感谢每个人都希望我回答的问题!我已经找到了重新编码后的问题的解决方案。

我没有弄清楚位置值和行值是否相同。我的position = 0和dt.Rows.Count = 4的值,因为我有4个数据;所以当位置= 0时,行= 1。我对此感到困惑;我以为两个值都以0开头。

+0

咦,我真的很惊讶,你没有得到一个'IndexOutOfRangeException' ......它[听起来](http://msdn.microsoft.com/en -us/library/system.data.datarowcollection.item(v = vs.110).aspx)这就是如果超过最大行数就应该得到的。无论哪种方式,您都可以通过'dt.Rows.Count'来获取'DataTable'中的行数。 –

+0

@JeffBridgman我很抱歉...但我不明白。我在哪里编写dt.Rows.Count? – RB93

回答

0

多一点代码...这是不好代码...不要依赖因为我确定有很多它不能处理的角落案例,但我想给你一张你如何处理它的图片,至少是你可能需要担心的东西的一瞥(例如,数据表中有0行)。请通过此工作,并尝试了解代码...不要简单地复制/粘贴。

Private Sub btnNext_Click(ByVal sender As System.Object, 
          ByVal e As System.EventArgs) Handles btnNext.Click 

    If position >= dt.Rows.Count Then 
     // No more rows to show after this one, so disable the next button 
     btnNext.Enabled = False 
    End If 

    // Put check for zero in btnBack.Click to make sure it doesn't go below 0 
    // I'm assuming position starts off at 0, and that you're showing the very 
    // first row by default 
    position += 1 

    // This is to handle a condition like having 0 rows in the data table, 
    // in which case don't want to do the next part... 
    If position > dt.Rows.Count Then Exit Sub 

    // Only necessary once really, but we'll do it each time anyway... 
    btnBack.Enabled = True 

    da.Fill(dt) 

    position += 1 

    // Update various textboxes and labels... 
End Sub 
+0

我试着理解编码并使用它。但也有一个问题......对不起,但请帮我修复它。我禁用了行**位置+ = 1 **,因为它使行从data1> data3跳转而不显示data2,但是如果我单击前一个按钮,那么data2将显示出来(所以它不像数据丢失)。但是,如果我禁用该行,那么data3不会显示出来(只有data1> data2)!我不知道为什么,但是下一个按钮被禁用了,所以这并不意味着它达到了最后一行,而不是最后一行? – RB93

+0

索引从零开始......当您第一次输入此功能时,是位置0的值?尝试设置一个断点来查看该值是什么。 –

+0

位置的值= 0. – RB93

0

dt.Rows.Count是行集合中的行数。任何时候你想检查你是否已经达到最大行数比较行数与dt.Rows.Count

+0

我很抱歉...但我不明白。我在哪里编写dt.Rows.Count? – RB93

+0

我加了更多解释 – tinstaafl

0

da,dt和位置应该在您的子范围之外声明。 Fill语句也应该在子之外执行。

在子:

 If position >= 0 and position < dr.rows.count then 
      do stuff above 
     else 
      Beep ' out of range 
     end if