需求是在发货通知单明细中选择了物料和仓库之后自动带出默认仓位,我用一个自定义的表存物料、仓库和默认仓位对应关系,我用DataChanged事件判断是否是物料或者仓库,如果是看两个字段是否都有值,如果有值则从数据库中查出默认的仓位ID给仓位字段赋值,我用断点跟踪确实附上值了,但是就是不显示,也调用this.View.UpdateView("FEntity");方法了,具体代码如下
if (e.Key.ToUpper() == "FSTOCKID" && e.NewValue != null)
{
//分录中物料
DynamicObject Mate = this.View.Model.GetValue("FMATERIALID", e.Row) as DynamicObject;
if (Mate != null && e.NewValue != null)
{
string sql = string.Format("select F_DEV_FLEX from dev_t_Cust_MateStorEntry where F_DEV_MATE={0} and F_DEV_WAREHOUSE={1}", Mate["Id"].ToString(), e.NewValue.ToString());
DataSet ds = Kingdee.BOS.ServiceHelper.DBServiceHelper.ExecuteDataSet(this.Context, sql);
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
int StockLocID = Convert.ToInt32(ds.Tables[0].Rows[0]["F_DEV_FLEX"].ToString());
//this.View.InvokeFieldUpdateService("FSTOCKLOCID", e.Row);
this.View.Model.SetItemValueByID("FStockLocID", StockLocID, e.Row);
this.View.UpdateView("FEntity");
}
}
}
else if (e.Key.ToUpper() == "FMATERIALID" && e.NewValue != null)
{
//this.View.Model.SetItemValueByID("FStockID", 100525, e.Row);
//this.View.UpdateView("FEntity");
//分录中仓库
DynamicObject Storage = this.View.Model.GetValue("FSTOCKID", e.Row) as DynamicObject;
if (Storage != null)
{
string sql = string.Format("select F_DEV_FLEX from dev_t_Cust_MateStorEntry where F_DEV_MATE={0} and F_DEV_WAREHOUSE={1}", e.NewValue.ToString(), Storage["Id"].ToString());
DataSet ds = Kingdee.BOS.ServiceHelper.DBServiceHelper.ExecuteDataSet(this.Context, sql);
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
int StockLocID = Convert.ToInt32(ds.Tables[0].Rows[0]["F_DEV_FLEX"].ToString());
//this.View.InvokeFieldUpdateService("FSTOCKLOCID", e.Row);
this.View.Model.SetItemValueByID("FStockLocID", StockLocID, e.Row);
this.View.UpdateView("FEntity");
}
}
}
我不太清楚这个DataChanged事件是发生在值改变之前还是之后,我猜测的原因是如果是之前,那么我先选仓库、再选物料,仓库会被清空,所以肯定是先选物料再选仓库,选仓库触发事件的时候此时仓库还没有值,我付给仓位值没效果,我在触发物料改变的时候曾经在代码中给仓库先赋了值,那么给仓位赋值的时候仓库已经有值了,基于这个猜测,我在仓库值发生改变的时候先调用 this.View.UpdateView("FEntity");依然无效,请教一下总部同事,这个问题出在哪里。
另外再问个问题,选择了启用了仓位管理的仓库后仓位能否改成不必选?
推荐阅读