单据体行如何实现跳转到指定行
注:参照此思路可以实现上移下移功能
实现方式:
1:单据体新增一个序号字段:1):要与标准序号字段区分开。2):用于用户输入当前行需要调整到位置(简单来说就是将当前行位置移动到自己想要的位置)
2:代码编写新增序号字段值更新事件
/// <summary>
/// 将当前行移动到指定行
/// </summary>
/// <param name="entityKey">单据体标识</param>
/// <param name="rowIndex">当前行号</param>
private void DoUp(string entityKey, int rowIndex)
{
Entity entity = this.Model.BillBusinessInfo.GetEntity(entityKey);
DynamicObjectCollection rows = this.Model.GetEntityDataObject(entity);
DynamicObject currRow = rows[rowIndex];
//获取序号
int FSEQ = Convert.ToInt32(currRow["FHWSEQ"]);
if (rowIndex < 0 || rowIndex >= rows.Count|| FSEQ<=0|| FSEQ> rows.Count)
{
this.View.ShowMessage("行号不合理,不支持上移!");
return; // 行号不合理,退出
}
if (rowIndex == 0)
{
this.View.ShowMessage("已经是第一行,不能上移!");
return;
}
// 从行集合中,删除当前行
rows.Remove(currRow);
// 再把此行,插入到上一行的位置上
rows.Insert(FSEQ - 1, currRow);
// 更新行序号
UpdateSEQ(rows, FSEQ, entity);
//if (entity.SeqDynamicProperty != null)
//{
// entity.SeqDynamicProperty.SetValue(rows[FSEQ - 1], FSEQ);
// entity.SeqDynamicProperty.SetValue(rows[FSEQ], FSEQ + 1);
//}
// 刷新界面上的表格数据
this.View.UpdateView(entityKey);
//指定焦点行可有效减少页面渲染加载
this.View.SetEntityFocusRow("FEntity", FSEQ-1);
}
/// <summary>
/// 上移更新行序号
/// </summary>
/// <param name="rows"></param>
/// <param name="fSEQ"></param>
private void UpdateSEQ(DynamicObjectCollection rows, int FSEQ, Entity entity)
{
//entity.SeqDynamicProperty.SetValue(rows[FSEQ], FSEQ + 1);
for (int i= FSEQ;i<rows.Count+1;i++)
{
entity.SeqDynamicProperty.SetValue(rows[i - 1], i);
}
}
/// <summary>
/// 下移更新行序号
/// </summary>
/// <param name="rows"></param>
/// <param name="fSEQ"></param>
private void UpdateSEQ2(DynamicObjectCollection rows, int FSEQ, Entity entity)
{
//entity.SeqDynamicProperty.SetValue(rows[FSEQ], FSEQ + 1);
for (int i = 0; i < FSEQ ; i++)
{
entity.SeqDynamicProperty.SetValue(rows[i], i+1);
}
}
/// <summary>
/// 下移
/// </summary>
/// <param name="entityKey">单据体标识</param>
/// <param name="rowIndex">当前行号</param>
private void DoDown(string entityKey, int rowIndex)
{
Entity entity = this.Model.BillBusinessInfo.GetEntity(entityKey);
DynamicObjectCollection rows = this.Model.GetEntityDataObject(entity);
DynamicObject currRow = rows[rowIndex];
//获取序号
int FSEQ = Convert.ToInt32(currRow["FHWSEQ"]);
if (rowIndex < 0 || rowIndex >= rows.Count|| FSEQ<=0|| FSEQ> rows.Count)
{
this.View.ShowMessage("行号不合理,不支持下移!");
return; // 行号不合理,退出
}
if (rowIndex == rows.Count - 1|| FSEQ>rows.Count)
{
this.View.ShowMessage("已经是最后一行,不能下移!");
return;
}
// 从行集合中,删除当前行
rows.Remove(currRow);
// 再把此行,插入到下一行的位置上
rows.Insert(FSEQ - 1, currRow);
// 更新行序号
UpdateSEQ2(rows, FSEQ, entity);
//if (entity.SeqDynamicProperty != null)
//{
// entity.SeqDynamicProperty.SetValue(rows[rowIndex], rowIndex + 1);
// entity.SeqDynamicProperty.SetValue(rows[rowIndex + 1], rowIndex + 2);
//}
// 刷新界面上的表格数据
this.View.UpdateView(entityKey);
//指定焦点行可有效减少页面渲染加载
this.View.SetEntityFocusRow("FEntity", FSEQ-1);
}
推荐阅读