Foxtable(狐表)用户栏目专家坐堂 → [原创]菜鸟也能用foxtable开发自己的应用程序,图文视频教程[连载结束,整理至1楼]


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

主题:[原创]菜鸟也能用foxtable开发自己的应用程序,图文视频教程[连载结束,整理至1楼]

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


加好友 发短信
等级:三尾狐 帖子:619 积分:3656 威望:0 精华:1 注册:2012/6/13 22:00:00
  发帖心情 Post By:2013/1/23 0:23:00 [显示全部帖子]

会员消费表之系统设置的预见性——增加时候的事件

当产生一个新的消费明细的时候,有如下的列发生变化:

1.消费编号,需要继承会员消费表的消费编号

这里只需要通过关联设置即可;

2.产品名称,希望能够模糊输入或者下拉选择(这个是本节的重点讲述内容

3.当模糊输入产品名称后,其他的列希望能自动输入(这个是本节的重点讲述内容

4.产品数量,就是另外一个需要手动输入的内容;

这个无须多讲了

5.合计金额为表达式列,自动计算

这里只需要设置表达式即可;

要求:在单元格输入的时候,能自动弹出一个窗口,能进行模糊搜索,输入产品名称之后,自动填入单价信息。

我们来分析这个需求,其实有两个信息需要去解释:

1. 自动弹出窗口,能进行模糊搜索,将搜索的结果填入产品名称字段

2. 输入产品名称之后,自动填入相关信息;

第一个问题:

根据帮助文件,搜索自定义录入界面;

帮助文件已经写得非常详细了,我把心得给大家分享一下。


这里我主要参考  自定义录入界面三。界面如下:


此主题相关图片如下:34.png
按此在新窗口浏览图片

当我们点击产品列进行输入的时候,就会自动弹出一个窗口

首先设计一个下拉窗口

这个窗口含一个表,这个表 通过  单元格的输入情况 进行显示

我们将这句话,变成计算机语言

在dropdownopen中设计如下

Dim txt As String = e.Form.DropDownBox.Text
Dim
tbl As Table = Tables("窗口1_Table1")
If
txt = "" Then
    Tables
("窗口1_Table1").Filter = ""
Else

    txt =
"'*" & txt & "*'"
    tbl.Filter =
"客户ID Like " & txt & " Or 公司名称 Like " & txt & " Or 地址 Like " & txt & " Or 联系人 Like " & txt
End
If
e.Form.DropDownBox.
Select()
'将输入焦点返回下拉列表框

这样下拉窗口显示后,会自动根据下拉列表框的内容,筛选出可能的客户,并将输入焦点返回到下拉列表框。

这个是帮助源文件,大家可以根据实际情况进行设置

接着,双击某行数据,这个行数据就会填充到当前的单元格。

首先,双击之后这个窗口关闭,执行关闭代码

Forms("窗口1").DropDownBox.CloseDropDown()

这样在下拉窗口双击某个客户,就会关闭下拉窗口。

关闭的时候执行另外一个操作,将选择的值,填入到单元格

将窗口的DropDownClosed事件代码设置为:

If e.Selected Then '如果选择了值
    Dim tbl As Table = Tables("窗口1_Table1")
    If
tbl.Current IsNot Nothing
Then
        e.Form.DropDownBox.Value = tbl.Current(
"客户ID")
    End
If
    e.Form.DropDownBox.CloseDropDown()

End
If


这样关闭下拉窗口后,可以自动将选定客户的客户ID输入到下拉列表框中。


在我们的系统中,一样类似的设置,输入产品名称之后,自动填入单价信息。

其他,更为详细的设置,请参见帮助文件。这里只穿针引线。




第二个问题,就是当输入产品名称之后需要自动填入其他相关信息;

看起来似乎很复杂,其实就是将窗口的当前行的某列输入到表中当前行的某列吗?

table().current(a) = 窗口.current(a)

类似这样的做法。

其实我们在之前学习过,利用表达式的方法获取数据的技术,这里当然也可以用find

只不过两张表同时为当前表,你看得见的,就不用find了


类似这样

如果除了客户ID列,还要同时从客户表选择其它多列内容输入到订单表,可以将DropDownClosed事件代码改为:

If e.Selected Then '如果选择了值
    Dim tbl As Table = Tables("窗口1_Table1")
    If
tbl.Current IsNot Nothing
Then
        e.Form.DropDownBox.Value = tbl.Current(
"客户ID")
       
Tables("订单").Current("其它列1") = tbl.Current("其它列1")
        Tables("订单").Current("其它列2") = tbl.Current("其它列2")
        Tables("订单").Current("其它列3") = tbl.Current("其它列3")
    End
If
    e.Form.DropDownBox.CloseDropDown()

End
If

这样设置之后,会员消费明细表,增加事件就完成了

[此贴子已经被作者于2013-1-23 0:58:28编辑过]

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


加好友 发短信
等级:三尾狐 帖子:619 积分:3656 威望:0 精华:1 注册:2012/6/13 22:00:00
  发帖心情 Post By:2013/1/23 1:12:00 [显示全部帖子]

关于会员消费明细表中的编辑、保存事件,大家如果有需要就按照之前的方法进行设置,这里不再细讲了。
这个部分主要介绍一下
会员消费明细表的其他属性设置,包括特殊字段,表达式列,项目列表等
1,消费编号列,需要自动增加
这里重点强调一下,为什么有了消费编号列,为嘛还要添加一个 做辅助列 ?(主要是为了关联方便)
2,合计金额需要即时显示,因此设置为 表达式就可以了

至此,会员表,会员充值表,会员消费表,消费明细表,均已经创建完成,产品表属于基本的内容,不做讲述了。到现在,这几张表已经具备操作的基本的功能。
各个表之间的关联也已经完成;
其实软件的核心部分已经突出了
不知道您做的怎样了?

接下来的部分,主要围绕这几张表来展开。


截止到现在的案例文件为这样的。
请大家下载。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:会员系统第五阶段产品及库存表.table



[此贴子已经被作者于2013-1-23 1:13:20编辑过]

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


加好友 发短信
等级:三尾狐 帖子:619 积分:3656 威望:0 精华:1 注册:2012/6/13 22:00:00
  发帖心情 Post By:2013/1/24 0:53:00 [显示全部帖子]

第三章,分析各表之间的关系,建立必要的关联设置

实话说,当初狐表最吸引我的地方也许就是这个地方了,所以要单独提出来讲述一下。

表间的关联看似很简单,但是在狐表中的显示方式我觉得非常的方便。一个主表可以和任意多的子表进行关联,同时在主表的窗口中显示子表相关信息。

在我们的这个系统里涉及到几个关系:

会员表和充值表的关系,会员表和消费表的关系,消费表和消费明细表的关系,消费明细表和产品表的关系。前两个关系通过会员卡号关联,消费表和消费明细表通过消费编号关联,明细表和产品表通过产品编号关联。

设置本身比较简单,不细讲了,这里主要提出说明三点。1,表达式列是不能作为关联列的,在选择的地方根本没得选,2,关联列的类型要一致,不然关联会出错。3,万一碰到关联删除不掉的情况,我有个办法就是先改名,再删除。

当我们设置好关联之后,就可以在各个主表中看到相关关联的表了。

如图:


此主题相关图片如下:1.png
按此在新窗口浏览图片

下图是会员表主表显示的关联表


此主题相关图片如下:2.png
按此在新窗口浏览图片
   下图是消费表和明细表之间的关联显示


此主题相关图片如下:3.png
按此在新窗口浏览图片


这里需要在回顾一下为什么在案例中要设置那么多的辅助列了。


文件下载地址:

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:会员系统第五阶段.table




[此贴子已经被作者于2013-1-24 0:53:37编辑过]

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


加好友 发短信
等级:三尾狐 帖子:619 积分:3656 威望:0 精华:1 注册:2012/6/13 22:00:00
  发帖心情 Post By:2013/1/24 1:01:00 [显示全部帖子]

以下是引用ifernicer在2013-1-24 1:00:00的发言:
请问你的大纲 是用什么软件编辑的?

请下载那个介绍的ppt,中间有详细的介绍。
freemind

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


加好友 发短信
等级:三尾狐 帖子:619 积分:3656 威望:0 精华:1 注册:2012/6/13 22:00:00
  发帖心情 Post By:2013/1/24 23:57:00 [显示全部帖子]

第四章[设置简单的导航菜单及窗口]

导航,其实就是菜单。菜单实现的方式有很多种,最简单的莫过于用数据表的标签来实现了,而这根本不需要我们进行学习,Excel本身也是这样的,不是?

为了让这些导航功能更为具体,我想到的有几种方式:共有窗口+

任务列表;共有窗口+导航栏;共有菜单+菜单;纯窗口的方式;

在这里,作为初学,我们采用共有窗口+任务列表的方式来实现导航;

首先创建一个共有窗口:


此主题相关图片如下:1.png
按此在新窗口浏览图片

取名字为导航。

在窗口中加入一个topicbar任务栏控件。

参考帮助文件 topicbar的设置;


此主题相关图片如下:2.png
按此在新窗口浏览图片

这样设置的好处是简单明了。同时设置每个任务的事件,代码如下:

Select Case e.Link.Name
    Case
"任务一
"
       
'在此加入相应的代码
   
Case "任务二"
       
'在此加入相应的代码
   
Case "任务三"
       
'在此加入相应的代码
   
Case "任务四"
       
'在此加入相应的代码
End
Select

在这个例子中,我采用的方法是偷懒才采用模板套用的方法,即套用狐表介绍文件.table

这样我们只用修改部分连接名称就能换成自己的窗口了。

这里特别需要讲述的是每个连接点击之后会发生的事件。



我们分析一下窗口afterload事件



此主题相关图片如下:3.png
按此在新窗口浏览图片

第一部分,主要是风格的设置,如果不是很了解,复制就可以了

第二部分,是设置主任务栏的。

第三部分,是设置各个主任务下面的分任务的;

当我们进行如下的设置之后,再切换主表的时候,这个共有窗口是不是就显示出来了?

紧接着,我们开始设置,这个任务栏的事件;


此主题相关图片如下:4.png
按此在新窗口浏览图片

这个时候,我们点击任务栏按钮,会出现TopicLinkClick事件,我们可以根据模板文件进行修改



此主题相关图片如下:5.png
按此在新窗口浏览图片


Select Case e.Page.Name

    Case  "会员管理"

        Select Case e.Link.Name

            Case "会员登记"

                MainTable = Tables("会员表")

                MessageBox.show("请点击鼠标右键新增一条会员信息!")

            Case "会员列表"

                

                MainTable = Tables("会员表_查询表")

                MessageBox.Show("请查看会员列表信息!")


    上面显示黄色底纹的部分,也就是我们需要修改的部分;

意思就是,当我们页面的名称为“会员登记”的时候,主表切换到“会员表”,即maintable = table(“会员表”);其他的类似设计


按照这样的方法,我们就可以完成基本简单的页面导航了。


完成的效果如下图:


此主题相关图片如下:演示.gif
按此在新窗口浏览图片


现在是不是通过简单的导航取代了狐表本身的表的标签功能?

希望你也可以做到。


案例文件 下载


 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:会员系统第六阶段必要的导航.table



[此贴子已经被作者于2013-1-25 0:20:26编辑过]

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


加好友 发短信
等级:三尾狐 帖子:619 积分:3656 威望:0 精华:1 注册:2012/6/13 22:00:00
  发帖心情 Post By:2013/1/25 10:51:00 [显示全部帖子]

第五章[完善各表的事件以及设置简单的查询表]
其实系统做到这里,基本的框架是出来了,但是还有很多问题,不知道大家有没有发现。
我们一张张的表进行改进和完善。
第一张表:会员表
我希望完成更高级的功能有:
1,希望输入会员的时候,一旦选择会员等级,就立即自动调用折扣
2,对会员信息进行修改的时候,只要等级发生变化,那么折扣也应该发生变化
3,原来基于会员表的信息,不再进行计算,即新的折扣只对新的消费信息起作用;老的还是保持不变;
4,手机号码列应该为11位,按照格式输入,如果不是固定格式,那么就不让他输入
5,推荐人字段,应该为公司员工,系统默认为公司客户,按照需要进行选择
各列的功能,我能想到的就这些了额,不知道您还有没有其他的想法呢?
我们先来解决这些问题。
问题1,2,根据输入的等级,引用折扣,修改的时候,自动引用折扣
这个问题涉及两个知识点,这个折扣在哪里引用?(重新创建一张等级表);从这个等级表中引用数据(跨表引用);
创建新的等级表,这个就不再讲了。主要说一下,跨表引用的问题。
跨表引用,有两个基本的实现方式,第一,设置关联,直接用parent(表名)引用关联的数据,第二,不用设置关联,直接用find查找对应的条件,然后显示数据;
代码如下

If e.DataCol.Name = "会员等级" Then '如果更改的是会员等级列

    If e.DataRow.IsNull("会员等级") Then '会员等级是否为空

        e.DataRow("折扣") = Nothing '如果为空,则折扣清零

    Else

       

        Dim dr As DataRow

        dr = DataTables("等级设置").Find("会员等级 = '" & e.DataRow("会员等级") & "'")

        If dr IsNot Nothing Then

            e.DataRow("折扣") = dr("折扣")

        End If

       

    End If

End If


这个代码接近于自然语言了,很容易理解。



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


加好友 发短信
等级:三尾狐 帖子:619 积分:3656 威望:0 精华:1 注册:2012/6/13 22:00:00
  发帖心情 Post By:2013/1/25 10:52:00 [显示全部帖子]


因为是数据发生变化的时候,要发生的事件,因此,这段代码写在会员表的 datacolchanged中。

问题3,旧的信息按照原来的折扣,新的信息,按照新的折扣;

其实当我们解决完问题 1,2的时候,这个功能已经实现,除非你需要在更改某个会员的等级;

那我们有必要了解一下,如果某些场合,需要让这些数据全部更新的话,怎么处理呢?


在等级设置表中如下datacolchanged设置


If e.DataCol.Name = "折扣"
    
Dim Filter As String = "[会员等级] = '" & e.DataRow("会员等级") & "'"
    
Dim drs As List(Of DataRow) = DataTables("
会员表").Select(Filter)
    For
 Each dr As DataRow In drs
        
dr("
折扣") = e.DataRow("折扣")
    Next
End
 If

 


也就是说,在等级设置表中,如果折扣列发生变化,那么就在会员表中找到所有的与该等级对应的行,遍历所有找到的行,然后将新的折扣替换。


这句话,说的有些拗口,大家模拟理解一下。


问题4,关于手机号码的问题,涉及掩码。

这个在列属性中设置一下,如图


此主题相关图片如下:5.png
按此在新窗口浏览图片

问题5,主要涉及下拉列表的问题,还是在列属性中设置,数据来源选择 数据表即可。


这样,会员表的差不多就完善了,一张具备基本功能的数据表已经完成。


接下来会介绍其他各章数据表的完善。


......




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


加好友 发短信
等级:三尾狐 帖子:619 积分:3656 威望:0 精华:1 注册:2012/6/13 22:00:00
  发帖心情 Post By:2013/1/26 23:48:00 [显示全部帖子]

第五章第二部分:分析会员充值表还有没有需要完善的事件
请大家看一下案例文件,当我们在会员表主表的关联表[会员表.会员充值表]增加一条数据的时候,是没有问题的。但是如果我们在会员充值表新增一条数据却出现这样的错误?
看一下图片演示:

此主题相关图片如下:关联错误.gif
按此在新窗口浏览图片

到底是什么原因呢?

让我们再详细分析一下发生错误的事件  datachanged

Select Case e.DataCol.Name

    Case "支付金额" ,"赠送金额","会员卡号"

      e.DataRow("备注") = Date.Today  & user.Name  &  "为" & e.DataRow.GetParentRow("会员表")("会员姓名")  &  "执行"  &  e.DataRow("操作类型") & "," & "金额为" &  e.DataRow("充值金额")

     '   End If

End Select

 


这段代码看似没有什么问题,但是为什么会出现错误呢?
 e.DataRow.GetParentRow("会员表")("会员姓名") 
是获取相对应父表的数据,而这个时候子表的  会员卡号  还没有产生呢?
所以会出现这样的错误,
解决方法:

此主题相关图片如下:1.png
按此在新窗口浏览图片
为了便于理解也便于日后查阅的方便,我们采用方法2.
代码如下:

Select Case e.DataCol.Name

    Case "支付金额" ,"赠送金额","会员卡号"

       

        'If e.DataRow.IsNull("支付金额")  Then

       

        If e.DataRow.IsNull("支付金额"OrElse e.DataRow.IsNull("会员卡号") Then  '这行代码是随后添加的,主要为了防止出现父表没有数据的时候,出现的错误提示

           

           

            e.DataRow("备注") = Nothing

           

        Else

            'MessageBox.show(e.DataRow.GetParentRow("会员表")("会员姓名")  )

            e.DataRow("备注") = Date.Today  & user.Name  &  "为" & e.DataRow.GetParentRow("会员表")("会员姓名"&  "执行"  &  e.DataRow("操作类型") & "," & "金额为" &  e.DataRow("充值金额")

            '   End If

    End Select


这样就轻松解决了这个问题。

接着,我们用同样的方法解决掉,会员消费表,会员消费明细表这两张表的遗留问题。

[此贴子已经被作者于2013-1-26 23:58:48编辑过]

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


加好友 发短信
等级:三尾狐 帖子:619 积分:3656 威望:0 精华:1 注册:2012/6/13 22:00:00
  发帖心情 Post By:2013/1/27 0:16:00 [显示全部帖子]

第五章第二部分:设置简单的查询表以及使用专业的辅助工具设置sql
这里我们需要设置三张查询表,【过期会员查询表】,【会员充值表-查询表】【会员消费表-查询表】

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

具体的过程很简单,但是在创建过程中却有很多波折。
需要注意以下几点
1,用select的时候,这里面需要用 {}括起来
2,表达式不会写,最开始可以借助 辅助工具
 接着我们看看会员充值表查询表的设计
如果您会sql,那很简单,直接用group by 统计就可以了,不过我们一样可以用帮助文件,查询表-分组统计

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

当然我们也可以借助专业工具生成sql
如图

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


[此贴子已经被作者于2013-1-27 0:31:26编辑过]

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


加好友 发短信
等级:三尾狐 帖子:619 积分:3656 威望:0 精华:1 注册:2012/6/13 22:00:00
  发帖心情 Post By:2013/1/29 1:21:00 [显示全部帖子]

真是很抱歉的说,这两天在外地出差,本来以为没有多少人关注了,谁知道这么晚了还有人支持。明天回来一定要把落下的补上。

 回到顶部
总数 74 上一页 1 2 3 4 5 6 7 8 下一页