我有代码,当你按下下一个按钮它滚动数据库行但我希望它一旦到达最后一行就显示错误,当你点击下一步它不能再进一步作为它的最后一行但它似乎当我点击下一个按钮时,继续循环播放我并且永远不会结束?有任何想法吗? 我有一个变量,在formload上为= to -1。
代码:
Private Sub searchclickbinds()
If con.State = ConnectionState.Closed Then con.Open()
'create data adapters
sql = "Select * from tbl"
da = New OleDbDataAdapter(sql, con)
da.Fill(ds, "tbl")
RecCnt = ds.Tables("tbl").Rows.Count 'how many records in ds
TxtCI.Text = ds.Tables("tbl").Rows(inc).Item(0)
Dim word
word = ds.Tables("tbl").Rows(inc).Item(15)
con.Close()
End Sub
呼叫者:
Private Sub BtnNext_Click(sender As Object, e As EventArgs) Handles BtnNext.Click
If inc <> RecCnt - 1 Then
inc = inc + 1
nclick()
End If
End Sub
Formload:
Private Sub main_Load(sender As Object, e As EventArgs) Handles Me.Load
inc = -1
End Sub
答案 0 :(得分:0)
这是jmcilhinney先生在评论中所描述的内容(以及其他一些说明和观察):
' form level vars we need:
Private bsSample As BindingSource
Private dtSample As DataTable
Private ACEConnStr As String = "Provider=Microsoft.ACE.OLEDB.12.0...YOUR CONN STRING..."
然后加载数据:
Dim sql = "SELECT Id, Name, Descr, ValueA, Fish, Bird, Color, Active FROM Sample"
Using dbcon As New OleDbConnection(ACEConnStr)
Using cmd As New OleDbCommand(sql, dbcon)
dbcon.Open()
dtSample = New DataTable
dtSample.Load(cmd.ExecuteReader)
End Using
End Using
myDa.Update(dtSample)
1 DataTable
添加数据或在DataGridView
中显示数据,则有助于在SQL中指定列顺序,而不是SELECT *
con.Close
语句可能会导致各种错误。使用块关闭并在最后处置事物以释放资源。另请注意,如果您拥有所有客户的DataTable
,则可以使用 来查看#30是否存在,然后再按照上一个问题进行删除。现在绑定:
' initialize BS from DT
bsSample = New BindingSource(dtSample, Nothing)
tbName.DataBindings.Add("Text", bsSample, "Name")
tbDescr.DataBindings.Add("Text", bsSample, "Descr")
chkActive.DataBindings.Add("Checked", bsSample, "Active")
第一行初始化BindingSource
。最后一部分设置了“映射”。例如,tbName
的Text属性设置为显示来自bsSample
源的“名称”DB数据。 CheckBox
会将Active
数据(bool)显示为Checked
属性。
BindingSource具有您可以使用的各种方法和属性。你的下一个按钮:
Private Sub btnNext_Click(sender As Object, e As EventArgs) Handles btnNext.Click
bsSample.MoveNext()
btnNext.Enabled = (bsSample.Count - 1 > bsSample.Position)
' To Do: add similar code for btnPrev
End Sub
请注意,用户对控件的更改将应用于DataTable
,但不会应用于数据库。如果您不希望用户能够以这种方式进行编辑,一种简单的方法是使用DataView
:
Dim dv = New DataView(dtSample)
dv.AllowEdit = False
bsSample = New BindingSource(dv, Nothing)
您还可以基于每个字段禁用对源的更新:
tbName.DataBindings.Add("Text", bsSample, "Name", False, DataSourceUpdateMode.Never)
也许最简单的是:
dgv.ReadOnly = True
dgv.DataSource = dtSample
执行将DataGridView放到表单上,并将DataSource
设置为DataTable
只是为了看看它是多么容易使用。太多人不必为此受到惊吓。
1 这就是通过DataAdapter同时添加,删除和更新DataTable中任意数量的行的全部内容。将它们设置为执行此操作需要几行代码,但令人惊讶的是很少。