风暴虫再问 WinForm下DataGid的问题,请进来小叙!(DataGrid的问题怎地如此之多)

Night_Elf 2004-10-22 09:53:47
1.请先看这段代码:
Private Sub DataGrid1_CurrentCellChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGrid1.CurrentCellChanged
If DataGrid1.CurrentCell.ColumnNumber = 0 Then
Dim frm As New Form1
frm.TextBox1.Text = DataGrid1.Item(DataGrid1.CurrentCell)
frm.Show()
End If
End Sub
我相信大家都知道我想干什么:当点datagrid第一列的时候跳出一个窗体来,但问题是CurrentCellChanged事件顾名思义是只有当Cell改变时才触发,如果连续点一个Cell的话,就不能连续的跳出窗体,我想这个问题很常见,我想听听大家是怎么实现在任何时候点一个Cell时,都能弹出一个窗体的(难道大家都用CurrentCellChanged事件?这个事件很让人不爽!)

2。我就不知道大家有没有遇到过了:
DataGrid:Readonly,在进行DataGrid查询的时候,鼠标先是在DataGrid的某个Cell中,当然这个Cell显示是灰色的(只读),这时我在窗体的一个Textbox中输入查询条件点击Button进行查询后,DataGrid数据发生了改变,但奇怪的事情发生了,刚才我点击的那个灰色的Cell还显示在DataGrid上或是屏幕上的原位置(不管查询结果中有没有对应的那一行!),不知大家有没有遇到过!(我想这不是DataGrid的Bug!)

从刚开始学.Net的时候就在受DataGrid的折磨,到今天仍然如此,还希望各位大狭出手相助!
谢先!
...全文
386 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
Night_Elf 2004-11-01
  • 打赏
  • 举报
回复
好长时间不上CSDN了,来了揭贴先
rock29 2004-10-27
  • 打赏
  • 举报
回复
破ISA,不会调
Uncommon 2004-10-22
  • 打赏
  • 举报
回复
好多关于datagrid的例程
http://www.donews.net/blueoxygen/archive/2004/04/17/12864.aspx
水如烟 2004-10-22
  • 打赏
  • 举报
回复
关键是DataGrid.HitTestInfo

To AntingZ(夕惕若):
这段时间哪去了。
水如烟 2004-10-22
  • 打赏
  • 举报
回复
参考这个:
3、在TextBox里显示鼠标下的GridCell数据(2004.7.22)
Private Sub DataGrid1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGrid1.MouseMove

Dim myHit As DataGrid.HitTestInfo

myHit = DataGrid1.HitTest(e.X, e.Y)

If myHit.Row = -1 OrElse myHit.Column = -1 Then

Me.TextBox1.Text = ""

Else

Me.TextBox1.Text = Me.DataGrid1.Item(myHit.Row, myHit.Column).ToString

End If

End Sub



‘当Mouse快速移出DataGrid时,上面的myHit = DataGrid1.HitTest(e.X, e.Y)

‘是不能及时响应的,所以还要加下面这个:

Private Sub DataGrid1_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.MouseLeave

Me.TextBox1.Text = ""

End Sub
rock29 2004-10-22
  • 打赏
  • 举报
回复
不知道,我的都有的
Night_Elf 2004-10-22
  • 打赏
  • 举报
回复
再请教一下rock29(rock) ,我写了一个类DataGridColorTextBoxColumn来继承DataGridTextBoxColumn,请问在DataGridTextBoxColumn中有的属性,在DataGridColorTextBoxColumn都没有了呀,怎么让他们出现呀!谢谢
Night_Elf 2004-10-22
  • 打赏
  • 举报
回复
我还是没有看见哪边有DataGridTextBoxColumn呀!
rock29 2004-10-22
  • 打赏
  • 举报
回复
呵呵,去了趟中东,一看形势不好又溜回来了^_^
Night_Elf 2004-10-22
  • 打赏
  • 举报
回复
也好久不见AntingZ(夕惕若)了,这次出现就变成两颗星了!也没见你发扬一下传统散散分呀!
你的代码我先试一下,第二个问题麻烦你也看看,谢谢!
rock29 2004-10-22
  • 打赏
  • 举报
回复
自然没有,难道你没看出来我是抄的DataGridTextBoxColumn吗:))
AntingZ 2004-10-22
  • 打赏
  • 举报
回复
好久不见rock29了,当初学用datagrid的时候 都是看rock的回答来学的 :)
AntingZ 2004-10-22
  • 打赏
  • 举报
回复
上面的代码是再Cell获得焦点后再次点击时有效,第一次点击应该是被Datagrid捕获了
Night_Elf 2004-10-22
  • 打赏
  • 举报
回复
DataGridTextBox有MappingName ,HeaderText 等属性吗
AntingZ 2004-10-22
  • 打赏
  • 举报
回复
以前的一个例子,

Private Function MakeTable() As DataTable
Dim t As New DataTable("myTable")
t.Columns.Add("ID").AutoIncrement = True
t.Columns.Add("Name")

Dim r As DataRow
r = t.NewRow
r.Item("Name") = "one"
t.Rows.Add(r)

r = t.NewRow
r.Item("Name") = "two"
t.Rows.Add(r)

r = t.NewRow
r.Item("Name") = "three"
t.Rows.Add(r)

Return t

End Function

Private Sub myCellMouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Dim tb As TextBox = CType(sender, TextBox)
MsgBox(tb.Text)
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim t As DataTable = MakeTable()
Me.DataGrid1.DataSource = t

Dim Cols() As String = {"Id", "Name"}
Dim Headers() As String = {"编号", "名称"}

Dim Widths() As Int32 = {50, 100}

Dim ts As New DataGridTableStyle
ts.RowHeaderWidth = 10
ts.MappingName = t.TableName
For i As Int32 = 0 To Cols.GetUpperBound(0)
Dim ac As New DataGridTextBoxColumn
If i = 1 Then
'假设只有点击"名称"列才弹出
AddHandler ac.TextBox.MouseDown, AddressOf myCellMouseDown
End If

ac.MappingName = Cols(i)
ac.HeaderText = Headers(i)
ts.PreferredColumnWidth = Widths(i)
ts.GridColumnStyles.Add(ac)
Next
Me.DataGrid1.TableStyles.Clear()
Me.DataGrid1.TableStyles.Add(ts)
End Sub
rock29 2004-10-22
  • 打赏
  • 举报
回复
不是DataGridTextBoxColumn,是DataGridTextBox
rock29 2004-10-22
  • 打赏
  • 举报
回复
写在里面:
AddHandler TextBoxCol.Clicked, AddressOf TextBoxCol_Clicked

外面写:
Sub TextBoxCol_Clicked(ByVal sender As Object, ByVal e As EventArgs)
...
End Sub

Night_Elf 2004-10-22
  • 打赏
  • 举报
回复
DataGridTextBoxColumn好想是没有Click事件的呀
Night_Elf 2004-10-22
  • 打赏
  • 举报
回复
to :rock29(rock)
可不可以这样,继承DataGridTextBoxColumn,为这个textboxColumn添加一个Click事件呀,但我又不知这个Click时间怎么写
rock29 2004-10-22
  • 打赏
  • 举报
回复
你自己试试呀,我实在记不清了,反正就写在两个地方之一吗!
加载更多回复(18)

16,554

社区成员

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

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