datagrid与DataSet结合使用中出现的索引问题
2008-09-14 10:39
489 查看
当把DataSet绑定到Datagrid控件,
并利用DataAdapter对象修改数据库
如:
dimadpasnewOleDbDataAdapter(stradp,conn)
dimocbasnewOleDbCommandBuilder(adp)
adp.DeleteCommand=ocb.GetDeleteCommand()
adp.Update(ds,"Orders")
--------------------------------
执行删除操作时,如我们加入这样一个方法:
submydatagrid_delete(senderasobject,easdatagridcommandeventargs)
dimdtasnewDataTable()
dt=ds.Tables("Orders")
dimdrasDataRow
dr=dt.Rows(E.Item.ItemIndex)
dr.delete
'dr.AcceptChanges'曾经尝试使用彻底删除,发现adp自动更新回数据库时,无法自动生成相应的sql语句
'解决删除当前页最后一项时出现的页索引异常
'*****************************************************************
dimlastEditPageasinteger=mydatagrid.currentPageIndex
If(mydatagrid.pageCount-mydatagrid.currentPageIndex)=1andmydatagrid.Items.Count=1Then
Ifmydatagrid.pageCount>1Then
lastEditPage=LastEditPage-1
Else
lastEditPage=0
EndIf
EndIf
mydatagrid.currentPageIndex=lastEditPage
'****************************************************************
session("orderList")=ds
mydatagrid.edititemindex=-1
mydatagrid.datasource=ds.tables("Orders")
mydatagrid.databind()
endsub
当由第一个开始逐个删除时出现了异常,发现在删除第二时,删不掉,即原来的dr(2)没有自动变为dr(1)。如果我们使用dr.deletedr.acceptChanges则可以自动变化,但是上面说明了,则无法使用自动更新回到数据库。我们必须获得删除时的实际索引,所以就用了一个本方法,在当前的ds中另外建了一个Table,保持同步删除,但是在Table的id列中,保存实际的索引值,具体代码如下:
解决dr索引的一个办法:
dimorderTableasnewDataTable()'建一个临时表用来保存索引,保持同步删除
dimtheNewRowasDataRow
dimdcasDataColumn
orderTable.TableName="orderId"
ds.Tables.add(orderTable)
dc=newDataColumn()
dc.ColumnName="id"
orderTable.columns.add(dc)
dimdcKey()asDataColumn={orderTable.Columns("id")}
orderTable.primaryKey=dcKey
dimiasinteger
Fori=0to(ds.Tables("Users").Rows.Count-1)
theNewRow=orderTable.NewRow()
theNewRow("id")=i.toString()
orderTable.Rows.add(theNewRow)
Next
上述删除功能中加的代码,替换dr=dt.Rows(e.Item.ItemIndex):
dimdrOrderasDataRow
drOrder=ds.Tables("orderId").Rows(E.Item.ItemIndex)
dimcurrentOrderasinteger=CInt(drOrder("id"))+mydatagrid.currentPageIndex*mydatagrid.PageSize
dr=dt.Rows(currentOrder)
drOrder.delete
如果有更新功能,则替换dr=dt.Rows(e.Item.ItemIndex):
dimdrOrderasDataRow
drOrder=ds.Tables("orderId").Rows(E.Item.ItemIndex)
dimcurrentOrderasinteger=CInt(drOrder("id"))+mydatagrid.currentPageIndex*mydatagrid.PageSize
dr=dt.Rows(currentOrder)
并利用DataAdapter对象修改数据库
如:
dimadpasnewOleDbDataAdapter(stradp,conn)
dimocbasnewOleDbCommandBuilder(adp)
adp.DeleteCommand=ocb.GetDeleteCommand()
adp.Update(ds,"Orders")
--------------------------------
执行删除操作时,如我们加入这样一个方法:
submydatagrid_delete(senderasobject,easdatagridcommandeventargs)
dimdtasnewDataTable()
dt=ds.Tables("Orders")
dimdrasDataRow
dr=dt.Rows(E.Item.ItemIndex)
dr.delete
'dr.AcceptChanges'曾经尝试使用彻底删除,发现adp自动更新回数据库时,无法自动生成相应的sql语句
'解决删除当前页最后一项时出现的页索引异常
'*****************************************************************
dimlastEditPageasinteger=mydatagrid.currentPageIndex
If(mydatagrid.pageCount-mydatagrid.currentPageIndex)=1andmydatagrid.Items.Count=1Then
Ifmydatagrid.pageCount>1Then
lastEditPage=LastEditPage-1
Else
lastEditPage=0
EndIf
EndIf
mydatagrid.currentPageIndex=lastEditPage
'****************************************************************
session("orderList")=ds
mydatagrid.edititemindex=-1
mydatagrid.datasource=ds.tables("Orders")
mydatagrid.databind()
endsub
当由第一个开始逐个删除时出现了异常,发现在删除第二时,删不掉,即原来的dr(2)没有自动变为dr(1)。如果我们使用dr.deletedr.acceptChanges则可以自动变化,但是上面说明了,则无法使用自动更新回到数据库。我们必须获得删除时的实际索引,所以就用了一个本方法,在当前的ds中另外建了一个Table,保持同步删除,但是在Table的id列中,保存实际的索引值,具体代码如下:
解决dr索引的一个办法:
dimorderTableasnewDataTable()'建一个临时表用来保存索引,保持同步删除
dimtheNewRowasDataRow
dimdcasDataColumn
orderTable.TableName="orderId"
ds.Tables.add(orderTable)
dc=newDataColumn()
dc.ColumnName="id"
orderTable.columns.add(dc)
dimdcKey()asDataColumn={orderTable.Columns("id")}
orderTable.primaryKey=dcKey
dimiasinteger
Fori=0to(ds.Tables("Users").Rows.Count-1)
theNewRow=orderTable.NewRow()
theNewRow("id")=i.toString()
orderTable.Rows.add(theNewRow)
Next
上述删除功能中加的代码,替换dr=dt.Rows(e.Item.ItemIndex):
dimdrOrderasDataRow
drOrder=ds.Tables("orderId").Rows(E.Item.ItemIndex)
dimcurrentOrderasinteger=CInt(drOrder("id"))+mydatagrid.currentPageIndex*mydatagrid.PageSize
dr=dt.Rows(currentOrder)
drOrder.delete
如果有更新功能,则替换dr=dt.Rows(e.Item.ItemIndex):
dimdrOrderasDataRow
drOrder=ds.Tables("orderId").Rows(E.Item.ItemIndex)
dimcurrentOrderasinteger=CInt(drOrder("id"))+mydatagrid.currentPageIndex*mydatagrid.PageSize
dr=dt.Rows(currentOrder)
相关文章推荐
- datagrid与DataSet结合使用中出现的索引问题
- [导入]Flex使用Weborb与.NET交互的问题:使用DataSet出现"提供的索引超出范围"异常
- Flex使用Weborb与.NET交互的问题:使用DataSet出现"提供的索引超出范围"异常
- png库结合zlib库使用出现的一个链接问题的解决
- 解决listview与scrollview结合使用时出现的问题
- 结合阿里云服务器,使用FTP上传和下载文件,出现的问题和解决方案
- png库结合zlib库使用出现的一个链接问题的解决
- 在DataGrid的使用中,出现:索引超出范围。
- mybatis结合ehcache使用时出现分页失败的问题
- 解决listview与scrollview结合使用时出现的问题
- volley+listView结合使用时出现的问题以及解决方案
- linux系统下基于mono部署asp.net,使用ef6与mysql出现的问题【索引】
- Qt智能指针和QObject对象树系统(父子系统)结合使用出现的问题
- Android recycleview和cardview结合使用出现的边角阴影问题
- 解决listview与scrollview结合使用时出现的问题
- 关于使用datagrid出现的CurrentPageIndex 值.它必须大于等于 0 且小于 PageCount!的问题
- 关于easyui的datagrid与combobox结合使用的问题
- jquery获取获取this出错、与键盘事件结合使用出现问题