以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]副本表列的Remove  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=173585)

--  作者:张松波
--  发布时间:2021/12/7 1:45:00
--  [求助]副本表列的Remove
窗口1里有一个table控件,绑定到[表A](这个表A有很多列)副本表设为true, 加载的是从后台MSSQL筛选[表A]出来的某些行,用以下代码无法移除要移除的行。如果副本表设为False就可以。请帮看下怎么回事,谢谢。
代码写在窗口1的 AfterLoad 里的。
Dim t As Table = e.Form.Controls("Table1").Table
Dim zds() As String = {"姓名","性别","年龄"}
For i As Integer = 0 To zds.Length - 1
       If t.Cols.Contains(zds(i)) = False Then
            t.Cols.Remove(zds(i))
       End If
Next

如果用最原始的办法把代码改为如下,即使是副本表也起作用。不知道是什么原因。
Dim t As Table = e.Form.Controls("Table1").Table
If t.Cols.Contains("备注") Then
       t.Cols.Remove("备注","身份证号",--------等等)
End If

就是因为列太多了,想用最偷懒的办法,才选择最上边的代码。
[此贴子已经被作者于2021/12/7 1:46:17编辑过]

--  作者:有点蓝
--  发布时间:2021/12/7 9:09:00
--  
是要移除【"姓名","性别","年龄"】这些列,还是除了这些列都移除掉?
--  作者:张松波
--  发布时间:2021/12/7 10:05:00
--  
是移除除了姓名、性别、年龄的列。我发现我if --  end if 这段写错了,改回来了。现在判断t.cols(i).name的值属不属于Dim zds() As String = {"姓名","性别","年龄"}的元素,请问不用for语句有没有更简单的代码(类似于select语句的IN,一下子就判断出来了的那种)。
--  作者:有点蓝
--  发布时间:2021/12/7 10:38:00
--  
Dim t As Table = e.Form.Controls("Table1").Table
Dim lst As new List(of String) 
lst.AddRange( {"姓名","性别","年龄"})
For i As Integer = t.Cols.count - 1 To 0 Step -1
    If lst.Contains(t.Cols(i).Name) = False Then
        t.Cols.Remove(t.Cols(i).Name)
    End If
Next

--  作者:张松波
--  发布时间:2021/12/7 12:07:00
--  
感谢老师的回复。您的代码好用。看了您的代码我才反应过来,需要从后往前移除。