有关虚表加载csv排序问题

mndsoft 3月前 310

大师,测试了一个虚表的加载 csv无法自动排序(更新序号)的问题,麻烦看看什么原因,谢谢

通过代码加载的 "[@rowindex]" 顺序记录,删除,添加,拖放都会自动排序。

但是保存到 csv文件后,再打开加载csv就会出现,删除或拖动顺序号重复或无序的状态。

其实这个导出csv的功能做个导出时简单加密选项,避免用户随意修改,可以做为一个小数据库轻量使用,还是不错的,哈哈。 

如下图和代码:



import win.ui;
import godking.vlistEx;
/*DSG{{*/
var winform = win.form(text="aardio form";right=630;bottom=526)
winform.add(
button={cls="button";text="删除";left=125;top=462;right=219;bottom=496;z=2};
button2={cls="button";text="清空";left=240;top=461;right=334;bottom=495;z=5};
button3={cls="button";text="saveToCsv";left=408;top=462;right=502;bottom=496;z=3};
button4={cls="button";text="open Csv";left=523;top=461;right=617;bottom=495;z=4};
button5={cls="button";text="添加";left=18;top=462;right=112;bottom=496;z=6};
lsvController={cls="vlistEx";left=16;top=11;right=621;bottom=448;acceptfiles=1;db=1;dl=1;dr=1;dt=1;edge=1;font=LOGFONT(h=-14);z=1}
)
/*}}*/

winform.lsvController.headerFont = ::LOGFONT(name="微软雅黑";point=10;color=0x000000); //设置表头默认字体
winform.lsvController.headerBkcolor = 0xE0E0E0;  //表头背景色
winform.lsvController.headerAlign = {1,1,1,1,1};   //水平: 0 左 1 中 2 右  垂直: 0 顶 4 中 8 底
winform.lsvController.setHeaderHeight(30)
winform.lsvController.setRowHeight(36);    //行高度
//winform.lsvController.focusColor=0xFFEEEE;  //焦点颜色
winform.lsvController.selectedColorFirst=false;
//winform.lsvController.selectedTextColor =0x007FFF
winform.lsvController.selectedBkColor =0x948DC6    //选中行背景色
winform.lsvController.bkColor=0xECECEC;            //表格背景色
winform.lsvController.blankColor=0xECECEC          //表格空白处颜色

var t = {
    {"[@rowindex]", "A"} 
    {"[@rowindex]", "B"} 
    {"[@rowindex]", "C"} 
    {"[@rowindex]", "D"} 
    {"[@rowindex]", "E"} 
    {"[@rowindex]", "F"} 
    {"[@rowindex]", "G"}
    {"[@rowindex]", "H"} 
}

//winform.lsvController.setTable(t,{"<img name='DefaultUncheckedImg',w=14,h=14> 序号","名称",""},{70,120,300,120},0x1);
winform.lsvController.setTable(t,{"序号","名称",""},{70,120,300},0x1);
winform.lsvController.fillParent();  //使指定列自适应父窗口宽度。参数:列号\n如果不指定列,默认调整最后一列。
winform.lsvController.headerAlign = 1;
winform.lsvController.checkBox.show = true
winform.lsvController.onResizeCol = false; //全局不可调整
winform.lsvController.onDragRow = true;  //运行拖动
winform.lsvController.onEditBegin = {true,2,5,6,7}; // 只允许第2列名称、5,时间第6 IP列可编辑


winform.lsvController.onDragRow = function(draglist/*要拖动的行号数组*/,dragtorow/*拖到的目标行号*/){
    /*鼠标拖动行。返回true允许拖动,否则禁止拖动。可以使用 dragRow 开头的相关属性进行设置。
    1、可以按住 shift 或 ctrl 同时选择多个项目。
    2、多个项目拖动后将按索引顺序连续排列。
    3、先选择项目,再在选择的项目上按住鼠标左键拖动即可。
    4、只能拖动到第一个选择项的前面,或最后一个选择项的后面。
    */
    	//winform.lsvController.sort(1/*排序字段*/,false/*逆序*/,0/*转换类型*/,false/*使用微软api进行文本排序*/,false/*null靠后*/)
	winform.lsvController.update()

    return winform.msgbox("确定要拖动该记录插入到当前项?",,1/*_MB_OKCANCEL*/)===1;
}

winform.button4.oncommand = function(id,event){
	winform.lsvController.openCsv("/List.csv",true/*包含表头*/,false/*重建列*/)
}

winform.button3.oncommand = function(id,event){
	winform.lsvController.saveToCsv("/List.csv",true/*包含表头*/,false/*utf8编码*/)  
}

winform.button.oncommand = function(id,event){
	winform.lsvController.delRow(winform.lsvController.getSelected()); 
	winform.lsvController.sort(1/*排序字段*/,false/*逆序*/,0/*转换类型*/,false/*使用微软api进行文本排序*/,false/*null靠后*/)
	winform.lsvController.update()
	
}

winform.button2.oncommand = function(id,event){
	 winform.lsvController.clear()
}

winform.button5.oncommand = function(id,event){
	    //插入
    //var temps = {"[@rowindex]","未命名(双击修改)","双击选择或拖一个文件进来",""}
    //winform.lsvController.insertRow(winform.lsvController.selIndex ,temps)
    
    //复制插入
    //var temps =table.clone( winform.lsvController.getRowData(winform.lsvController.selIndex))
    //winform.lsvController.insertRow(winform.lsvController.selIndex,temps)
	winform.lsvController.addRow("[@rowindex]","未命名(双击修改)","双击选择或拖放文件进来",""); //使用行索引标识符	
	//winform.lsvController.ensureVisible(winform.lsvController.count)
	//winform.lsvController.setSelected(winform.lsvController.count);
	winform.lsvController.sort(1/*排序字段*/,false/*逆序*/,0/*转换类型*/,false/*使用微软api进行文本排序*/,false/*null靠后*/)
	winform.lsvController.update()

}

winform.show();
win.loopMessage();


最新回复 (2)
  • 光庆 3月前
    0 2
    winform.button4.oncommand = function(id,event){
        winform.lsvController.openCsv("/List.csv",true/*包含表头*/,false/*重建列*/);
        winform.lsvController.setRowIndex(1);
    }


  • mndsoft 3月前
    0 3
    谢谢,还有setRowIndex(1) 这个功能,还得仔细看库文件说,已OK
返回