Previous topicNext topic
Help > 开发指南 > SanMuGrid平台编程 > 主要对象 > DataTableHelp > 数据增删改查 >
数据查询Demo

为了更方便地理解几个查询函数的功能,我们特地做了一个综合的Demo示例。

首先准备三个表。

然后创建一个自定义窗体。

下面是窗体加载事件的代码和各个按钮的测试代码。

Vb.Net
Namespace FormEvents
    Public Class Form0fbb0edfb0554ab985e91a01901b940d
        Inherits FormEventsBase
        '定义一些私有字段,方便在各个事件方法之间直接共享调用,不用每个方法体内都重新声明
        Private tblMain1 As SmGrid '数据源1
        Private tblMain2 As SmGrid '数据源2
        Private tblResult As SmGrid '处理结果
        Private db As Database '数据源
        Public Sub JoinTable_Load(sender As Object,e As  System.EventArgs)
            '窗体加载时,给几个私有字段赋值
            tblMain1=Me.SmForm.ControlDictionary()("tblMain1")
            tblMain2=Me.SmForm.ControlDictionary()("tblMain2")
            tblResult=Me.SmForm.ControlDictionary()("tblResult")
            db=Proj.SysDataFactory("UserDB")
        End Sub
        Public Sub btnAddSource_Click(sender As Object,e As  System.EventArgs)
            '纯粹地加载数据源
            tblMain1.Fill("select * from 订单信息",db,True,True)
            tblMain2.Fill("select * from 客户信息",db,True,True)
        End Sub
        Public Sub btnJoin_Click(sender As Object,e As  System.EventArgs)
            '如果最后一个参数什么都不指定,则添加tblMain2中所有字段
            Dim dt As DataTableHelp= tblMain1.DataTableHelp.Join(tblMain2.DataTableHelp,"客户","客户","")
            tblResult.DataSource=dt '将结果绑定到tblResult中并显示出来
        End Sub
        
        Public Sub btnMergeVLookupCols_Click(sender As Object,e As  System.EventArgs)
            '如果最后一个参数什么都不指定,则添加tblMain2中所有字段
            Dim dt As DataTableHelp= tblMain1.DataTableHelp.MergeVLookupCols(tblMain2.DataTableHelp,"客户","客户","")
            tblResult.DataSource=dt '将结果绑定到tblResult中并显示出来
            
        End Sub
        
        Public Sub btnVLookupCols_Click(sender As Object,e As  System.EventArgs)
            '这是直接将tblMain2中指定几列填充到tblMain1中指定的列中去
            '这里将tblMain2中的“客户名称,客户联系人”填充到tblMain1的“业务员,订单号”中
            tblMain1.DataTableHelp.VLookupCols(tblMain2.DataTableHelp,"客户","业务员,订单号","客户名称,客户联系人","客户")
        End Sub
        
        Public Sub btnAddVLookupCols_Click(sender As Object,e As  System.EventArgs)
            '这是直接将tblMain2中指定几列添加到tblMain1中去
            tblMain1.DataTableHelp.AddVLookupCols(tblMain2.DataTableHelp,"客户","客户","客户名称,客户联系人")
        End Sub
        
        Public Sub btnSelectToDataTableHelp_Click(sender As Object,e As  System.EventArgs)
            '只筛选其中的一部分数据返回
            Dim dt As DataTableHelp= tblMain1.DataTableHelp.SelectToDataTableHelp("产品='产品01' and 业务员='业务员02'","产品,业务员")
            tblResult.DataSource=dt '将结果绑定到tblResult中并显示出来
        End Sub
        
        Public Sub btnGroupBy_Click(sender As Object,e As  System.EventArgs)
            '分组统计求和
            Dim dt As DataTableHelp= tblMain1.DataTableHelp.GroupBy("产品,业务员","数量")
            tblResult.DataSource=dt '将结果绑定到tblResult中并显示出来
            
        End Sub
        
        
        
        Public Sub btnJoin2_Click(sender As Object,e As  System.EventArgs)
            '只添加指定的几个列
            Dim dt As DataTableHelp=tblMain1.DataTableHelp.Join(tblMain2.DataTableHelp,"客户","客户","客户名称,客户联系人")
            tblResult.DataSource=dt '将结果绑定到tblResult中并显示出来
        End Sub
        
        Public Sub btnMergeVLookupCols2_Click(sender As Object,e As  System.EventArgs)
            '只添加指定的几个列
            Dim dt As DataTableHelp=tblMain1.DataTableHelp.MergeVLookupCols(tblMain2.DataTableHelp,"客户","客户","客户名称,客户联系人")
            tblResult.DataSource=dt '将结果绑定到tblResult中并显示出来
        End Sub
        
        Public Sub btnGroupBy2_Click(sender As Object,e As  System.EventArgs)
            '分组统计计数
            Dim dt As DataTableHelp = tblMain1.DataTableHelp.GroupBy("产品,业务员","数量",AggregateTypeEnum.Count)
            tblResult.DataSource=dt '将结果绑定到tblResult中并显示出来
            '弹出窗口可以让我们很清楚地看到结果
            MessageBox.Show("分组统计计数")
        End Sub
        
        Public Sub btnJoin3_Click(sender As Object,e As  System.EventArgs)
            '先重新填充tblMain1和tblMain2表
            tblMain2.Fill("select * from 订单信息 where 业务员='业务员01' and 产品='产品02'",db,True,True)
            tblMain2.Fill("select * from 客户付款记录",db,True,True)
            '如果最后一个参数什么都不指定,则添加tblMain2中所有字段
            Dim dt As DataTableHelp= tblMain1.DataTableHelp.Join(tblMain2.DataTableHelp,"客户","客户","")
            tblResult.DataSource=dt '将结果绑定到tblResult中并显示出来
        End Sub
        
    End Class
End Namespace

C#
namespace FormEvents
{
    public class Form0fbb0edfb0554ab985e91a01901b940d : FormEventsBase
    {
        // 定义一些私有字段,方便在各个事件方法之间直接共享调用,不用每个方法体内都重新声明
        private SmGrid tblMain1; // 数据源1
        private SmGrid tblMain2; // 数据源2
        private SmGrid tblResult; // 处理结果
        private Database db; // 数据源
        public void JoinTable_Load(object sender, System.EventArgs e)
        {
            // 窗体加载时,给几个私有字段赋值
            tblMain1 = this.SmForm.ControlDictionary()("tblMain1");
            tblMain2 = this.SmForm.ControlDictionary()("tblMain2");
            tblResult = this.SmForm.ControlDictionary()("tblResult");
            db = Proj.SysDataFactory("UserDB");
        }
        public void btnAddSource_Click(object sender, System.EventArgs e)
        {
            // 纯粹地加载数据源
            tblMain1.Fill("select * from 订单信息", db, true, true);
            tblMain2.Fill("select * from 客户信息", db, true, true);
        }
        public void btnJoin_Click(object sender, System.EventArgs e)
        {
            // 如果最后一个参数什么都不指定,则添加tblMain2中所有字段
            DataTableHelp dt = tblMain1.DataTableHelp.Join(tblMain2.DataTableHelp, "客户", "客户", "");
            tblResult.DataSource = dt; // 将结果绑定到tblResult中并显示出来
        }

        public void btnMergeVLookupCols_Click(object sender, System.EventArgs e)
        {
            // 如果最后一个参数什么都不指定,则添加tblMain2中所有字段
            DataTableHelp dt = tblMain1.DataTableHelp.MergeVLookupCols(tblMain2.DataTableHelp, "客户", "客户", "");
            tblResult.DataSource = dt; // 将结果绑定到tblResult中并显示出来
        }

        public void btnVLookupCols_Click(object sender, System.EventArgs e)
        {
            // 这是直接将tblMain2中指定几列填充到tblMain1中指定的列中去
            // 这里将tblMain2中的“客户名称,客户联系人”填充到tblMain1的“业务员,订单号”中
            tblMain1.DataTableHelp.VLookupCols(tblMain2.DataTableHelp, "客户", "业务员,订单号", "客户名称,客户联系人", "客户");
        }

        public void btnAddVLookupCols_Click(object sender, System.EventArgs e)
        {
            // 这是直接将tblMain2中指定几列添加到tblMain1中去
            tblMain1.DataTableHelp.AddVLookupCols(tblMain2.DataTableHelp, "客户", "客户", "客户名称,客户联系人");
        }

        public void btnSelectToDataTableHelp_Click(object sender, System.EventArgs e)
        {
            // 只筛选其中的一部分数据返回
            DataTableHelp dt = tblMain1.DataTableHelp.SelectToDataTableHelp("产品='产品01' and 业务员='业务员02'", "产品,业务员");
            tblResult.DataSource = dt; // 将结果绑定到tblResult中并显示出来
        }

        public void btnGroupBy_Click(object sender, System.EventArgs e)
        {
            // 分组统计求和
            DataTableHelp dt = tblMain1.DataTableHelp.GroupBy("产品,业务员", "数量");
            tblResult.DataSource = dt; // 将结果绑定到tblResult中并显示出来
        }



        public void btnJoin2_Click(object sender, System.EventArgs e)
        {
            // 只添加指定的几个列
            DataTableHelp dt = tblMain1.DataTableHelp.Join(tblMain2.DataTableHelp, "客户", "客户", "客户名称,客户联系人");
            tblResult.DataSource = dt; // 将结果绑定到tblResult中并显示出来
        }

        public void btnMergeVLookupCols2_Click(object sender, System.EventArgs e)
        {
            // 只添加指定的几个列
            DataTableHelp dt = tblMain1.DataTableHelp.MergeVLookupCols(tblMain2.DataTableHelp, "客户", "客户", "客户名称,客户联系人");
            tblResult.DataSource = dt; // 将结果绑定到tblResult中并显示出来
        }

        public void btnGroupBy2_Click(object sender, System.EventArgs e)
        {
            // 分组统计计数
            DataTableHelp dt = tblMain1.DataTableHelp.GroupBy("产品,业务员", "数量", AggregateTypeEnum.Count);
            tblResult.DataSource = dt; // 将结果绑定到tblResult中并显示出来
        }

        public void btnJoin3_Click(object sender, System.EventArgs e)
        {
            // 先重新填充tblMain1和tblMain2表
            tblMain2.Fill("select * from 订单信息 where 业务员='业务员01' and 产品='产品02'", db, true, true);
            tblMain2.Fill("select * from 客户付款记录", db, true, true);
            // 如果最后一个参数什么都不指定,则添加tblMain2中所有字段
            DataTableHelp dt = tblMain1.DataTableHelp.Join(tblMain2.DataTableHelp, "客户", "客户", "");
            tblResult.DataSource = dt; // 将结果绑定到tblResult中并显示出来
        }
    }
}