Foxtable(狐表)用户栏目专家坐堂 → 多行填充一行的问题


  共有23568人关注过本帖树形打印复制链接

主题:多行填充一行的问题

帅哥哟,离线,有人找我吗?
jhxb8821
  61楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:951 积分:6490 威望:0 精华:0 注册:2016/4/15 22:24:00
  发帖心情 Post By:2024/7/20 13:32:00 [只看该作者]

蓝老师,固定的还会写,这个动态的还差最后一米,请老师帮忙完善一下,我实在想不出来,这个案例实用性特别强

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  62楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:113054 积分:575669 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/7/20 13:56:00 [只看该作者]

最后一米指什么?什么地方想不通?

 回到顶部
帅哥哟,离线,有人找我吗?
jhxb8821
  63楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:951 积分:6490 威望:0 精华:0 注册:2016/4/15 22:24:00
  发帖心情 Post By:2024/7/20 14:04:00 [只看该作者]

固定的可以在SelectedIndexChanged事件中设置代码,如:
Dim Filter As String
Select Case e.Sender.SelectedPage.text
    Case "全部"
        Tables("拼音首字").Filter = Filter
    Case "第1类" '此为页面标题
        Tables("拼音首字").Filter = "[首字分类] = '第1类'"
    Case "第2类"
        Tables("拼音首字").Filter = "[首字分类] = '第2类'"
    Case "第3类"
        Tables("拼音首字").Filter = "[首字分类] = '第3类'"
        
        ' ……
End Select
但动态的首次不清楚怎么写。分类页面已完美了,但差一个合计汇总,该项目可广泛运用于酒店饭店,会议室,宾馆等预订类项目,就差一丁点了,还得麻烦老师了

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  64楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:113054 积分:575669 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/7/20 14:09:00 [只看该作者]

既然都是相同的东西,直接使用e.Sender.SelectedPage.text做查询条件不就行了


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
jhxb8821
  65楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:951 积分:6490 威望:0 精华:0 注册:2016/4/15 22:24:00
  发帖心情 Post By:2024/7/20 15:03:00 [只看该作者]

Dim Filter As String
For Each pg As WinForm.TabPage In e.Form.Controls("TabControl1").TabPages
    If pg.Text = "经典类" Then
        Tables("分类表").Filter = "[产品分类] = '经典类'"
        pg.Index = 1 '页面位置        
    Else If pg.Text = "现代类" Then
    Tables("分类表").Filter = "[产品分类] = '现代类'"
    pg.Index = 2 '页面位置  
    Else If pg.Text = "简约类" Then
    Tables("分类表").Filter = "[产品分类] = '简约类'" 
    pg.Index = 3 '页面位置 
    Else If pg.Text = "全部" Then
        Tables("分类表").Filter = Filter
        pg.Index = 0 '页面位置 
        Exit For
    End If
Next
这样写也不行

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  66楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:113054 积分:575669 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/7/20 15:22:00 [只看该作者]

Tables("分类表").Filter = "[产品分类] = '" & e.Sender.SelectedPage.text & "'"

 回到顶部
帅哥哟,离线,有人找我吗?
jhxb8821
  67楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:951 积分:6490 威望:0 精华:0 注册:2016/4/15 22:24:00
  发帖心情 Post By:2024/7/20 16:08:00 [只看该作者]

蓝老师,这些代码放在哪里好像都不合适,用Index页面定位也不行,还把原来的代码搞的乱七八糟的

 回到顶部
帅哥哟,离线,有人找我吗?
jhxb8821
  68楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:951 积分:6490 威望:0 精华:0 注册:2016/4/15 22:24:00
  发帖心情 Post By:2024/7/21 14:24:00 [只看该作者]

'第一部分  自定义一个页面集合
Dim tab1 As WinForm.TabControl '自定义一个页面集合
tab1 = e.Form.CreateControl("tab1", ControlTypeEnum.TabControl)
tab1.width = 650 '调整版面大小的尺寸(宽度)
tab1.height = 500 '调整版面大小的尺寸(高度)
tab1.Left = 10 '控件位置
tab1.Top = 100
e.Form.AddControl(tab1) '将控件加入窗口
e.Form.Controls("tab1").basecontrol.ItemSize = New Size(75, 23) '自定义页签的尺寸
tab1.Multiline = True '是否显示多行页签

'第二部分,自定义一个面板
Dim cmddt As New SQLCommand
'cmddt.ConnectionName = _Connection1
cmddt.CommandText = "sele?ct * fro?m {分类表}  "
Dim dt As DataTable = cmddt.ExecuteReader
Dim btn As WinForm.button '自定义按钮
Dim i As Integer = 0
Dim pan As WinForm.Panel
For Each s As String In dt.getvalues("产品分类")
    Dim page As winform.TabPage = tab1.TabPages.Add(s, s) '新增页面,页面名称和标题均为s
    pan = e.Form.CreateControl("pan" & s, ControlTypeEnum.panel)
    pan.width = 635 '调整面板的尺寸(宽度)
    pan.height = 480 '调整面板的尺寸(高度)
    pan.left = 10
    pan.Top = 10 
    page.addcontrol(pan)
    i = 0
    For Each dr As DataRow In dt.select("产品分类='" & s & "'")
        btn = e.Form.CreateControl("btn" & dr("产品名称"), ControlTypeEnum.button)
        btn.width = 90 '定义按钮尺寸(宽度)75
        btn.height = 52 '定义按钮尺寸(高度),原32                               
        btn.Text = dr("产品名称")        
        btn.Left = 20 + (i Mod 5) * 125 '调整按钮的横向间距125
        btn.Top = 20 + (i \ 5) * 100 '调整按钮的纵向间距 50           
        btn.basecontrol.tag = 0 
        pan.AddControl(btn) '现在的
        i = i + 1
    Next
    For Each pg As WinForm.TabPage In e.Form.Controls("Tab1").TabPages
        If e.Form.Controls("Tab1").TabPages("全部") Is Nothing Then '判断页面是否存在   
            e.Form.Controls("Tab1").TabPages.Add("全部","全部")' 新增
        Else
            '这里怎么写代码将全部控件集合在此页面
            
            e.Form.Controls("Tab1").Tabpages("全部").AddControl(btn)
        end if
    Next 
Next
老师,继续解决一下这个问题,将全部控件集合在全部页面内,并将全部这个页面放在第一个位置

 回到顶部
帅哥哟,离线,有人找我吗?
jhxb8821
  69楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:951 积分:6490 威望:0 精华:0 注册:2016/4/15 22:24:00
  发帖心情 Post By:2024/7/21 14:29:00 [只看该作者]

e.Form.StopRedraw() '停止绘制窗口

Dim s As String = e.Form.Controls("查询日期").Value

'If s >= Date.Today() Then

For Each pg As WinForm.TabPage In e.Form.Controls("TabControl1").TabPages

    If pg.Text = "全部0" Then

        Dim lbl11 As WinForm.Button

        Dim Value1 As String = DataTables("分类表").GetComboListString("产品名称", "[日期] = #" & s & "#", "排序号") '排序:

        Dim sps1() As Char = {"|"}

        Dim Names1() As String = Value1.Split(sps1)

        Dim s1 As Integer = 10 '与左边距离

        Dim t1 As Integer = 10 '与上边距离

        For i1 As Integer = 0 To Names1.length - 1

            If i1 <> 0 Then

                If i1 Mod 4 = 0 Then '如果1行显示3个控件

                    s1 = 10

                    t1 = t1 + 45 '调整控件纵向间距(30*15

                Else

                    s1 = s1 + 105 ''调整控件横向间距(80+20

                End If

            End If

            Dim nm1 As String = Names1(i1)

            lbl11 = e.Form.CreateControl(nm1, ControlTypeEnum.Button)

            lbl11.Text = nm1 '按钮标题:文字内容

            lbl11.name = nm1 '按钮名:文字内容

            lbl11.Width = 90 '自定义控件宽度

            lbl11.Height = 30 '自定义控件高度

            lbl11.Left = s1 + 12 '调整控件水平位置:横向间距

            lbl11.Top = t1 + 12 '调整控件垂直位置:纵向间距

            lbl11.ForeColor = Color.Salmon

            ' lbl11.TextAlign = ContentAlignment.BottomCenter '控件文字位置

            ' lbl11.CheckAlign = ContentAlignment.TopCenter '控件复选框位置

            '' lbl11.BackColor = color.LightSteelBlue

            ' lbl11.theme = "system"

            e.Form.AddControl(lbl11)

            For Each dr As DataRow In DataTables("分类表").DataRows             

                lbl11.ToolTip = dr("编号") & vbcrlf & "名称:" & dr("产品名称")

            Next

            e.Form.Controls("TabControl1").Tabpages("全部0").AddControl(lbl11) 'txt加入窗口.控件页面集合"TabControl1"第一个页面Tabpages(0)

        Next

    End If

    If pg.Text = "经典类1" Then

        Dim lbl11 As WinForm.Button

        Dim Value1 As String = DataTables("分类表").GetComboListString("产品名称", "[产品分类] = '经典类1'And [日期] = #" & s & "#", "排序号") '排序:排序号 Desc

        Dim sps1() As Char = {"|"}

        Dim Names1() As String = Value1.Split(sps1)

        Dim s1 As Integer = 10 '与左边距离

        Dim t1 As Integer = 10 '与上边距离

        For i1 As Integer = 0 To Names1.length - 1

            If i1 <> 0 Then

                If i1 Mod 3 = 0 Then '如果1行显示3个控件

                    s1 = 10

                    t1 = t1 + 45 '调整控件纵向间距(30*15

                Else

                    s1 = s1 + 105 ''调整控件横向间距(80+20

                End If

            End If

            Dim nm1 As String = Names1(i1)

            lbl11 = e.Form.CreateControl(nm1, ControlTypeEnum.Button)

            lbl11.Text = nm1 '按钮标题:文字内容

            lbl11.name = nm1 '按钮名:文字内容

            lbl11.Width = 90 '自定义控件宽度

            lbl11.Height = 30 '自定义控件高度

            lbl11.Left = s1 + 12 '调整控件水平位置:横向间距

            lbl11.Top = t1 + 12 '调整控件垂直位置:纵向间距

            lbl11.ForeColor = Color.Salmon

            ' lbl11.TextAlign = ContentAlignment.BottomCenter '控件文字位置

            ' lbl11.CheckAlign = ContentAlignment.TopCenter '控件复选框位置

            '' lbl11.BackColor = color.LightSteelBlue

            ' lbl11.theme = "system"

            e.Form.AddControl(lbl11)  

            For Each dr As DataRow In DataTables("分类表").DataRows              

                lbl11.ToolTip = dr("编号") & vbcrlf & "名称:" & dr("产品名称")

            Next

            e.Form.Controls("TabControl1").Tabpages("经典类1").AddControl(lbl11) 'txt加入窗口.控件页面集合"TabControl1"第一个页面Tabpages(0)

        Next

    End If

    If pg.Text = "现代类2" Then

        Dim lbl11 As WinForm.Button

        Dim Value1 As String = DataTables("分类表").GetComboListString("产品名称", "[产品分类] = '现代类2'And [日期] = #" & s & "#", "排序号") '排序:排序号 Desc

        Dim sps1() As Char = {"|"}

        Dim Names1() As String = Value1.Split(sps1)

        Dim s1 As Integer = 10 '与左边距离

        Dim t1 As Integer = 10 '与上边距离

        For i1 As Integer = 0 To Names1.length - 1

            If i1 <> 0 Then

                If i1 Mod 3 = 0 Then '如果1行显示3个控件

                    s1 = 10

                    t1 = t1 + 45 '调整控件纵向间距(30*15

                Else

                    s1 = s1 + 105 ''调整控件横向间距(80+20

                End If

            End If

            Dim nm1 As String = Names1(i1)

            lbl11 = e.Form.CreateControl(nm1, ControlTypeEnum.Button)

            lbl11.Text = nm1 '按钮标题:文字内容

            lbl11.name = nm1 '按钮名:文字内容

            lbl11.Width = 90 '自定义控件宽度

            lbl11.Height = 30 '自定义控件高度

            lbl11.Left = s1 + 12 '调整控件水平位置:横向间距

            lbl11.Top = t1 + 12 '调整控件垂直位置:纵向间距

            lbl11.ForeColor = Color.Salmon

            ' lbl11.TextAlign = ContentAlignment.BottomCenter '控件文字位置

            ' lbl11.CheckAlign = ContentAlignment.TopCenter '控件复选框位置

            '' lbl11.BackColor = color.LightSteelBlue

            ' lbl11.theme = "system"

            e.Form.AddControl(lbl11)          

            For Each dr As DataRow In DataTables("分类表").DataRows              

                lbl11.ToolTip = dr("编号") & vbcrlf & "名称:" & dr("产品名称")

            Next

            e.Form.Controls("TabControl1").Tabpages("现代类2").AddControl(lbl11) 'txt加入窗口.控件页面集合"TabControl1"第一个页面Tabpages(0)

        Next

    End If

    If pg.Text = "简约类3" Then

        Dim lbl11 As WinForm.Button

        Dim Value1 As String = DataTables("分类表").GetComboListString("产品名称", "[产品分类] = '简约类3'And [日期] = #" & s & "#", "排序号") '排序:排序号 Desc

        Dim sps1() As Char = {"|"}

        Dim Names1() As String = Value1.Split(sps1)

        Dim s1 As Integer = 10 '与左边距离

        Dim t1 As Integer = 10 '与上边距离

        For i1 As Integer = 0 To Names1.length - 1

            If i1 <> 0 Then

                If i1 Mod 3 = 0 Then '如果1行显示3个控件

                    s1 = 10

                    t1 = t1 + 45 '调整控件纵向间距(30*15

                Else

                    s1 = s1 + 105 ''调整控件横向间距(80+20

                End If

            End If

            Dim nm1 As String = Names1(i1)

            lbl11 = e.Form.CreateControl(nm1, ControlTypeEnum.Button)

            lbl11.Text = nm1 '按钮标题:文字内容

            lbl11.name = nm1 '按钮名:文字内容

            lbl11.Width = 90 '自定义控件宽度

            lbl11.Height = 30 '自定义控件高度

            lbl11.Left = s1 + 12 '调整控件水平位置:横向间距

            lbl11.Top = t1 + 12 '调整控件垂直位置:纵向间距

            lbl11.ForeColor = Color.Salmon

            ' lbl11.TextAlign = ContentAlignment.BottomCenter '控件文字位置

            ' lbl11.CheckAlign = ContentAlignment.TopCenter '控件复选框位置

            '' lbl11.BackColor = color.LightSteelBlue

            ' lbl11.theme = "system"

            e.Form.AddControl(lbl11)

            For Each dr As DataRow In DataTables("分类表").DataRows                

                lbl11.ToolTip = dr("编号") & vbcrlf & "名称:" & dr("产品名称")

            Next

            e.Form.Controls("TabControl1").Tabpages("简约类3").AddControl(lbl11) 'txt加入窗口.控件页面集合"TabControl1"第一个页面Tabpages(0)

        Next

    End If

Next

e.Form.ResumeRedraw()'重新绘制窗口

这个代码,是一个新的写法,与楼上不同,直接在窗口加一个页面集合,确定位置,然后将代码加上去,我感觉代码重复较多,能不能优化一下

 


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  70楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:113054 积分:575669 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/7/21 20:29:00 [只看该作者]

e.Form.StopRedraw() '停止绘制窗口
Dim s As String = e.Form.Controls("查询日期").Value
Dim dr As DataRow
For Each pg As WinForm.TabPage In e.Form.Controls("TabControl1").TabPages
    Dim filter As String = "[日期] = #" & s & "#"
    Select Case pg.Text 
        Case "全部0"
        Case Else
            filter = filter & " and [产品分类] = '" & pg.Text & "'"
    End Select
    Dim lbl11 As WinForm.Button
    Dim drs As List(Of DataRow) = DataTables("分类表").select( filter, "排序号") '排序:
    Dim s1 As Integer = 10 '与左边距离
    Dim t1 As Integer = 10 '与上边距离
    For i1 As Integer = 0 To drs.count - 1
        dr = drs(i1)
        If i1 <> 0 Then
            If i1 Mod 4 = 0 Then '如果1行显示3个控件
                s1 = 10
                t1 = t1 + 45 '调整控件纵向间距(30*15)
            Else
                s1 = s1 + 105 ''调整控件横向间距(80+20)
            End If
        End If
        Dim nm1 As String = dr("产品名称")
        lbl11 = e.Form.CreateControl(nm1, ControlTypeEnum.Button)
        lbl11.Text = nm1 '按钮标题:文字内容
        lbl11.name = nm1 '按钮名:文字内容
        lbl11.Width = 90 '自定义控件宽度
        lbl11.Height = 30 '自定义控件高度
        lbl11.Left = s1 + 12 '调整控件水平位置:横向间距
        lbl11.Top = t1 + 12 '调整控件垂直位置:纵向间距
        lbl11.ForeColor = Color.Salmon
        ' lbl11.TextAlign = ContentAlignment.BottomCenter '控件文字位置
        ' lbl11.CheckAlign = ContentAlignment.TopCenter '控件复选框位置
        '' lbl11.BackColor = color.LightSteelBlue
        ' lbl11.theme = "system"
        lbl11.ToolTip = dr("编号") & vbcrlf & "名称:" & dr("产品名称")
        pg.AddControl(lbl11) '
    Next
Next
e.Form.ResumeRedraw()'重新绘制窗口

 回到顶部