请教光庆,如何将子窗体录入的数据写到主表的虚表中

redchina 18天前 278

子窗口的数据可以传递到主窗口,但不知如何传递到主窗口的虚表中,请教光庆老师

 import win.ui;
import godking.vlistEx;
import fonts.fontAwesome;
/*DSG{{*/
mainForm = win.form(text="vlistEx - table adapter";right=681;bottom=449)
mainForm.add(
edit={cls="edit";text="Edit";left=577;top=46;right=674;bottom=72;edge=1;multiline=1;z=3};
listview={cls="vlistEx";left=8;top=8;right=184;bottom=438;acceptfiles=1;dl=1;hscroll=1;vscroll=1;z=1};
vlist={cls="vlistEx";left=193;top=9;right=553;bottom=438;ah=1;aw=1;dl=1;edge=1;z=2}
)
/*}}*/

var t = {
    {' \uF0C5 基本操作',"[@treeLevel]"=0}
    {'  \uF0AE 数据录入',"[@treeLevel]"=1}
    {'  \uF0D0 数据编辑',"[@treeLevel]"=1}
    {'  \uF0CC 数据删除',"[@treeLevel]"=1}
    
    {' \uF080 数据查询',"[@treeLevel]"=0}
    {'  \uF0AE 人员查询',"[@treeLevel]"=1}
    {'  \uF0D0 地址查询',"[@treeLevel]"=1}
    {'  \uF0CC 编码查询',"[@treeLevel]"=1}
    {'  \uF0CC 索引查询',"[@treeLevel]"=1}
    
    {' \uF013 系统设置',"[@treeLevel]"=0}
    {'  \uF0AE 人员过滤',"[@treeLevel]"=1}
    {'  \uF0D0 数据管理',"[@treeLevel]"=1}
    {'  \uF0CC 账号登录',"[@treeLevel]"=1}
};
mainForm.listview.font = ::LOGFONT(name="fontAwesome";point=11;color=0x000000 )/*【属性】项目文本字体*/  
mainForm.listview.setHeaderHeight(0);
mainForm.listview.setRowHeight(35);
mainForm.listview.lineColorV = null;
mainForm.listview.lineColorH = 0xEEEEEE;
mainForm.listview.padding = 0;
mainForm.listview.hideScroll(true/*隐藏横向滚动条*/,true/*隐藏纵向滚动条*/);
mainForm.listview.setTable(t);

mainForm.listview.onDrawCellRect = function(row,col,hdc,rect,bkcolor,text,font,colalign){
    var rrow = mainForm.listview.getHideRowRealIndex(row /*虚表当前显示行号*/);
    if ..table.find({1,5,10},rrow){
        font.color = 0xFFFFFF;
        return false,0x71B33C; 
    }    
}
mainForm.addData = function(...){
    import console;
    //console.dump("添加新数据:",...);
    //console.dump(data);
    // 准备数据 - 使用 vlistEx 的正确方式

var data = {...}; // 获取传入的数据
console.dump(data);
mainForm.vlist.setRowHeight(25); // 设置行高
mainForm.vlist.setHeaderHeight(25); // 设置表头高度
mainForm.vlist.lineColorV = 0xEEEEEE; // 设置垂直网格线颜色
mainForm.vlist.lineColorH = 0xEEEEEE; // 设置水平网格线颜色
mainForm.vlist.padding = 5; // 设置单元格内边距
mainForm.vlist.hideScroll(true, true); // 隐藏滚动条
//将数据显示在vlist控件中

}

mainForm.listview.onClick = function(row,col,x,y,buttonIndex){
    if row and col {
        var cellText = mainForm.listview.getCellText(row,1);
        if(string.find(cellText,"数据录入")){
            var inputForm = mainForm.loadForm("\inputForm.aardio");
            
            // 添加回调函数,用于接收inputForm的数据
            inputForm.onSubmit = function(data){
                // 将新数据添加到vlist中
                var newRow = table.clone(data);
                newRow["[@rowindex]"] = #mainForm.vlist.table + 1;
                table.push(mainForm.vlist.table, newRow);
                mainForm.vlist.redraw(); // 刷新显示
            }
            inputForm.show();
            return;
        }
            inputForm.doModal();
            return;
        }        
        var rrow = mainForm.listview.getHideRowRealIndex(row /*虚表当前显示行号*/);
        if ..table.find({1,5,10},rrow){
            var ishide = mainForm.listview.isUnHideSubRow(rrow);
            mainForm.listview.hideSubRow( rrow /*行号*/,ishide/*是否隐藏*/,true/*是否立即刷新*/);
            return ; 
        }
        win.msgbox("您点击了:第"++rrow++"行,第"++col++"列"++mainForm.listview.getCellText(row,1));    
    }

// 准备数据 - 使用 vlistEx 的正确方式

var t = { fields={"序号","姓名","年龄","地址","身份证"} };
for(i=1;10;1){
    var tt={};
    tt["序号"]="[@rowindex]";  // 行序号标记是不允许编辑修改的
    tt["姓名"]=math.random(1000,9999)+"姓名";
    tt["年龄"]=math.random(10,99);
    tt["地址"]=math.random(1000,9999)+"地址";
    tt["身份证"]=math.random(1000,9999)+"身份证";
    ..table.push(t,tt);
}
mainForm.vlist.setTable(t,,{80,100,100,100,-1},1);
//======================= 功能演示 =======================
mainForm.vlist.onEditBegin = true;
mainForm.vlist.onEditEnd = function(row/*行*/,col/*列*/,text/*内容*/,endType){
    if endType = 2/*_vlistEx_endType_onEditOK*/ or endType==3/*_vlistEx_endType_onEditTab*/ {
        if col==5 {
            if row<owner.count return true,λ()mainForm.vlist.edit(row+1,2);  //注意此处方法
        } else {
            return true,λ()mainForm.vlist.edit(row,col+1);  //注意此处方法
        }
    }
    return true; 
}
mainForm.show();
win.loopMessage();


最新回复 (11)
  • redchina 17天前
    0 2

    子窗口代码

     import win.ui;
    /*DSG{{*/
    var winform = win.form(text="数据录入";right=459;bottom=309;parent=...)
    winform.add(
    btnCancel={cls="button";text="取消";left=339;top=264;right=442;bottom=295;z=7};
    btnSave={cls="button";text="保存";left=229;top=264;right=332;bottom=295;z=6};
    edit_address={cls="edit";left=89;top=127;right=442;bottom=158;edge=1;z=4};
    edit_code={cls="edit";left=89;top=173;right=442;bottom=204;edge=1;z=5};
    edit_name={cls="edit";left=89;top=81;right=442;bottom=112;edge=1;z=2};
    static={cls="static";text="姓名:";left=28;top=84;right=76;bottom=104;transparent=1;z=1};
    static2={cls="static";text="地址:";left=28;top=130;right=76;bottom=150;transparent=1;z=3};
    static3={cls="static";text="编码:";left=28;top=178;right=76;bottom=198;transparent=1;z=8}
    )
    /*}}*/
    
    winform.btnSave.oncommand = function(id,event){
        var data = {
            name = winform.edit_name.text;
            address = winform.edit_address.text;
            code = winform.edit_code.text;
        }
        
        if(#data.name==0){
            win.msgbox("请输入姓名!");
            return;
        }
        //按下保存按钮时,将data数据传送到父窗口的edit控件中
       
    if(#data.address==0){
        win.msgbox("请输入地址!");
        return;
    }
    if(#data.code==0){
        win.msgbox("请输入编码!");
        return;
    }
        if(winform.parent && winform.parent.edit){
            winform.parent.edit.text = "姓名:" ++ data.name ++ "\r\n地址:" ++ data.address ++ "\r\n编码:" ++ data.code;
        }
        win.msgbox(data);
        //winform.close();
    }
    
    winform.btnCancel.oncommand = function(id,event){
       // winform.close();
    }
    
    winform.show();
    return winform;


  • redchina 17天前
    0 3

    添加第一行数据可以正常显示,再添加第二行数据时,主窗口虚表数据显示异常,后来增加了全局表后,显示正常,不知是否有添加数据更佳的显示方法,附件子文件可以正常添加数据

    上传的附件:
  • 光庆 16天前
    0 4

    参考附件

    上传的附件:
  • redchina 16天前
    0 5

    还是光庆老师写的简练,赞!

    直接一个函数-添加行就将数据送过去了,mainForm.vlist.addRow(...)

  • redchina 16天前
    0 6

    光庆老师,addrow这个函数在输入时没有智能提示,虚表中藏了不少宝贝

  • redchina 16天前
    0 7
    aardio很多函数有的有提示,有的没有,这是什么原因,
  • redchina 16天前
    0 8
    现在vlsit又有addrow提示了,好奇怪
  • redchina 16天前
    0 9
    学习了智能提示函数的写法:namespace mathUtils; // 加法函数 add = function(a, b) { return a + b; } // 乘法函数 multiply = function(a, b) { return a * b; } // 添加智能提示 // 减法函数 sub = function(a, b) { return a - b; } // 除法函数 div = function(a, b) { return a / b; } /**intellisense() mathUtils = 自定义函数 add() = 计算两个数的和。 multiply() = 计算两个数的乘积 end intellisense**/
  • 光庆 15天前
    0 10
    redchina 现在vlsit又有addrow提示了,好奇怪
    在代码界面,粘贴代码后,智能提示不会刷新。ctrl+U切换到设计界面,再ctrl+U切换到代码界面,就可以顺利弹出智能提示了。
  • breezee 15天前
    0 11
    通常情况下,仔细浏览一遍库文件,会减少很多弯路,也会发现很多惊喜
  • 光庆 15天前
    0 12
    breezee 通常情况下,仔细浏览一遍库文件,会减少很多弯路,也会发现很多惊喜
    经验之谈
返回