基础但又不容易回答的问题,关于WinForm下的VB.NET,大家都来看看,100分不含糊!!

Night_Elf 2004-08-30 09:38:33
1.在Form1上点击某按钮弹出Form2,Form1上有一个DataGrid,在Form2上操作完之后,Form1上的Datagrid的数据应该发生改变,我怎么才能在Form2关闭的时候刷新form1的datagrid?各位大侠有什么好的方法没?

2.对于不只读的DataGrid在最下方有一个空行可以操作,我不想有这么一行,因为我只想操作这个 DataGrid 的某一列,该怎么解决!

3.dataGrid中的CheckBox:我让这一列的DataGridBoolColumn的AllowNull = False,我想这样就不会出现三态的情况了,但它在默认的时候仍然是灰色的(虽然点击之后它是两态的),怎么让它默认不为空?我是这么在程序中控制的:
For i = 0 To DataGrid2.VisibleRowCount - 1
DataGrid1.Item(i, 3) = True
Next
但默认还是灰色!!!

4。关于事务的问题:我在Form的后台代码中是调用不同类的不同方法来对数据库进行操作,在这种情况下如何添加事务?(在Form的后台代码中没有打开数据库连接,数据库连接都在类中,在类中添加事务是不能对整体产生影响的)


问题是多了点,分数是少了点,还请大家能够不吝赐教!问题若都能解决定另开贴给分!
多谢!!!
...全文
429 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
yingshis 2004-09-01
  • 打赏
  • 举报
回复
up
matinpetrov 2004-09-01
  • 打赏
  • 举报
回复
顶一下
crashloopbackoff 2004-09-01
  • 打赏
  • 举报
回复
分数倒是无所谓,最重要的是大家可以交流。
crashloopbackoff 2004-09-01
  • 打赏
  • 举报
回复
关于事务的问题,我已经接受ericvan(骨灰虫)的意见,对类进行调整,感谢ericvan(骨灰虫) ,感谢各位!
---------------------------------------------
再给楼主一些建议,在设计类的时候,一般我都不把连接代码包在里面,通常的做法是包几个生成SqlCommand的方法,比如GenerateInsertCommand(),GenerateUpdateCommand()......
让这些方法直接返回可用的SqlCommand对象。然后用起来就很灵活,只要前后加上连接代码和try...catch,这样就可以把各种command随意组合,避免了频繁打开数据库,也解决了事务的问题。只是我总结的一些经验,不知道大家是怎么做的,可以交流交流。
Night_Elf 2004-09-01
  • 打赏
  • 举报
回复
谢谢各位网友!
前两个问题都已经解决,第四个问题看来真是我的类的设计问题了,现在正在进行艰苦的调整(一次写了很多个类,中有很多个方法)
第三个问题很让人费解,该设的我都设了,怎么默认情况下还是灰色的呢?(即为Null)

再次谢谢各位网友,现在结贴了,分数太少,还望勿怪,这么简单的问题另开贴给分实在是难为情!不知能不能通过相赠的方式?
sarcophile 2004-09-01
  • 打赏
  • 举报
回复
1,form1 中一直都有 form2 的实例,在Form1中 form2.show 完后, form1.xxx = form2.xxx 就完了
龙豆2211 2004-09-01
  • 打赏
  • 举报
回复
2
ds.Tables(0).DefaultView.AllowNew = False '不允许新增
KahnWinsock 2004-09-01
  • 打赏
  • 举报
回复
致作者:
1.在Form1上点击某按钮弹出Form2,Form1上有一个DataGrid,在Form2上操作完之后,Form1上的Datagrid的数据应该发生改变,我怎么才能在Form2关闭的时候刷新form1的datagrid?各位大侠有什么好的方法没?
答:在form1中,用showdialog()打开form2,然后紧接着写刷新datagird的语句。这样,你在操作完毕form2并关闭了它之后,datagrid就会随之刷新了。


2.对于不只读的DataGrid在最下方有一个空行可以操作,我不想有这么一行,因为我只想操作这个 DataGrid 的某一列,该怎么解决!
答:不知道你的datagird是与什么绑定的。通常都是datatable的,如果你也是的话,那么,你再多加个dataview吧。然后,把dataview的table属性设成你用到的那个datatable,把这个dataview绑定到datagird上,在绑定之后,还要把dataview的allownew设为false,这样,最下面的空行就没有了。使用dataview其实与使用datatable没太大区别。

后两问没用过,不好意思乱讲。
AntingZ 2004-08-31
  • 打赏
  • 举报
回复
事务的各条语句最好一起执行,中间不要有太多的停顿,等待 ,否则容易造成死锁的发生

关于事务MSDN上有例子:
ms-help://MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemDataSqlClientSqlConnectionClassBeginTransactionTopic2.htm

下面的示例创建一个 SqlConnection 和一个 SqlTransaction。它还演示如何使用 BeginTransaction、Commit 和 Rollback 方法。
[Visual Basic]
Public Sub RunSqlTransaction(myConnString As String)
Dim myConnection As New SqlConnection(myConnString)
myConnection.Open()

Dim myCommand As SqlCommand = myConnection.CreateCommand()
Dim myTrans As SqlTransaction

' Start a local transaction
myTrans = myConnection.BeginTransaction(IsolationLevel.ReadCommitted)
' Must assign both transaction object and connection
' to Command object for a pending local transaction
myCommand.Connection = myConnection
myCommand.Transaction = myTrans

Try
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
myCommand.ExecuteNonQuery()
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"
myCommand.ExecuteNonQuery()
myTrans.Commit()
Console.WriteLine("Both records are written to database.")
Catch e As Exception
Try
myTrans.Rollback()
Catch ex As SqlException
If Not myTrans.Connection Is Nothing Then
Console.WriteLine("An exception of type " & ex.GetType().ToString() & _
" was encountered while attempting to roll back the transaction.")
End If
End Try

Console.WriteLine("An exception of type " & e.GetType().ToString() & _
"was encountered while inserting the data.")
Console.WriteLine("Neither record was written to database.")
Finally
myConnection.Close()
End Try
End Sub 'RunSqlTransaction
Night_Elf 2004-08-31
  • 打赏
  • 举报
回复
还有问题3,
Night_Elf 2004-08-31
  • 打赏
  • 举报
回复
TO:taofirst(遥望惠州):请问添加如何引用Com+分布式事务处理,我不懂!

如果各位能解决这个问题,定另外给分!!谢谢!!
taofirst 2004-08-31
  • 打赏
  • 举报
回复
可在C/S下根本没有System.EnterpriseServices

——————————————————————
添加引用
Com+分布式事务处理


zhangzhifeng8888 2004-08-31
  • 打赏
  • 举报
回复
第一个问题:你可以通过地址引用把form1得datagrid传递到form2中,这样就可以对datagrid直接就该了(当然刷新更是没问题。)
kissnono 2004-08-31
  • 打赏
  • 举报
回复
1.dim frm2 as new form2
addhandler frm2.closed,addressof 数据集刷新
frm2.show or showdialog
Night_Elf 2004-08-31
  • 打赏
  • 举报
回复
谢谢 ericvan(骨灰虫),请问如何把事务对象用参数传出来进行操作
crashloopbackoff 2004-08-31
  • 打赏
  • 举报
回复
这种情况不能再添加事务了,再说你这样频繁打开数据库,performance也差,对于一次操作,open一次就足够了,建议再写一个方法来处理这种情况。
而且象你这样操纵两个数据库,就有两个连接,也就是说要两个事务,任何一个出错,两个都需要回滚。
或者还有一个办法,你可以把事务对象用参数传出来进行操作。
Night_Elf 2004-08-31
  • 打赏
  • 举报
回复
可是我的DataGridBoolColumn列中的AllowNull 已经是 False了
怎么默认情况下还是灰色的呢?(虽然点击发现是两态的,怎么让它默认不是灰色的)
Night_Elf 2004-08-31
  • 打赏
  • 举报
回复
在我的后台代码中是这样子的:
Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

dim MyClass1 as new MyClass1
dim MyClass2 as new MyClass2

MyClass1.AddTables1() '向Tables1添加数据
MyClass1.UpdateTables2() '更新Tables2的数据

MyClass2.AddOtherDatabase '向另一个数据库中的某个表添加数据

End Sub
请问在这种情况下怎么添加事务!
急..........................呀!
木头呆但不傻 2004-08-31
  • 打赏
  • 举报
回复
1, 在Form2 上将绑定DataGrid的datatable引用传过去就可以随便怎么操作,两边都是一致的
2, 将绑定DataGrid的datatable的 datatable.DefaultView.AllowNew= False 就可以了
3, datatable.Columns(i).DefaultValue = False i你的datatable上的bool列所在的列的位置
taofirst 2004-08-31
  • 打赏
  • 举报
回复
Dim ty As New DataGridTableStyle
ty.MappingName = tb.TableName
Dim cl As New DataGridBoolColumn
cl.MappingName = tb.Columns(0).ColumnName
cl.AllowNull = False
ty.GridColumnStyles.Add(cl)
Me.DataGrid1.TableStyles.Clear()
Me.DataGrid1.TableStyles.Add(ty)
加载更多回复(17)

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧