关于datagridview的selectchanged事件,太奇怪了?

大刘0417 2010-05-28 03:17:16
窗体的load:

Private Sub MinecMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
sqlconn.ConnectionString = "server=(local);database=Northwind;integrated security=sspi"
sqlconn.Open()
sqlcomm.CommandText = "select * from Customers"
sqlcomm.CommandType = CommandType.Text
sqlcomm.Connection = sqlconn
sqldt.SelectCommand = sqlcomm
sqldt.Fill(sqldataset, "Customers")
DataGridView1.DataSource = sqldataset.Tables("Customers")
DataGridView1.AutoGenerateColumns = True
End Sub

datagridview1的selectionchanged:

Dim n As Integer = 0
Private Sub DataGridView1_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.SelectionChanged
n += 1
MessageBox.Show(n)
End Sub


我发现selectionchanged运行了三次,这是怎么回事?该如何解决,我的这个事件里要有很多的代码,运行次数多了严重影响性能,也不允许出现这种情况,是代码有问题还是其他原因?怎么办???
我只剩下25分了,都给了!
...全文
307 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Forrest23 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pengwei0417 的回复:]
同步改变各个textbox等控件的显示值?
[/Quote]

你可以用

Private Sub DataGridView1_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick

End Sub



大刘0417 2010-05-28
  • 打赏
  • 举报
回复
我是这么处理的:
testdataview = False

DataGridView1.DataSource = sqldataset.Tables("personinfo_goodsinfo")
testdataview = True
DataGridView1.AutoGenerateColumns = True


Private Sub DataGridView1_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.SelectionChanged
If testdataview = True Then
selectdatagriviewcells()
End If
End Sub

感谢提示!

我又在网上找了一下关于这方面的问题。

看来只能这样了
EIT王子 2010-05-28
  • 打赏
  • 举报
回复
补充一点,如果你要做到只用一次的话可以用个数字值来确定,这样就可以过滤掉了。0,1,2分别代表三次,看你要用哪次的值咯。。
EIT王子 2010-05-28
  • 打赏
  • 举报
回复
此事件会在选择前,选择时和取消选择单元格(无论是以编程方式还是通过用户操作的方式)时各发生一次。

其实所谓的选择前也就相当于你上次选择的取消。所以是三次。
大刘0417 2010-05-28
  • 打赏
  • 举报
回复
这可咋整?
大刘0417 2010-05-28
  • 打赏
  • 举报
回复
关键是为什么会运行三次!

大刘0417 2010-05-28
  • 打赏
  • 举报
回复
同步改变各个textbox等控件的显示值?
Forrest23 2010-05-28
  • 打赏
  • 举报
回复
确实运行了 三次 想问你用这个DataGridView1_SelectionChanged事件来做什么?
大刘0417 2010-05-28
  • 打赏
  • 举报
回复
Imports System.Data.SqlClient
Imports System.Drawing
Public Class MinecMain
Dim sqlconn As New SqlConnection
Dim sqldt As New SqlDataAdapter
Dim sqldr As SqlDataReader
Dim sqlcomm As New SqlCommand
Dim sqldataset As New DataSet
Private Sub MinecMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
sqlconn.ConnectionString = "server=(local);database=Northwind;integrated security=sspi"
sqlconn.Open()
sqlcomm.CommandText = "select * from Customers"
sqlcomm.CommandType = CommandType.Text
sqlcomm.Connection = sqlconn
sqldt.SelectCommand = sqlcomm
sqldt.Fill(sqldataset, "Customers")
DataGridView1.DataSource = sqldataset.Tables("Customers")
DataGridView1.AutoGenerateColumns = True
End Sub
Dim n As Integer = 0
Private Sub DataGridView1_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.SelectionChanged
n += 1
MessageBox.Show(n)
End Sub


窗体里只有这些代码,运行之后就执行3次
charpin 2010-05-28
  • 打赏
  • 举报
回复
你可以设置一个布尔值的数来控制,当其为真时运行,当运行了一次之后即将其设为假
Forrest23 2010-05-28
  • 打赏
  • 举报
回复
你做了什么操作之后 这个事件执行了3次呢

16,554

社区成员

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

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