LookupEdit.EditValueChanged事件内给其它文本框赋值无效或变回原来的值

  LookupEdit.EditValueChanged事件内给其它文本框赋值无效或变回原来的值

C/S框架网|CSFramework.com|知识库文档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/S框架网|原创精神.创造价值.打造精品

扫一扫加微信:
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务

版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
发表评论

评论内容
昵称:
关联文章

LookupEdit.EditValueChanged事件其它文本框赋值无效原来
EditValueChanged事件另外文本框赋值,为什么事件本身赋不
LookupEdit关联更新其它文本输入框(自动带出参考数据并赋值
文本框输入,不离开焦点保存还是原来
关于LookupEdit组件选择一条纪录不触发EditValueChanged事件
C# 绑定数据源文本框.Text属性赋值,但没有保存数据
绑定数据源文本输入框TextEdit.TextEditValue属性赋值,失去焦点文本自动清空了
修改单元格关联更新其它,Dev GridView组件OnCellValueChanged事件实现
SetPropertyValue 对象属性赋值
新增记录时自动生成记录序号号码(单据号码)并填充文本框
LookupEdit组件数据源当前资料行某字段
LookUpEdit控件带用户良好操作体验
C#.NETDataTable日期类型赋值报错:所需类型是 MySqlDateTime,类型与列类型不匹配
C# DataGridView 自动新增记录当前单元格赋值
Dev表格RepositoryItemLookUpEdit组件改变时设置其它-原创
Application ThreadException 事件需要处理异常
通过.NET反射动态调用SetValue方法属性PropertyInfo赋值
VS编译错误:解决 Files "<<<<<<< HEAD"无效
通过反射技术创建窗体实例然后控件赋值(C#)
VS解决Files"<<<<<<< HEAD"无效。路径中具有非法字符。