PB实现数据窗口动态排序的方法

PB可以通过在DW控件的字典中定义数据窗口的排序规则来实现动态排序。具体步骤如下:

  1. 在DW控件的字典中找到需要排序的列,右键点击该列,选择“列属性”。

  2. 在弹出的列属性对话框中,选择“数据”选项卡,在“排序”下拉框中选择“动态”,并在“排序表达式”中输入排序规则。

  3. 排序规则可以是单个列,也可以是多个列的组合,例如:

  • 单个列排序:按照某个列升序排序,可以输入该列的名称(如“emp_no”);
  • 多列排序:按照多个列的组合排序,例如先按照“dept_no”升序排序,再按照“emp_no”降序排序,可以输入“dept_no ASC, emp_no DESC”。
  1. 在代码中,可以通过DW控件的“sort()”方法来动态排序,例如:

dw_1.Sort("dept_no ASC, emp_no DESC")

string ls_sort,ls_order,ls_column
  choose case ddlb_1.text
  case “学号” ls_column=“#1”
  case “姓名” ls_column=“#2”
  case “住址” ls_column=“#3”
  case “班号” ls_column=“#4”
  case “班级名称” ls_column=“#5”
  end choose
  if rb_1.checked then ls_order=“A”
  else ls_order=“D”
  end if
  ls_sort=ls_column+’’+ls_order
  dw_1.setsort(ls_sort)
  dw_1.sort()

以上就是PB实现数据窗口动态排序的方法,也是目前来说最常见的方法,使用起来最方便,既可以引用列名也可引用列号(如#4表示第四列)来指定序列

下面在介绍两种不同的思路

方法1:用SetSQLselect()
string ls_oldsql,ls_newsql,ls_order ls_column
  ls_oldsql=dw_1.getsqlselect()
  choose case ddlb_1.text
  case “学号”ls_column=“sid”
  case “姓名”ls_column=“sname”
  case “住址”ls_column=“saddr”
  case “班号”ls_column=“class.cid”
  case “班级名称” ls_column=“cname”
  end choose
  if rb_1.checked then ls_order=“ASC”
  else ls_order=“DESC”
  end if
  ls_newsql=ls_oldsql+” ORDER BY “+&
  ls_column+” ”+ls_order
  if dw_1.setsqlselect(ls_newsql)=-1 then
  messagebox(“警告”,”数据设置失败”,stopsign!)
  else dw_1.settransobject(sqlca)
  dw_1.reset()
  dw_1.retrieve()
  dw_1.setsqlselect(ls_oldsql)
  end if
方法2:用describe()和modify()
string ls_mod, ls_order,ls_old,ls_column
  ls_old=dw_1.describe(‘datawindow.table.select’)
  dw_1.settransobject(sqlca)
  choose case ddlb_1.text
  case “学号”ls_column=“sid”
  case “姓名”ls_column=“sname”
  case “住址”ls_column=“saddr”
  case “班号”ls_column=“class.cid”
  case “班级名称” ls_column=“cname”
  end choose
  if rb_1.checked then ls_order=“ASC”
  else ls_order=“DESC”
  end if
  ls_mod=“datawindow.table.select=’“+ls_old+&
  ‘ORDER BY “’+ls_column+’“’+ls_order+” ’ “
  dw_1.modify(ls_mod)
  dw_1.retrieve()
  dw_1.modify(“datawindow.table.select= &
  ’ “+ls_old+” ‘ “)

1.第一种和第二种方法要求数据窗口在生成时是无序的。

2.对于来自不同表单的相同的列名(如student.cid、class.cid)用第二种方法排序实现起来较麻烦,因为在用modify()函数时要特别注意引号的使用。但是第二种方法比第一种方法的执行速度要快

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

emma20080101

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值