想了幾年了,也沒想出來,grid中只能編輯當前行,不能編輯其它行

时间:2022-12-04 03:11:40
grid中編輯,只能編輯當前行,不能編輯其它行
想了幾年了,也沒想出來

33 个解决方案

#1


这个命题有点奇怪,不是当前行如何去编辑。

#2


把数据窗口对象中,各字段的protect属性设置为 

if ( isRowNew() , 0 , 1)

#3


引用楼主 dgitnet 的回复:
grid中編輯,只能編輯當前行,不能編輯其它行
想了幾年了,也沒想出來


呵呵,没看懂,这是问题还是需求?

#4


各字段的protect属性设置为 

if ( getrow() = currentrow() , 0 , 1)

#5


为什么要去编辑其他行?

#6


很科学的提问。。。

#7


只能编辑当前行,不能编辑其他行。。。。。

#8


引用 7 楼 xys_777 的回复:
只能编辑当前行,不能编辑其他行。。。。。


因為是GRID類型的數據窗口,所以可以同時多行修改,再同時保存,但因為要判斷每行的數量有沒有超過允許的值,所以保存時非常慢,如果只允許修改當前的行,其它行就不用循環判斷數量有沒有超過允許的值了,保存時速度會快很多。

#9


引用 6 楼 yvhygaa 的回复:
很科学的提问。。。


因為是GRID類型的數據窗口,所以可以同時多行修改,再同時保存,但因為要判斷每行的數量有沒有超過允許的值,所以保存時非常慢,如果只允許修改當前的行,其它行就不用循環判斷數量有沒有超過允許的值了,保存時速度會快很多。

#10


引用 5 楼 swallowluo 的回复:
为什么要去编辑其他行?


因為是GRID類型的數據窗口,所以可以同時多行修改,再同時保存,但因為要判斷每行的數量有沒有超過允許的值,所以保存時非常慢,如果只允許修改當前的行,其它行就不用循環判斷數量有沒有超過允許的值了,保存時速度會快很多。

#11


引用 2 楼 sewinten 的回复:
把数据窗口对象中,各字段的protect属性设置为

if ( isRowNew() , 0 , 1)


這樣只能增加時不能編輯,如果是以前已經保存的行,現在再編輯就無法編輯了

#12


引用 4 楼 benymo 的回复:
各字段的protect属性设置为

if ( getrow() = currentrow() , 0 , 1)


這樣只能增加時不能編輯,如果是以前已經保存的行,現在再編輯就無法編輯了 

#13


引用 5 楼 swallowluo 的回复:
为什么要去编辑其他行?


因為是GRID類型的數據窗口,所以可以同時多行修改,再同時保存,但因為要判斷每行的數量有沒有超過允許的值,所以保存時非常慢,如果只允許修改當前的行,其它行就不用循環判斷數量有沒有超過允許的值了,保存時速度會快很多。

#14


csdn只能連接回復3次,只能換個用戶tgjmail回復了

多謝大家的熱心幫助,這麼快這麼多回復,真的意外,用PB開發系統已經7年了,一直沒想這個問題,第一次發貼問問題。

繼續等。。。。。。

#15


任何datawindow都是只能編輯當前行啊,不是當前行能編輯的還沒有開發出來吧。

#16


没弄明白

#17


这个问题很简单嘛  

1. 添加位列 col_edit ,类型 integer ,默认 1
2. 在所有字段的 protect属性中写上 col_edit
3. 想让哪行能编辑就 把哪行的 col_edit 赋值成 0 

#18


刚接触,还不太明白楼主说的

#19


引用楼主 dgitnet 的回复:
只能編輯當前行,不能編輯其它行

给个实例吧

#20


引用 8 楼 dgitnet 的回复:
引用 7 楼 xys_777 的回复:
只能编辑当前行,不能编辑其他行。。。。。


因為是GRID類型的數據窗口,所以可以同時多行修改,再同時保存,但因為要判斷每行的數量有沒有超過允許的值,所以保存時非常慢,如果只允許修改當前的行,其它行就不用循環判斷數量有沒有超過允許的值了,保存時速度會快很多。


楼主所述的“当前行”是如何确定的?

当前焦点行肯定不能确定,因为点击就能改变当前行;
首次点击行?
由或者是某个特别标识,例如:日期,关键字等?

如果不能确定你所谓的“当前行”,是无法进行修改保护的。

#21


引用 20 楼 myclife 的回复:
因為是GRID類型的數據窗口,所以可以同時多行修改,再同時保存,但因為要判斷每行的數量有沒有超過允許的值,所以保存時非常慢,如果只允許修改當前的行,其它行就不用循環判斷數量有沒有超過允許的值了,保存時速度會快很多。


看了LZ 的N多次的重复说的上面的意思,是不是该这么理解:

一个GRID 的DW ,编辑过了以后又保存了,再编辑,再保存,再编辑。。。。
但是DW里的数据是保存以后没有清除。而是新增加的数据又增加到了该已经保存了的数据的列表的后面。
然而在保存的时候,有一个验证数据合法性的程序需要遂行的扫描看该DW 中已经存在的数据是不是符合要求。
这样就成了每次保存的时候要验证以前每次已经验证并且已经保存过了的行。

也就是说,现在需要的是在每次保存的时候,不需要验证甚至保存在这之前已经保存过了的行了。

如果是这个意思,那可以换种方法写数据处理方式:
可以在DW 控件的 itemchanged 事件中写验证程序,实现每次录入数据后随即验证。

#22


引用 10 楼 dgitnet 的回复:
引用 5 楼 swallowluo 的回复:
为什么要去编辑其他行?


因為是GRID類型的數據窗口,所以可以同時多行修改,再同時保存,但因為要判斷每行的數量有沒有超過允許的值,所以保存時非常慢,如果只允許修改當前的行,其它行就不用循環判斷數量有沒有超過允許的值了,保存時速度會快很多。

对于GRID数据窗口,当前行的定义是光标所在的行。而楼主所说的只可以修改当前行,需要有个前提,就是由代码决定光标所在的行是哪一行,而当前操作人员不能变更。否则任意一行都可能成为当前行。这个命题就没有研究价值了。
现在假设已经由程序决定了哪一行是可编辑的,而除此行之外的其它行获得光标焦点时需要处于不可编辑状态,那么需要使用的技术是设计DataWindow中各列的Protected属性的Express表达式,以判断当前行是否可编辑,可编辑则Protected为假,否则为真。

#23


楼主所谓的当前行应该是‘本次事务中修改或新增的行’吧?也就是不想再对已保存过的数据做正确性的校验,对吧?一般的做法是在录入时做即时的校验,如果一定要在保存时做校验,为减少校验量,偶曾经这样做过:数据窗口中加一计算列,名为col_check,表达式为if(isRowNew() or isRowModified(),1,0),要保存的时候,先用col_check = 1过滤,再校验,然后保存。不知楼主以为如何?

#24


这么多人没看明,楼主就举个实例来解释下吧!

#25


引用 17 楼 eviler 的回复:
这个问题很简单嘛 

1. 添加位列 col_edit ,类型 integer ,默认 1
2. 在所有字段的 protect属性中写上 col_edit
3. 想让哪行能编辑就 把哪行的 col_edit 赋值成 0


这个方法不错

#26


楼主的意思是不是一次不能编辑多行啊?
也就是说编辑一行就保存一行,然后才能编辑其他行。
这个很好控制啊,在rowfocuschanging中判断当前行是否有改变,如果有改变就不允许改变当前行。只有当保存了后才能改变当前行不就行了吗?

#27


这问题很有难度,听不懂。

#28


引用 21 楼 wag_enu 的回复:
引用 20 楼 myclife 的回复:

因為是GRID類型的數據窗口,所以可以同時多行修改,再同時保存,但因為要判斷每行的數量有沒有超過允許的值,所以保存時非常慢,如果只允許修改當前的行,其它行就不用循環判斷數量有沒有超過允許的值了,保存時速度會快很多。



看了LZ 的N多次的重复说的上面的意思,是不是该这么理解:

一个GRID 的DW ,编辑过了以后又保存了,再编辑,再保存,再编辑。。。。
但是DW里的数据是保存以后没有清除。而是新增加的数据又增加到了该已经保存了的数据的列表的后面。
然而在保存的时候,有一个验证数据合法性的程序需要遂行的扫描看该DW 中已经存在的数据是不是符合要求。
这样就成了每次保存的时候要验证以前每次已经验证并且已经保存过了的行。

也就是说,现在需要的是在每次保存的时候,不需要验证甚至保存在这之前已经保存过了的行了。

如果是这个意思,那可以换种方法写数据处理方式:
可以在DW 控件的 itemchanged 事件中写验证程序,实现每次录入数据后随即验证。



的確可以在itemchanged 裡即時判斷,但每次itemchanged 判斷時都要稍等一下(要計算),大量的數據需要輸入時用戶每輸入一下要稍等一下,用戶不滿意,所以我在輸入時沒有判斷,而是在用戶增加完成後點保存時循環判斷(當然需要的時間會很長了),如果用戶只是編輯了一行也要循環判斷,所以我希望有方法只讓用戶編輯一行時,光標不能移動到其它行,這樣就可以只判斷一行數量有沒有超過。

#29


引用 26 楼 tiantanglyz 的回复:
楼主的意思是不是一次不能编辑多行啊?
也就是说编辑一行就保存一行,然后才能编辑其他行。
这个很好控制啊,在rowfocuschanging中判断当前行是否有改变,如果有改变就不允许改变当前行。只有当保存了后才能改变当前行不就行了吗?


在rowfocuschanging也試過,但光標還是可以移動到其它行,可否說具體些,謝謝了!!!!!

#30


引用 17 楼 eviler 的回复:
这个问题很简单嘛 

1. 添加位列 col_edit ,类型 integer ,默认 1
2. 在所有字段的 protect属性中写上 col_edit
3. 想让哪行能编辑就 把哪行的 col_edit 赋值成 0


這個方法的缺點是:當只有一個字段時,保存後,因為protect了,鼠標就點不到其它行了(rowfocuschanted事件就永遠不能觸發了),是否可解決?非常感謝你的回復,謝謝。

#31


引用 23 楼 sjlion 的回复:
楼主所谓的当前行应该是‘本次事务中修改或新增的行’吧?也就是不想再对已保存过的数据做正确性的校验,对吧?一般的做法是在录入时做即时的校验,如果一定要在保存时做校验,为减少校验量,偶曾经这样做过:数据窗口中加一计算列,名为col_check,表达式为if(isRowNew() or isRowModified(),1,0),要保存的时候,先用col_check = 1过滤,再校验,然后保存。不知楼主?-


換個用戶回復

正是我意,終於解決了,謝謝謝謝!!!!!

#32


最後再次感謝大家,謝謝!!!

#33


其實有這麼多朋友幫忙解決一個問題很令人感動,謝謝大家!

#1


这个命题有点奇怪,不是当前行如何去编辑。

#2


把数据窗口对象中,各字段的protect属性设置为 

if ( isRowNew() , 0 , 1)

#3


引用楼主 dgitnet 的回复:
grid中編輯,只能編輯當前行,不能編輯其它行
想了幾年了,也沒想出來


呵呵,没看懂,这是问题还是需求?

#4


各字段的protect属性设置为 

if ( getrow() = currentrow() , 0 , 1)

#5


为什么要去编辑其他行?

#6


很科学的提问。。。

#7


只能编辑当前行,不能编辑其他行。。。。。

#8


引用 7 楼 xys_777 的回复:
只能编辑当前行,不能编辑其他行。。。。。


因為是GRID類型的數據窗口,所以可以同時多行修改,再同時保存,但因為要判斷每行的數量有沒有超過允許的值,所以保存時非常慢,如果只允許修改當前的行,其它行就不用循環判斷數量有沒有超過允許的值了,保存時速度會快很多。

#9


引用 6 楼 yvhygaa 的回复:
很科学的提问。。。


因為是GRID類型的數據窗口,所以可以同時多行修改,再同時保存,但因為要判斷每行的數量有沒有超過允許的值,所以保存時非常慢,如果只允許修改當前的行,其它行就不用循環判斷數量有沒有超過允許的值了,保存時速度會快很多。

#10


引用 5 楼 swallowluo 的回复:
为什么要去编辑其他行?


因為是GRID類型的數據窗口,所以可以同時多行修改,再同時保存,但因為要判斷每行的數量有沒有超過允許的值,所以保存時非常慢,如果只允許修改當前的行,其它行就不用循環判斷數量有沒有超過允許的值了,保存時速度會快很多。

#11


引用 2 楼 sewinten 的回复:
把数据窗口对象中,各字段的protect属性设置为

if ( isRowNew() , 0 , 1)


這樣只能增加時不能編輯,如果是以前已經保存的行,現在再編輯就無法編輯了

#12


引用 4 楼 benymo 的回复:
各字段的protect属性设置为

if ( getrow() = currentrow() , 0 , 1)


這樣只能增加時不能編輯,如果是以前已經保存的行,現在再編輯就無法編輯了 

#13


引用 5 楼 swallowluo 的回复:
为什么要去编辑其他行?


因為是GRID類型的數據窗口,所以可以同時多行修改,再同時保存,但因為要判斷每行的數量有沒有超過允許的值,所以保存時非常慢,如果只允許修改當前的行,其它行就不用循環判斷數量有沒有超過允許的值了,保存時速度會快很多。

#14


csdn只能連接回復3次,只能換個用戶tgjmail回復了

多謝大家的熱心幫助,這麼快這麼多回復,真的意外,用PB開發系統已經7年了,一直沒想這個問題,第一次發貼問問題。

繼續等。。。。。。

#15


任何datawindow都是只能編輯當前行啊,不是當前行能編輯的還沒有開發出來吧。

#16


没弄明白

#17


这个问题很简单嘛  

1. 添加位列 col_edit ,类型 integer ,默认 1
2. 在所有字段的 protect属性中写上 col_edit
3. 想让哪行能编辑就 把哪行的 col_edit 赋值成 0 

#18


刚接触,还不太明白楼主说的

#19


引用楼主 dgitnet 的回复:
只能編輯當前行,不能編輯其它行

给个实例吧

#20


引用 8 楼 dgitnet 的回复:
引用 7 楼 xys_777 的回复:
只能编辑当前行,不能编辑其他行。。。。。


因為是GRID類型的數據窗口,所以可以同時多行修改,再同時保存,但因為要判斷每行的數量有沒有超過允許的值,所以保存時非常慢,如果只允許修改當前的行,其它行就不用循環判斷數量有沒有超過允許的值了,保存時速度會快很多。


楼主所述的“当前行”是如何确定的?

当前焦点行肯定不能确定,因为点击就能改变当前行;
首次点击行?
由或者是某个特别标识,例如:日期,关键字等?

如果不能确定你所谓的“当前行”,是无法进行修改保护的。

#21


引用 20 楼 myclife 的回复:
因為是GRID類型的數據窗口,所以可以同時多行修改,再同時保存,但因為要判斷每行的數量有沒有超過允許的值,所以保存時非常慢,如果只允許修改當前的行,其它行就不用循環判斷數量有沒有超過允許的值了,保存時速度會快很多。


看了LZ 的N多次的重复说的上面的意思,是不是该这么理解:

一个GRID 的DW ,编辑过了以后又保存了,再编辑,再保存,再编辑。。。。
但是DW里的数据是保存以后没有清除。而是新增加的数据又增加到了该已经保存了的数据的列表的后面。
然而在保存的时候,有一个验证数据合法性的程序需要遂行的扫描看该DW 中已经存在的数据是不是符合要求。
这样就成了每次保存的时候要验证以前每次已经验证并且已经保存过了的行。

也就是说,现在需要的是在每次保存的时候,不需要验证甚至保存在这之前已经保存过了的行了。

如果是这个意思,那可以换种方法写数据处理方式:
可以在DW 控件的 itemchanged 事件中写验证程序,实现每次录入数据后随即验证。

#22


引用 10 楼 dgitnet 的回复:
引用 5 楼 swallowluo 的回复:
为什么要去编辑其他行?


因為是GRID類型的數據窗口,所以可以同時多行修改,再同時保存,但因為要判斷每行的數量有沒有超過允許的值,所以保存時非常慢,如果只允許修改當前的行,其它行就不用循環判斷數量有沒有超過允許的值了,保存時速度會快很多。

对于GRID数据窗口,当前行的定义是光标所在的行。而楼主所说的只可以修改当前行,需要有个前提,就是由代码决定光标所在的行是哪一行,而当前操作人员不能变更。否则任意一行都可能成为当前行。这个命题就没有研究价值了。
现在假设已经由程序决定了哪一行是可编辑的,而除此行之外的其它行获得光标焦点时需要处于不可编辑状态,那么需要使用的技术是设计DataWindow中各列的Protected属性的Express表达式,以判断当前行是否可编辑,可编辑则Protected为假,否则为真。

#23


楼主所谓的当前行应该是‘本次事务中修改或新增的行’吧?也就是不想再对已保存过的数据做正确性的校验,对吧?一般的做法是在录入时做即时的校验,如果一定要在保存时做校验,为减少校验量,偶曾经这样做过:数据窗口中加一计算列,名为col_check,表达式为if(isRowNew() or isRowModified(),1,0),要保存的时候,先用col_check = 1过滤,再校验,然后保存。不知楼主以为如何?

#24


这么多人没看明,楼主就举个实例来解释下吧!

#25


引用 17 楼 eviler 的回复:
这个问题很简单嘛 

1. 添加位列 col_edit ,类型 integer ,默认 1
2. 在所有字段的 protect属性中写上 col_edit
3. 想让哪行能编辑就 把哪行的 col_edit 赋值成 0


这个方法不错

#26


楼主的意思是不是一次不能编辑多行啊?
也就是说编辑一行就保存一行,然后才能编辑其他行。
这个很好控制啊,在rowfocuschanging中判断当前行是否有改变,如果有改变就不允许改变当前行。只有当保存了后才能改变当前行不就行了吗?

#27


这问题很有难度,听不懂。

#28


引用 21 楼 wag_enu 的回复:
引用 20 楼 myclife 的回复:

因為是GRID類型的數據窗口,所以可以同時多行修改,再同時保存,但因為要判斷每行的數量有沒有超過允許的值,所以保存時非常慢,如果只允許修改當前的行,其它行就不用循環判斷數量有沒有超過允許的值了,保存時速度會快很多。



看了LZ 的N多次的重复说的上面的意思,是不是该这么理解:

一个GRID 的DW ,编辑过了以后又保存了,再编辑,再保存,再编辑。。。。
但是DW里的数据是保存以后没有清除。而是新增加的数据又增加到了该已经保存了的数据的列表的后面。
然而在保存的时候,有一个验证数据合法性的程序需要遂行的扫描看该DW 中已经存在的数据是不是符合要求。
这样就成了每次保存的时候要验证以前每次已经验证并且已经保存过了的行。

也就是说,现在需要的是在每次保存的时候,不需要验证甚至保存在这之前已经保存过了的行了。

如果是这个意思,那可以换种方法写数据处理方式:
可以在DW 控件的 itemchanged 事件中写验证程序,实现每次录入数据后随即验证。



的確可以在itemchanged 裡即時判斷,但每次itemchanged 判斷時都要稍等一下(要計算),大量的數據需要輸入時用戶每輸入一下要稍等一下,用戶不滿意,所以我在輸入時沒有判斷,而是在用戶增加完成後點保存時循環判斷(當然需要的時間會很長了),如果用戶只是編輯了一行也要循環判斷,所以我希望有方法只讓用戶編輯一行時,光標不能移動到其它行,這樣就可以只判斷一行數量有沒有超過。

#29


引用 26 楼 tiantanglyz 的回复:
楼主的意思是不是一次不能编辑多行啊?
也就是说编辑一行就保存一行,然后才能编辑其他行。
这个很好控制啊,在rowfocuschanging中判断当前行是否有改变,如果有改变就不允许改变当前行。只有当保存了后才能改变当前行不就行了吗?


在rowfocuschanging也試過,但光標還是可以移動到其它行,可否說具體些,謝謝了!!!!!

#30


引用 17 楼 eviler 的回复:
这个问题很简单嘛 

1. 添加位列 col_edit ,类型 integer ,默认 1
2. 在所有字段的 protect属性中写上 col_edit
3. 想让哪行能编辑就 把哪行的 col_edit 赋值成 0


這個方法的缺點是:當只有一個字段時,保存後,因為protect了,鼠標就點不到其它行了(rowfocuschanted事件就永遠不能觸發了),是否可解決?非常感謝你的回復,謝謝。

#31


引用 23 楼 sjlion 的回复:
楼主所谓的当前行应该是‘本次事务中修改或新增的行’吧?也就是不想再对已保存过的数据做正确性的校验,对吧?一般的做法是在录入时做即时的校验,如果一定要在保存时做校验,为减少校验量,偶曾经这样做过:数据窗口中加一计算列,名为col_check,表达式为if(isRowNew() or isRowModified(),1,0),要保存的时候,先用col_check = 1过滤,再校验,然后保存。不知楼主?-


換個用戶回復

正是我意,終於解決了,謝謝謝謝!!!!!

#32


最後再次感謝大家,謝謝!!!

#33


其實有這麼多朋友幫忙解決一個問題很令人感動,謝謝大家!