LookupEdit.EditValueChanged事件内给其它文本框赋值无效或变回原来的值
LookupEdit.EditValueChanged事件内给其它文本框赋值无效或变回原来的值
在开发应用中,通常当选择一个值时要自动带出相关数据(给其它输入框组件赋值),比如一个选择客户的LookupEdit组件,取名为txtCustomer,选择客户的同时要自动带出客户的名称、联系人以及联系电话在对应的输入框中显示出来。我们可以在EditValueChanged、Validating、或者TextChanged事件内处理。 有一种异常情况 假设在EditValueChanged事件内处理上述需求,当选择客户后能自动带出联系人及电话号码,但是客户选择框本身被莫名其妙清空了或者选择无效(变回原来的值)! 原因:若在EditValueChanged事件内给其他绑定数据源的组件赋值时,会重置当前组件的EditValue的值。 解决方案 必须在EditValueChanged事件内第一行代码调用SetEditorBindingValue(txtCustomer,txtCustomer.EditValue),但是这种处理可能造成死循环,给EditValue赋值时又调用了EditValueChanged事件。 改为以下写法,注意第3个参数: SetEditorBindingValue(txtCustomer,txtCustomer.EditValue,false); 完整的写法如下: C# Code: private void txtCustomer_EditValueChanged(object sender, EventArgs e) { //当选择客户,自动带出客户的名称、联系人、联系电话 //不给自己的EditValue赋值,参数setEditorValue=false EditorBinding.SetEditorBindingValue(txtCustomer, txtCustomer.EditValue, false); //根据编号编号查询客户详细资料 Customer customer = new bllCustomer().Find(txtCustomer.EditValue.ToString()); //除sender外,给其它绑定的数据源及EditValue赋值,setEditorValue=true EditorBinding.SetEditorBindingValue(txtCustomerName, customer.CustomerName, true); EditorBinding.SetEditorBindingValue(txtCustomerAttn, customer.Attn, true); EditorBinding.SetEditorBindingValue(txtCustomerTel, customer.Tel, true); } //来源:C/S框架网 | www.csframework.com | QQ:23404761 SetEditorBindingValue C# Code: /// <summary> /// 给绑定数据源的组件赋值 /// </summary> /// <param name="bindingControl"></param> /// <param name="value"></param> /// <param name="setEditorValue"></param> protected void SetEditorBindingValue(BaseEdit bindingControl, object value, bool setEditorValue = true) { if (setEditorValue) { //bindingControl.Text = value; bindingControl.EditValue = value; } //写入数据到数据源 if (bindingControl.DataBindings.Count > 0) { bindingControl.DataBindings[0].WriteValue(); } } //来源:C/S框架网 | www.csframework.com | QQ:23404761 扫一扫加微信:
参考文档:
C# 给绑定数据源的文本框.Text属性赋值,但没有保存数据 EditValueChanged事件,给另外文本框赋值,为什么事件本身的值赋不值 在文本框输入值,不离开焦点保存还是原来的值 Application ThreadException 事件内需要处理异常 支持级别分配权限(把自己拥有的权限分配给其他用户) 图片转为Base64编码的文本 数据字典BLL.CreateDataBinder方法实现新增记录给主键赋值 明细表插入记录Insert报错:行插入位置-2147483648无效。 Dev表格RepositoryItemLookUpEdit组件改变值时设置其它列的值-原创 表格GridView.CustomDrawEmptyForeground事件显示没有查询到数据 LookupEdit关联更新其它文本输入框的值(自动带出参考数据并赋值) 给绑定数据源的文本输入框TextEdit.Text或EditValue属性赋值,失去焦点文本自动清空了 新增记录时自动生成记录的序号号码(或单据号码)并填充文本框 解决方案:C# 当按钮不可见时(Visible=False),调用Button.PerformClick事件无效! 修改单元格关联更新其它列的值,Dev GridView组件OnCellValueChanged事件实现
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |