在项目中,批量操作grid是十分需要的,如填写采购单的采购零件明细表,比如金蝶的k3就提供者方便的功能。
我的实现是这样的,用datagrid 的模版列,ListItemType.Item放入一个textbox和dropdownlist之类的东西。有个难点就是,用户有5个新增空白行,但用户只输入2行,那么用验证控件就会出问题,会出现其他行“输入不能为空”。我是这样实现的:
当发生textchang事件的时候,对事件源的(如textbox)的parent属性,就得到tabelecell,同样tabelecell的parent属性就是table row了,对这个table row的每个cell的每个控件进行判断,如果控件的值都为控
ValidatorEnable(obj,false);把该行的每一个验证控件的验证功能进行屏蔽。为了后台好控制,每行我设有一个隐藏的值,保存该行是否是空白行。有些地方,值改变了,未必会发生textchang事件,我是用fireevent来产生事件。
光标移动:用户想用方向键移动光标。用对事件源的(如textbox)的parent属性,找到这个tablecell,然后
再找到tablerow, table,然后查出事件源是输入这个table的第几行,第几列,接下来就是不用说了吧。
用户按F9把行的数据复制到下行,F8把这个单元格的数据,复制到下个单元格,这些实现方法,跟上面的差不多。
datagird真的很强大,基本能满足用户的需求。
我的实现是这样的,用datagrid 的模版列,ListItemType.Item放入一个textbox和dropdownlist之类的东西。有个难点就是,用户有5个新增空白行,但用户只输入2行,那么用验证控件就会出问题,会出现其他行“输入不能为空”。我是这样实现的:
当发生textchang事件的时候,对事件源的(如textbox)的parent属性,就得到tabelecell,同样tabelecell的parent属性就是table row了,对这个table row的每个cell的每个控件进行判断,如果控件的值都为控
ValidatorEnable(obj,false);把该行的每一个验证控件的验证功能进行屏蔽。为了后台好控制,每行我设有一个隐藏的值,保存该行是否是空白行。有些地方,值改变了,未必会发生textchang事件,我是用fireevent来产生事件。
光标移动:用户想用方向键移动光标。用对事件源的(如textbox)的parent属性,找到这个tablecell,然后
再找到tablerow, table,然后查出事件源是输入这个table的第几行,第几列,接下来就是不用说了吧。
用户按F9把行的数据复制到下行,F8把这个单元格的数据,复制到下个单元格,这些实现方法,跟上面的差不多。
datagird真的很强大,基本能满足用户的需求。