试了好久,终于试出来了,把代码发给你分享:
专注于为中小企业提供成都网站建设、网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业马边彝族免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上1000家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
首先,我建了个窗体,放了一个按扭控件,把打开连接EXECL的代码都放在该按扭的click事件里了,你可以根据需要改动。
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim sConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" _
"Data Source=E:\myexl.xls;" _
"Extended Properties=Excel 8.0;"
’这里面,E:\myexl.xls换成你自己的excel文件完整路径
Dim objConn As New OleDbConnection(sConnectionString)
objConn.Open()
MsgBox("成功打开连接") ’这句我用来测试能不能连接的,
’下面将建立查询命令
Dim objCmdSelect As New OleDbCommand("SELECT * FROM [11$] where 姓名='李三'", objConn)
'11j是我测试用的sheet名,你换成你自己的,注意格式
'程序默认Excel表的第一行内容为字段名,你换成你自己的内容,并建
'立查询条件
'下面将根据查询条件打开连接。
Dim objAdapter1 As New OleDbDataAdapter()
objAdapter1.SelectCommand = objCmdSelect
'下面将打开的数据放在dataset中
Dim objDataset1 As New DataSet()
objAdapter1.Fill(objDataset1, "XLData")
’下面将数据传给DataGrid1控件
DataGrid1.DataSource = objDataset1.Tables(0).DefaultView
' Clean up objects.
objConn.Close()
End Sub
当然能,把你不分页的程序贴出来,我给你修改嘛。
主要就是利用rs.PageSize等实现,在你程序的下面语句:
rs.open sqlc,conn,1,1
之后,添加下面的代码可以控制显示的记录范围:
rs.PageSize = 10 'pagesize属性指定了每页要显示的记录条数
rs.AbsolutePage = Page '把页码赋给absolutepage属性从而知当前页的首条记录号
上的PAGE是调用是带过来的参数,没有参数时指定为1,表示显示第一页。
你可以这样,如果你用 dataGridview 时不是也要查询表嘛,
我们用datatable/dataset 保存你查询的结果,
然后就可以一条条显示,记录住当前显示的row(行)
eg:你的查询保存 datatable1
第一条时,
我们就来个 dim dtrow as datarow=datatable.rows(0)
textbox1.text=dtrow.item("字段名")'
...
都是如此
当然也是可能绑定的
CurrencyManager 用于管理显示的行数
textbox.DataBindings.add("属性",data,"字段")
script type="text/javascript" src="" /script
script type="text/javascript" src="" /script
有两个表order(orderid,ordername,totalprice), orderdetail(orderid,productid,productname,price) 已经建立一对多
关联(orderid). 用VB.NET建立一个窗体, 用于主表和明细表的数据录入及更新.
在窗体上增加两个sqldataadapter,分别选择order和orderdetail表, 并生成数据集,在DATASET中建立关联(orderid) 主表中:ORDERID,ORDERNAME 绑定在两个TEXTBOX文本框中,用于接受用户的输入,totalprice接受明细表中price
的汇总值.
明细表绑定到一个DATAGRID控件, datasource:dsorder; datamember:order.orderorderdetail建立的关联名称
问题: 在主表中新增一个记录,用户录入orderid和ordername后,进入明细表的录入,用户录入productid, productname, price后,提示 “明细orderID列不允许空值,要更正该值吗?” 是什么原因?
用于连接主表的明细orderID如果输入跟主表一样的orderID时提示“ForeignKeyconstraint 要求在交叉表中存在子键值。要更正该值吗?”
只有录入主表中的orderid和ordername后, 先更新主表数据源,才可以编辑更新明细表,这是为什么? 请问,有没有其他更好的方法, 实现主表和明细表的新增记录同时更新呢? 谢谢关照! 网友:方宇 回复:
附部分源代码:
Public Class fmOrders
Inherits System.Windows.Forms.Form
Dim WithEvents dtOrderDetails As New DataTable()
Dim BmOrders As BindingManagerBase
Dim BmOrderDetails As BindingManagerBase
Dim OrderDetailsHasChange As Boolean
Dim orderid As DataColumn
dim ordername as datacolumn
Dim SubTotal As DataColumn Private Sub bnFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnFirst.Click
BmOrders.Position = 0
End Sub
Private Sub bnPrior_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnPrior.Click
BmOrders.Position -= 1
End Sub
Private Sub bnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnNext.Click
BmOrders.Position += 1
End Sub
Private Sub bnLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnLast.Click
BmOrders.Position = BmOrders.Count - 1
End Sub Private Sub bnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnAdd.Click
Try
BmOrders.EndCurrentEdit()
BmOrders.AddNew()
Catch err As System.SystemException
MessageBox.Show(err.ToString)
End Try
End Sub
Private Sub bnLoad_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnLoad.Click
FillData()
End Sub Private Sub bnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnUpdate.Click
Dim dsTestOrdersChange As DataSet BmOrderDetails.EndCurrentEdit()
BmOrders.EndCurrentEdit()
If Not dsTestOrders.HasChanges(DataRowState.Deleted) Then
Try
daOrders.Update(dsTestOrders, "Orders")
daOrderDetails.Update(dsTestOrders, "OrderDetails")
dsTestOrders.AcceptChanges()
Catch err As System.SystemException
dsTestOrders.RejectChanges()
MessageBox.Show(err.ToString)
Throw
End Try
Else
Try
daOrderDetails.Update(dsTestOrders, "OrderDetails")
daOrders.Update(dsTestOrders, "Orders")
dsTestOrders.AcceptChanges()
Catch err As System.SystemException
dsTestOrders.RejectChanges()
MessageBox.Show(err.ToString)
Throw
End Try
End If
End Sub Private Sub fmOrders_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
FillData()
dtOrderDetails = dsTestOrders.Tables("OrderDetails")
BmOrders = Me.BindingContext(dsTestOrders, "Orders")
BmOrderDetails = Me.BindingContext(dsTestOrders, "Orders.OrdersOrderDetails")
OrderDetailsHasChange = True
SubTotal = dsTestOrders.Tables("Orders").Columns("SubTotal")
SubTotal.DefaultValue = 0
Price = dsTestOrders.Tables("OrderDetails").Columns("Price")
Price.DefaultValue = 0
End Sub Private Sub FillData()
dsTestOrders.EnforceConstraints = False
daOrders.Fill(dsTestOrders)
daOrderDetails.Fill(dsTestOrders)
dsTestOrders.EnforceConstraints = True
End Sub
Private Sub dtOrderDetails_ColumnChanged(ByVal sender As Object, ByVal e As System.Data.DataColumnChangeEventArgs) _
Handles dtOrderDetails.ColumnChanged Dim drOrders As DataRow
Dim drOrderDetails As DataRow
Dim iSubTotal As Integer
Try
If OrderDetailsHasChange Then
OrderDetailsHasChange = False
drOrders = dsTestOrders.Tables("Orders").Rows(BmOrders.Position)
iSubTotal = 0
For Each drOrderDetails In drOrders.GetChildRows("OrdersOrderDetails")
iSubTotal = iSubTotal + drOrderDetails("price")
Next
drOrders.BeginEdit()
drOrders("SubTotal") = iSubTotal
drOrders.EndEdit()
End If
Finally
OrderDetailsHasChange = True
End Try
End Sub Private Sub bndelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bndelete.Click
If BmOrders.Count 0 Then
BmOrders.RemoveAt(BmOrders.Position)
End If
End Sub Private Sub bncancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bncancel.Click
BmOrders.CancelCurrentEdit() End Sub
End Class script type="text/javascript" src="" /script
script type="text/javascript" src="" /script