以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  单击某一列,名头一样的合并,同时显示在最前面  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=29980)

--  作者:7032175
--  发布时间:2013/3/18 15:29:00
--  单击某一列,名头一样的合并,同时显示在最前面
一个表里面有三层名头,其中每层名头都有重复了,当我单击某一列时,单元格里面有内容的自动集中到最前面,同时重复的名头合并在一起,我这里面有一个例子文件,在例子文件里面运行起来就没有问题,但是在文件里面运行起来就不好使,由天水平有限不能将这个例子运用到文件里面,请狐狸爸爸帮一下。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:例子.table
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:文件.table



--  作者:狐狸爸爸
--  发布时间:2013/3/18 16:39:00
--  

你搞得太复杂了,postionChanged事件代码改为:

 

e.Table.StopRedraw
Dim lst1 As New List (of String)
Dim lst2 As New List (of String)
Dim r As Row = e.Table.Current
Dim idx As Integer = e.Table.colsel
For Each c As col In e.Table.cols
    Select Case c.name
        Case "日期","计划号","材质","粒度备注"
        Case Else
            If r.IsNull(c.name) Then
                lst2.add(c.name)
            Else
                lst1.add(c.name)
            End If
    End Select
Next
lst1.sort
lst2.sort
Dim p As Integer = 4
For i As Integer = 0 To lst1.count -1
    e.Table.Cols(lst1(i)).Move(p)
    p = p + 1
Next
For i As Integer = 0 To lst2.count -1
    e.Table.Cols(lst2(i)).Move(p)
    p = p + 1
Next
e.Table.Select(e.Table.Rowsel,idx)
e.Table.ResumeRedraw


--  作者:7032175
--  发布时间:2013/5/4 9:09:00
--  
狐爸爸,您给的代码非常好,但是有一个问题,我想当单击某一行把有的内容集中在前面,后面的没有内容列隐藏起来,要如何更改代码
--  作者:狐狸爸爸
--  发布时间:2013/5/4 11:56:00
--  

For i As Integer = 0 To lst2.count -1
    e.Table.Cols(lst2(i)).Move(p)
    p = p + 1
Next


 

改为:

 

For i As Integer = 0 To lst2.count -1
    e.Table.Cols(lst2(i)).Visisble = False
Next

[此贴子已经被作者于2013-5-4 11:56:08编辑过]

--  作者:7032175
--  发布时间:2013/5/4 12:43:00
--  
狐爸爸 您看看这是为什么
图片点击可在新窗口打开查看此主题相关图片如下:qq截图20130504124243.png
图片点击可在新窗口打开查看

--  作者:狐狸爸爸
--  发布时间:2013/5/4 12:45:00
--  
e.Table.Cols(lst2(i)).Visible = False
--  作者:7032175
--  发布时间:2013/5/4 13:10:00
--  
狐爸爸,还是要麻烦您一下,当我建立一个关联表,如何实现单击主表的一行,受到关联的表也会自动把有内容的列集中在一起。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:文件.table


--  作者:狐狸爸爸
--  发布时间:2013/5/4 17:26:00
--  

你在"泥料配比_1"的CurrentChanged事件设置同样的代码。

但是需要判断一下是否存在当前行:

 

 

e.Table.StopRedraw
Dim lst1 As New List (of String)
Dim lst2 As New List (of String)
Dim r As Row = e.Table.Current

if r Is nothing Then

   Return

End if
Dim idx As Integer = e.Table.colsel
For Each c As col In e.Table.cols
    Select Case c.name
        Case "日期","计划号","材质","粒度备注"
        Case Else
            If r.IsNull(c.name) Then
                lst2.add(c.name)
            Else
                lst1.add(c.name)
            End If
    End Select
Next
lst1.sort
lst2.sort
Dim p As Integer = 4
For i As Integer = 0 To lst1.count -1
    e.Table.Cols(lst1(i)).Move(p)
    p = p + 1
Next
For i As Integer = 0 To lst2.count -1
    e.Table.Cols(lst2(i)).Move(p)
    p = p + 1
Next
e.Table.Select(e.Table.Rowsel,idx)
e.Table.ResumeRedraw


--  作者:7032175
--  发布时间:2013/5/5 10:19:00
--  
狐爸爸,还有一件事就是在关联的时候,如果受到关联的表没有相同的内容,就会显示空白,但是在移动到有关联内容的时候就回不来了,一直是空白,这要怎么解决呢
--  作者:7032175
--  发布时间:2013/5/6 9:19:00
--  
狐爸爸今天上班 ,8楼的代码是对的,但是一样就是在关联的时候,如果没有符合关联的内容后,表就全白了,而后就一直是白。这是为什么。