组合框和列表框的几个小问题,请大家帮帮忙!

时间:2022-05-08 17:34:45
做一个图书管理模块,其中有分类booktype(组合框)和所有图书books(列表框)两个域,问题如下:
1、在视图里,同一种类的书有几本,如何在表单运行时自动选定图书分类并作为booktype的值,但不能重复。
2、当改变booktype选择一个分类时,如何动态的把属于这个分类的书名添加到books里。

谢谢!最好能有公式和LS两种代码,小弟想学习一下,分不够可另给。:)

12 个解决方案

#1


用公式:
视图:两列:
BookType,BookName;
表单:隐藏两域:[多值]
BookTypeList:公式为@dbcolumn("取第一列")
BookNameList:公式为@dbcolumn("取第二列")
booktype:设置为计算
books:公式为:
@replace(@implode(BookNameList);@implode(BookTypeList);booktype)
用脚本:
视图:两列:
BookType,BookName;
表单:隐藏两域:[多值]
BookTypeList:公式为@dbcolumn("取第一列")
BookNameList:公式为@dbcolumn("取第二列")
<script>
function GetSelect(Obj)
{
      for(iIndex=0;iIndex<Obj.length;iIndex++)
     {
            if(Obj.options[iIndex].selected)
            {
                   return Obj.options[iIndex].text;
             }
     }
}
function GetData(Category)
{
      两个多值隐藏域就是两个数组A,B[用split吧!]
      遍历数组B,如果元素值等于Category就将A对应索引的值赋给books[改变books.lenth,加一个;循环就可以了]
}
</script>
booktype的onchange="GetData(GetSelect(this))"
大概就是这样了,写的有问题,只是个思路.

#2


不错的思路!!!

#3


如果是在B/S上,思路是对的。但如果是在C/S实现的话,就没有必要这样了。比如第二个问题,只要把表单属性设为按关键字刷新的话,把booktype设为关键字的话,只要booktype的值改变,就会触发页面刷新程序,从而你可以重新给books赋值。

#4


公式很简单:
首先要在视图——booktype(组合框)必须是设置为分类的,最好是第一列,升或降序。
booktype(组合框)::在公式里写(@Unique(@DbColumn("";@Subset(@DbName;1):"";"view";1))),而这个域必须选择(在公式填写窗口属性的下面有两项),在该域的默认值下写:@Subset(@Unique(@DbColumn("";"":"";"VIEW";1));1)——可以打开表单就能显示第一项的变化。
books(列表框)域::@If(@IsError(@DbLookup("";@Subset(@DbName;1):"";"view";booktype;2));"";@DbLookup("";@Subset(@DbName;1):"";"view";booktype;2)),而这个域必须选择(在公式填写窗口属性的下面有两项),这样就可以了。

#5


to gjd111686(数字金刚):
  我把booktype设为计算,用@if(booktype="";"某个分类";@false)赋初值的话,组合框是灰色的,既不可选,不赋初值就有出错提示,怎么解决?

to Amanged(阿满):
  你的方法比较简单,可以得到我想要的结果。

    另外,当选择books中的一项或多项时,如何知道到底选的是哪项呢?

#6


我正面临这个问题!我想请教阿满: 
1、如何把booktype设置为关键字?
2、这段话不明白:booktype(组合框)::在公式里写(@Unique(@DbColumn("";@Subset(@DbName;1):"";"view";1))),而这个域必须选择(在公式填写窗口属性的下面有两项),在该域的默认值下写:@Subset(@Unique(@DbColumn("";"":"";"VIEW";1));1)——可以打开表单就能显示第一项的变化。

3、默认值一定是default value了。我给组合框的默认值输入了:@Subset(@Unique(@DbColumn("";"":"";"VIEW";1));1)—— 但是,执行後是空白的。
但是给一个文本域赋同样的值,能够成功显示第一个书类型,而且赋值为Unique(@DbColumn("";"":"";"VIEW";1)可以显示所有的书本类型。 换成组合框就不行了!!!!!

4、我不知道组合框的公式:Unique(@DbColumn("";@Subset(@DbName;1):"";"view";1)))该写在哪里? 你的话中: 在公式填写窗口属性的下面有两项指的什么????)

没有办法,我就定义了一个操作按钮,公式为:booktype=@Unique(@DbColumn("";"":"admin.nsf";"book";1))执行后也没有值,空白的!!!

(我的视图没有问题,是有很多文档的。用@DbColumn("":"";"":"admin.nsf";"book";1)给文本域赋值可以看见那些所有的书类型 以及书名字的文本列表)

请帮帮我,非常感谢!

#7


不好意思,我找到输入组合框公式的地方了!!

#8


to haifeng999(海风):
    把“当关键字改变时刷新域”选上

#9


@If(@IsError(@DbLookup("":"Nocache";"":"admin.nsf";"book";booktype;2) );
      "aaaaaaaaaa";  @DbLookup("":"Nocache";"":"admin.nsf";"book";booktype;2))

执行的时候显示aaaaaa.
建立一个文本域无标题,公式定义成上面的,执行后显示:域:'无标题";entry not found in index or view's index not built

是不是booktype不是关键字的原因?关键字是不是在dblookup中指定的booktype?
我给booktype和bookname选择了:按照关键字变化刷新域,和 在刷新文档时刷新选项。

#10


根据:
指定关键字:
。。。。。。。。。。。。。
视图必须包含一个排序列才能进行查找,否则将返回一个空值。对一个已排序但未分类的多值域,返回的结果不一定准确。

我对视图的booktype进行排序,执行结果正常。

非常感谢大家和阿满!

#11


当选择books中的一项或多项时,如何知道到底选的是哪项呢?

up

#12


我还有一分阿,谢谢谢谢

#1


用公式:
视图:两列:
BookType,BookName;
表单:隐藏两域:[多值]
BookTypeList:公式为@dbcolumn("取第一列")
BookNameList:公式为@dbcolumn("取第二列")
booktype:设置为计算
books:公式为:
@replace(@implode(BookNameList);@implode(BookTypeList);booktype)
用脚本:
视图:两列:
BookType,BookName;
表单:隐藏两域:[多值]
BookTypeList:公式为@dbcolumn("取第一列")
BookNameList:公式为@dbcolumn("取第二列")
<script>
function GetSelect(Obj)
{
      for(iIndex=0;iIndex<Obj.length;iIndex++)
     {
            if(Obj.options[iIndex].selected)
            {
                   return Obj.options[iIndex].text;
             }
     }
}
function GetData(Category)
{
      两个多值隐藏域就是两个数组A,B[用split吧!]
      遍历数组B,如果元素值等于Category就将A对应索引的值赋给books[改变books.lenth,加一个;循环就可以了]
}
</script>
booktype的onchange="GetData(GetSelect(this))"
大概就是这样了,写的有问题,只是个思路.

#2


不错的思路!!!

#3


如果是在B/S上,思路是对的。但如果是在C/S实现的话,就没有必要这样了。比如第二个问题,只要把表单属性设为按关键字刷新的话,把booktype设为关键字的话,只要booktype的值改变,就会触发页面刷新程序,从而你可以重新给books赋值。

#4


公式很简单:
首先要在视图——booktype(组合框)必须是设置为分类的,最好是第一列,升或降序。
booktype(组合框)::在公式里写(@Unique(@DbColumn("";@Subset(@DbName;1):"";"view";1))),而这个域必须选择(在公式填写窗口属性的下面有两项),在该域的默认值下写:@Subset(@Unique(@DbColumn("";"":"";"VIEW";1));1)——可以打开表单就能显示第一项的变化。
books(列表框)域::@If(@IsError(@DbLookup("";@Subset(@DbName;1):"";"view";booktype;2));"";@DbLookup("";@Subset(@DbName;1):"";"view";booktype;2)),而这个域必须选择(在公式填写窗口属性的下面有两项),这样就可以了。

#5


to gjd111686(数字金刚):
  我把booktype设为计算,用@if(booktype="";"某个分类";@false)赋初值的话,组合框是灰色的,既不可选,不赋初值就有出错提示,怎么解决?

to Amanged(阿满):
  你的方法比较简单,可以得到我想要的结果。

    另外,当选择books中的一项或多项时,如何知道到底选的是哪项呢?

#6


我正面临这个问题!我想请教阿满: 
1、如何把booktype设置为关键字?
2、这段话不明白:booktype(组合框)::在公式里写(@Unique(@DbColumn("";@Subset(@DbName;1):"";"view";1))),而这个域必须选择(在公式填写窗口属性的下面有两项),在该域的默认值下写:@Subset(@Unique(@DbColumn("";"":"";"VIEW";1));1)——可以打开表单就能显示第一项的变化。

3、默认值一定是default value了。我给组合框的默认值输入了:@Subset(@Unique(@DbColumn("";"":"";"VIEW";1));1)—— 但是,执行後是空白的。
但是给一个文本域赋同样的值,能够成功显示第一个书类型,而且赋值为Unique(@DbColumn("";"":"";"VIEW";1)可以显示所有的书本类型。 换成组合框就不行了!!!!!

4、我不知道组合框的公式:Unique(@DbColumn("";@Subset(@DbName;1):"";"view";1)))该写在哪里? 你的话中: 在公式填写窗口属性的下面有两项指的什么????)

没有办法,我就定义了一个操作按钮,公式为:booktype=@Unique(@DbColumn("";"":"admin.nsf";"book";1))执行后也没有值,空白的!!!

(我的视图没有问题,是有很多文档的。用@DbColumn("":"";"":"admin.nsf";"book";1)给文本域赋值可以看见那些所有的书类型 以及书名字的文本列表)

请帮帮我,非常感谢!

#7


不好意思,我找到输入组合框公式的地方了!!

#8


to haifeng999(海风):
    把“当关键字改变时刷新域”选上

#9


@If(@IsError(@DbLookup("":"Nocache";"":"admin.nsf";"book";booktype;2) );
      "aaaaaaaaaa";  @DbLookup("":"Nocache";"":"admin.nsf";"book";booktype;2))

执行的时候显示aaaaaa.
建立一个文本域无标题,公式定义成上面的,执行后显示:域:'无标题";entry not found in index or view's index not built

是不是booktype不是关键字的原因?关键字是不是在dblookup中指定的booktype?
我给booktype和bookname选择了:按照关键字变化刷新域,和 在刷新文档时刷新选项。

#10


根据:
指定关键字:
。。。。。。。。。。。。。
视图必须包含一个排序列才能进行查找,否则将返回一个空值。对一个已排序但未分类的多值域,返回的结果不一定准确。

我对视图的booktype进行排序,执行结果正常。

非常感谢大家和阿满!

#11


当选择books中的一项或多项时,如何知道到底选的是哪项呢?

up

#12


我还有一分阿,谢谢谢谢