/// <summary> /// Edits this instance. /// </summary> internal void Edit() { try { // save existing item id. OpcDa::Item[] modifiedItems; OpcDa.Item itemID = Tag.GetItem; using (ItemListEditDlg dial = new ItemListEditDlg()) { modifiedItems = dial.ShowDialog(new OpcDa.Item[] { itemID }, false, false); if (dial.DialogResult != DialogResult.OK || modifiedItems == null) { return; } } // modify an existing item. OpcDa::ItemResult[] resItems; if (itemID.Key == modifiedItems[0].Key) { resItems = Parent.ModifyItems(OpcDa::StateMask.All, modifiedItems); } else // add/remove item because the item id changed. { Parent.RemoveItem(itemID); resItems = Parent.AddItems(modifiedItems); } Text = resItems[0].ItemName; Tag.SetItemResult = resItems[0]; } catch (Exception exc) { MessageBox.Show(exc.Message); } AssignImageIndex(); }
/// <summary> /// Open a dialog to display and edit a list of the subscription item objects. /// </summary> internal void EditItems() { try { SubscriptionItems myItems = new SubscriptionItems(this); // edit the items. OpcDa::Item[] modifiedItems; using (ItemListEditDlg dial = new ItemListEditDlg()) { modifiedItems = dial.ShowDialog(myItems.Items, false, false); if (dial.DialogResult != DialogResult.OK || modifiedItems == null) { return; } } if (Tag != null) { // separate the items in lists depending on whether item id changed. ArrayList insertItems = new ArrayList(); ArrayList updateItems = new ArrayList(); ArrayList deleteItems = new ArrayList(); // save item ids to detect item id changes. Opc.ItemIdentifier[] itemIDs = myItems.CreateIdentifiers; for (int ii = 0; ii < itemIDs.Length; ii++) { if (modifiedItems[ii].Key != itemIDs[ii].Key) { insertItems.Add(modifiedItems[ii]); deleteItems.Add(itemIDs[ii]); } else { updateItems.Add(modifiedItems[ii]); } } Tag.SetResultFilters((int)OpcDa.ResultFilter.All); // delete old items. if (deleteItems.Count > 0) { Tag.RemoveItems((Opc.ItemIdentifier[])deleteItems.ToArray(typeof(Opc.ItemIdentifier))); } // update existing items. if (updateItems.Count > 0) { myItems.MatchChildren(Tag.ModifyItems((int)OpcDa::StateMask.All, (OpcDa::Item[])updateItems.ToArray(typeof(OpcDa::Item)))); } // insert new items. if (insertItems.Count > 0) { myItems.MatchChildren(Tag.AddItems((OpcDa::Item[])insertItems.ToArray(typeof(OpcDa::Item)))); } } } catch (Exception exp) { MessageBox.Show(exp.Message, "Edit Items", MessageBoxButtons.OK, MessageBoxIcon.Error); } }