初学金蝶二开 自动新增行

本文介绍了在金蝶二开项目中使用C#开发表单插件的过程,重点讲解了AfterBindData、AfterButtonClick、EntryBarItemClick等关键事件的处理,以及如何通过CustomEvents事件实现数据自动添加和重量计算功能。
摘要由CSDN通过智能技术生成

目录

前言

表单插件的开发

 AfterBindData事件

AfterButtonClick事件

EntryBarItemClick事件

BarItemClick事件

CustomEvents事件

如何自动添加数据:

 结语


前言

本人有C#  C/S 和 B/S项目的开发经验 但是没有金蝶二开的经验所以有些地方可能和其他大佬理解的不一样,写的不对的地方请大佬们斧正。


提示:以下是本篇文章正文内容,下面案例可供参考

表单插件的开发

  • 第一步打开VS 创建C# NET Framework类库
  • 引入需要的dll 表单插件继承AbstractBillPlugIn类 其他的我碰到再说
  • 这一步完成后就可以写自己的代码了 金蝶有自己的生命周期函数(我理解为生命周期函数)
  • 最常用的有:

 AfterBindData事件

在onload事件之后发生 一般是整个界面加载完成后 可以用来绑定默认的一些数据

AfterButtonClick事件

 

按钮的点击事件 e.key代表的是你在bos 设计器添加的按钮标识 当时踩了个坑就是标识它框架是全大写所以我不想改我标识 就加了个ToUpper()

EntryBarItemClick事件

这个事件是明细的按钮事件 一般用来写自定义的明细事件 可以用来完成框架没有的按钮效果

BarItemClick事件

这是页面上的菜单的事件可以对它进行重载

CustomEvents事件

这个事件我觉得是最好用的一个事件 因为它可以拿到用户做的对应操作 比如

 我这里做的一个功能是客户输入数据后按Enter然后进行数据筛选并添加到页面 最后固定焦点到输入的地方

还有电子称的功能实现也是因为这个事件

在客制化WPF控件中实现IKDCustomControl, IDynamicFormSupported这两个接口然后就可以传输数据到CustomEvents事件里接收

客制化控件的开发可以去看官方文档

如何自动添加数据:

       

 往entry里填数据就行了 最后一定要刷新明细不然显示不出来哦。源码:

//获取单据体数据包
DynamicObjectCollection Entrys = this.View.Model.DataObject["明细标识"] as DynamicObjectCollection;
//赋值data是你的数据集
foreach (var item in data)
{

    //构建新增行单据体数据
    DynamicObject entry = Entrys.DynamicCollectionItemPropertyType.CreateInstance() as DynamicObject;//相当于新增行操作
    entry["F_SYKF_Barcode"] = item["BARCODE"];
    entry["F_SYKF_Boxcapacity"] = item["BoxCapacity"];
    entry["F_SYKF_QTY"] = 0;
    entry["F_SYKF_Materialcode"] = item["materialID"].GetValue<string>("Number");
    entry["F_SYKF_MATERIALNAME"] = item["materialID"].GetValue<string>("Name");
    entry["F_SYKF_CUSTMATERIALCODE"] = item["CustMatID"].GetValue<string>("Number");
    entry["F_SYKF_Lot"] = item["LOT"].GetValue<string>("Name");
    entry["F_SYKF_Customerlot"] = item["cosLot"];
    entry["F_SYKF_Notes"] = item["REMARK"];
    entry["isComplete"] = 0;

    //新增行的数据add进单据提数据包
    Entrys.Add(entry);
}//bos的明细标识
this.View.UpdateView("明细标识");

我的业务是还有添加主明细的子明细:

   //获取当前选择行号
var selectRowIndex = this.View.Model.GetEntryCurrentRowIndex("主明细标识");
var EntryData = this.View.Model.DataObject;
var BillPack = EntryData["主明细标识"] as DynamicObjectCollection;//获取主明细数据包
var entry = BillPack[selectRowIndex];//当前行的数据
DynamicObjectCollection subEntryRows = entryRow.DynamicProperty.GetValue(entry) as DynamicObjectCollection;

foreach (var item in sonEntryData)
{

    DynamicObject subEntry = subEntryRows.DynamicCollectionItemPropertyType.CreateInstance() as DynamicObject;
    subEntry["F_SYKF_mBarcode"] = item["BARCODE"];
    subEntry["F_SYKF_materialID"] = item["materialId_id"];
    subEntry["F_SYKF_mMaterialcode"] = item["materialID"].GetValue<string>("Number");
    subEntry["F_SYKF_mMaterialname"] = item["materialID"].GetValue<string>("Name");
    subEntry["F_SYKF_mLot"] = item["lot"].GetValue<string>("Number");
    subEntry["F_SYKF_mCustomerlot"] = item["cosLot"];
    subEntry["F_SYKF_MMZ"] = item["GrossWeight"];
    subEntry["F_SYKF_mBarCodenum"] = item["QTY"];
    subEntry["F_SYKF_mCustomermID"] = item["custmatid"].GetValue<string>("Number");
    subEntry["F_SYKF_mLotID"] = item["lot"].GetValue<long>("ID");
    subEntryRows.Add(subEntry);
}
//调用值更新事件
_ = BillPack.UpdateRows;//没有就不要调
this.View.InvokeFieldUpdateService("F_SYKF_QTY", selectRowIndex);
this.View.UpdateView("FmEntity");//刷新一定要

还有一点让我研究的挺久的就是如何在它删除行后计算加的东西的重量

        实现的方法有很多 我这里提供一个在这两个事件里面重算就行了

    public override void AfterDeleteEntry(AfterDeleteEntryEventArgs e)
    {
        base.AfterDeleteEntry(e);
        GetLXWeight(_MaterialcurrentData);
    }
    public override void AfterDeleteRow(AfterDeleteRowEventArgs e)
    {
        base.AfterDeleteRow(e);
        GetLXWeight(_MaterialcurrentData);
    }

 结语

 以上就是我通过这个小项目的收获希望大家能通过这篇文章有所收获

  • 14
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值