示例#1
0
 /// <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);
     }
 }