/// <summary> /// 将医嘱从老位置移动到新位置 /// </summary> /// <param name="oldIndex"></param> /// <param name="newIndex"></param> internal void MoveOrder(int oldIndex, int newIndex) { if ((oldIndex < 0) || (oldIndex >= Orders.Count)) { throw new ArgumentOutOfRangeException(ConstMessages.ExceptionOrginalOrderNotFind); } if ((newIndex < -1) || (newIndex > Orders.Count)) { throw new ArgumentOutOfRangeException(ConstMessages.ExceptionOutOfListRange); } if (oldIndex == newIndex) { return; } // 移动的方法是先从原列表中移除记录,然后插入到新位置 // 向下移动时,检查新位置是否是草药汇总信息,如果是的话,则要跳过,以保证草药明细和汇总信息在一起 if (oldIndex < newIndex) { TextOrderContent textContent = Orders[newIndex].Content as TextOrderContent; if ((textContent != null) && (textContent.IsSummaryOfHerbDetail)) { newIndex++; } } Order temp = Orders[oldIndex]; m_IsEditing = true; Orders.OrderList.Remove(temp); if (newIndex >= Orders.Count) // 在列表末尾插入 { AddOrder(temp); } else { Orders.OrderList.Insert(newIndex, temp); } temp.HadSync = false; m_IsEditing = false; FireListChanged(new ListChangedEventArgs(ListChangedType.ItemMoved, newIndex, oldIndex)); }
/// <summary> /// 展开指定位置医嘱关联的草药明细 /// </summary> /// <param name="index"></param> public void ExpandHerbDetail(int index) { // 应该在索引范围内 if ((index < 0) || (index >= Count)) { throw new IndexOutOfRangeException(); } TextOrderContent textContent = this[index].OrderCache.Content as TextOrderContent; // 应该是草药的汇总信息 // 将关联序号插入可显示的列表,重新生成list if ((textContent != null) && (textContent.IsSummaryOfHerbDetail)) { if (!m_GroupSerialNoOfExpandedHerbs.Contains(textContent.GroupSerialNoOfLinkedHerbs)) { m_GroupSerialNoOfExpandedHerbs.Add(textContent.GroupSerialNoOfLinkedHerbs); } FireViewListChanged(new ListChangedEventArgs(ListChangedType.Reset, -1)); } }