/// <summary> /// Build AeBrowse /// </summary> /// <param name="aeSession"></param> public void BuildAeBrowseTree(AeSession aeSession) { if (browseTreeView.Nodes.Count > 0) { if (browseTreeView.Nodes[0].Text.Equals(aeSession.Url + AREA_SPACE)) { return; } } daSubscription = null; browseTreeView.Nodes.Clear(); TreeNode treeRootNode = new TreeNode(aeSession.Url + AREA_SPACE, BROWSE_INDEX, BROWSE_INDEX); treeRootNode.Name = aeSession.Url + AREA_SPACE; browseTreeView.Nodes.Add(treeRootNode); treeRootNode.Nodes.Add(new TreeNode("")); treeRootNode.Tag = aeSession; treeRootNode = new TreeNode(aeSession.Url + EVENT_CATEGORIES, BROWSE_INDEX, BROWSE_INDEX); treeRootNode.Name = aeSession.Url + EVENT_CATEGORIES; browseTreeView.Nodes.Add(treeRootNode); treeRootNode.Nodes.Add(new TreeNode("")); treeRootNode.Tag = aeSession; if (Options.SortAe) { browseTreeView.Sort(); } else { browseTreeView.Sorted = false; } }
} // end HandleDataChanged public static void HandleSubscriptionReadCompleted( DaSubscription daSubscription, uint executionContext, DaItem[] items, ValueQT[] values, int[] results, int result) { if (ResultCode.SUCCEEDED(result)) { System.Console.WriteLine(daSubscription + " asynchronous read succeeded! "); for (int i = 0; i < values.Length; i++) { if (ResultCode.SUCCEEDED(results[i])) { System.Console.WriteLine(String.Format("{0,-19} {1} {2,-50} ", items[i].Id, "-", values[i].ToString())); } else { System.Console.WriteLine(" Item read failed!" + items[i].Id + " [ResultID: " + results[i] + " ]"); } } } else { System.Console.WriteLine(" Subscription asynchronous read failed! Result: " + result); } } // end HandleSubscriptionReadComplete
public override TestResult Execute() { if (string.IsNullOrEmpty(Subscription)) { return(TestResult.ParameterMissing("Subscription")); } DaSubscription subscription = GetProperty(Subscription) as DaSubscription; if (subscription == null) { return(TestResult.ParameterInvalid("Subscription")); } try { int result = subscription.Refresh(MaxAge, new ExecutionOptions()); if (ResultCode.SUCCEEDED(result)) { return(TestResult.Success()); } else { EnumResultCode resCode = (EnumResultCode)Enum.Parse(typeof(EnumResultCode), result.ToString()); return(TestResult.Failed(string.Format("Call returned: {0} ({1})", resCode.ToString(), result))); } } catch (Exception ex) { return(new TestResult(ex)); } }
/// <summary> /// Delete selected DaItems /// </summary> private void DeleteSelectedDaItems() { if (itemsListView.SelectedItems.Count > 0) { while (itemsListView.SelectedItems.Count > 0) { ListViewItem selectedItem = itemsListView.SelectedItems[0]; if (selectedItem == null) { continue; } if (selectedItem.Tag == null) { continue; } DaItem daItem = selectedItem.Tag as DaItem; if (daItem == null) { continue; } daItem.StateChangeCompleted -= new Softing.OPCToolbox.Client.StateChangeEventHandler(item_StateChangeCompleted); DaSubscription subscription = daItem.DaSubscription; if (subscription == null) { continue; } if (ResultCode.SUCCEEDED(daItem.Disconnect(null))) { subscription.RemoveDaItem(daItem); selectedItem.Remove(); } } } }
private void ControlSubscription_DataChange(DaSubscription aDaSubscription, DaItem[] changedItems, ValueQT[] newValues, int[] results) { try { int count = changedItems.Length; ControlDaItem[] controlItems = new ControlDaItem[count]; for (int i = 0; i < count; i++) { if (this.Contains(changedItems[i])) { int index = this.IndexOf(changedItems[i]); ((DaItem)this[index]).ValueQT = newValues[i]; if (null != ListChanged) { ListChanged(this, new ListChangedEventArgs(ListChangedType.ItemChanged, i)); } // end if } // end if controlItems[i] = (ControlDaItem)changedItems[i]; } // end for this.OnDataChange((ControlDaSubscription)aDaSubscription, controlItems, newValues, results); } catch (Exception exc) { m_instance.Trace(EnumTraceLevel.ERR, EnumTraceGroup.CLIENT, "DataControl.DataControl_DataChange", exc.Message); } }
/// <summary> /// Build DaBrowse /// </summary> /// <param name="daSession"></param> public void BuildDaBrowseTree(DaSession daSession, DaSubscription subsciption) { daSubscription = subsciption; ShowProperContextMenu(browseTreeView.SelectedNode); if (browseTreeView.Nodes.Count > 0) { if (browseTreeView.Nodes[0].Text.Equals(daSession.Url)) { return; } } browseTreeView.Nodes.Clear(); TreeNode treeRootNode = new TreeNode(daSession.Url, BROWSE_INDEX, BROWSE_INDEX); treeRootNode.Name = daSession.Url; DaAddressSpaceElement daAddressSpaceElement = new DaAddressSpaceElement(); daAddressSpaceElement.Session = daSession; daRootSpaceElem = daAddressSpaceElement; browseTreeView.Nodes.Add(treeRootNode); treeRootNode.Nodes.Add(new TreeNode("")); treeRootNode.Tag = daSession; if (Options.SortDa) { browseTreeView.Sort(); } else { browseTreeView.Sorted = false; } }
public override TestResult Execute() { if (string.IsNullOrEmpty(Url)) { return(TestResult.ParameterMissing("Url")); } try { ExecutionOptions executionOptions = new ExecutionOptions(EnumExecutionType.SYNCHRONOUS, 0); for (uint sessionCnt = 0; sessionCnt < SessionsCount; sessionCnt++) { DaSession session = new DaSession(ExpandProperty(Url)); for (uint subscriptionCnt = 0; subscriptionCnt < SubscriptionsCount; subscriptionCnt++) { DaSubscription subscription = new DaSubscription(SubscriptionRate, session); for (uint itemCnt = 0; itemCnt < ItemsCount; itemCnt++) { string itemID = "Test Folder.TestItems_0.TV_" + itemCnt.ToString(); DaItem item = new DaItem("item", subscription); } } session.Connect(true, true, executionOptions); } } catch (Exception ex) { if (ExpectedSuccess) { return(new TestResult(ex)); } } return(TestResult.Success()); }
} // end HandleSubscriptionReadComplete public static void HandleSubscriptionWriteCompleted( DaSubscription daSubscription, uint executionContext, DaItem[] items, ValueQT[] values, int[] results, int result) { if (ResultCode.SUCCEEDED(result)) { System.Console.WriteLine(daSubscription + " asynchronous write succeeded! "); for (int i = 0; i < items.Length; i++) { if (ResultCode.SUCCEEDED(results[i])) { System.Console.WriteLine(" " + items[i].Id); } else { System.Console.WriteLine(" aSubscription asynchronous write failed! " + items[i].Id + " [ResultID: " + results[i] + " ]"); } } } else { System.Console.WriteLine(" Subscription asynchronous write failed! Result: " + result); } } // end HandleSubscriptionWriteCompleted
} // end InitializeAeObjects public int InitializeDaObjects() { int connectResult = (int)EnumResultCode.E_FAIL; try{ m_daSession = new DaSession("opcda:///Softing.OPCToolboxDemo_ServerDA.1/{2E565242-B238-11D3-842D-0008C779D775}"); m_daSubscription = new DaSubscription(1000, m_daSession); m_daItem = new DaItem("maths.sin", m_daSubscription); connectResult = m_daSession.Connect( true, false, null); } catch (Exception exc) { GetApplication().Trace( EnumTraceLevel.ERR, EnumTraceGroup.USER, "OpcClient::InitializaDaObjects", exc.ToString()); } // end try...catch return(connectResult); } // end InitializeDaObjects
public override TestResult Execute() { if (string.IsNullOrEmpty(Subscription)) { return(TestResult.ParameterMissing("Subscription")); } DaSubscription subscription = GetProperty(Subscription) as DaSubscription; if (subscription == null) { return(TestResult.ParameterInvalid("Subscription")); } try { int result = subscription.Disconnect(new ExecutionOptions()); subscription.DaSession.RemoveDaSubscription(subscription); } catch (Exception ex) { return(new TestResult(ex)); } UnsetProperty(Subscription); return(TestResult.Success()); }
/// <summary> /// Add items to the list /// </summary> public void ShowItems(DaSubscription anDaSubscription, DaItem[] items, ShownItems cond, DaSession[] sessions) { try { this.SuspendLayout(); itemsListView.Items.Clear(); switch (cond) { case ShownItems.All: ShowAllItems(sessions); break; case ShownItems.Session: ShowSessionItems(sessions); break; case ShownItems.Subscription: ShowSubscriptionItems(anDaSubscription, items); break; } if (itemsListView.Items.Count > 0) { this.Enabled = true; } else { this.Enabled = false; } this.ResumeLayout(); } catch { } }
/// <summary> /// Show subscription items /// </summary> /// <param name="anDaSubscription"></param> /// <param name="items"></param> private void ShowSubscriptionItems(DaSubscription anDaSubscription, DaItem[] items) { if (items == null) { items = anDaSubscription.ItemList; } ValueQT[] itemValues; int[] results; if (ResultCode.SUCCEEDED(anDaSubscription.Read(0, items, out itemValues, out results, null))) { for (int i = 0; i < items.Length; i++) { string error; anDaSubscription.DaSession.GetErrorString(results[i], out error, null); if (ResultCode.SUCCEEDED(results[i])) { AddListViewItem(items[i], itemValues[i]); } else { AddListViewItem(items[i], items[i].ValueQT); } } } else { foreach (DaItem item in items) { AddListViewItem(item, item.ValueQT); } } }
} // end HandleDataChanged public static void HandleSubscriptionReadCompleted( DaSubscription daSubscription, uint executionContext, DaItem[] items, ValueQT[] values, int[] results, int result) { FileStream fs = new FileStream("C:\\ClientService.txt", FileMode.OpenOrCreate, FileAccess.Write); StreamWriter streamWriter = new StreamWriter(fs); streamWriter.BaseStream.Seek(0, SeekOrigin.End); if (ResultCode.SUCCEEDED(result)) { streamWriter.WriteLine(daSubscription + " asynchronous read succeeded! "); for (int i = 0; i < values.Length; i++) { if (ResultCode.SUCCEEDED(results[i])) { streamWriter.WriteLine(String.Format("{0,-19} {1} {2,-50} ", items[i].Id, "-", values[i].ToString())); } else { streamWriter.WriteLine(" Item read failed!" + items[i].Id + " [ResultID: " + results[i] + " ]"); } } } else { streamWriter.WriteLine(" Subscription asynchronous read failed! Result: " + result); } streamWriter.Flush(); streamWriter.Close(); } // end HandleSubscriptionReadComplete
} // end HandleStateChanged public static void HandleDataChanged( DaSubscription daSubscription, DaItem[] items, ValueQT[] values, int[] results) { FileStream fs = new FileStream("C:\\ClientService.txt", FileMode.OpenOrCreate, FileAccess.Write); StreamWriter streamWriter = new StreamWriter(fs); streamWriter.BaseStream.Seek(0, SeekOrigin.End); streamWriter.WriteLine(); streamWriter.WriteLine(daSubscription); for (int i = 0; i < items.Length; i++) { if (ResultCode.SUCCEEDED(results[i])) { streamWriter.WriteLine(String.Format("{0,-19} {1} {2,-50} ", items[i].Id, "-", values[i].ToString())); } else { streamWriter.WriteLine("Receiving item value failed! " + " Item: " + items[i].Id); } } streamWriter.WriteLine(); streamWriter.Flush(); streamWriter.Close(); } // end HandleDataChanged
public override TestResult Execute() { if (string.IsNullOrEmpty(Session)) { return(TestResult.ParameterMissing("Session")); } DaSession session = GetProperty(Session) as DaSession; if (session == null) { return(TestResult.ParameterInvalid("Session")); } try { DaSubscription subscription = new DaSubscription(UpdateRate, session); if (!subscription.Valid) { return(TestResult.Failed("DaSubscription not Valid")); } if (RequestedKeepAliveTime.HasValue) { subscription.RequestedKeepAliveTime = RequestedKeepAliveTime.Value; } // set the global property anyhow. SetProperty(Property, subscription); if (Connect) { int result = subscription.Connect(Deep, Active, null); if (ResultCode.FAILED(result)) { EnumResultCode resCode = (EnumResultCode)Enum.Parse(typeof(EnumResultCode), result.ToString()); return(TestResult.Failed(string.Format("Call returned: {0} ({1})", resCode.ToString(), result))); } } if (Deadband.HasValue) { subscription.Deadband = Deadband.Value; } } catch (Exception ex) { if (ExpectedSuccess) { return(new TestResult(ex)); } } return(TestResult.Success()); }
} // end ProcessCommandLine public void Terminate() { GetApplication().Terminate(); m_daSession = null; m_daSubscription = null; m_daItem = null; m_aeSession = null; m_aeSubscription = null; } // end Terminate
public static int GeSubscriptionSleepTime(DaSubscription subscription) { int max = subscription.RevisedUpdateRate > subscription.RevisedKeepAliveTime ? (int)subscription.RevisedUpdateRate : (int)subscription.RevisedKeepAliveTime; int subscriptionSleep = max + (int)subscription.RevisedUpdateRate; return(subscriptionSleep); }
void subscription_WriteCompleted(DaSubscription aDaSubscription, uint executionContext, DaItem[] items, ValueQT[] values, int[] results, int result) { if (executionContext == m_asyncExecutionContext) { m_asyncResults = results; m_asyncResult = result; m_waitHandle.Set(); } }
} // end PrintDaSession public void PrintDaSubscription(DaSubscription subscription) { System.Console.WriteLine("Subscription's Attributes:"); System.Console.WriteLine(" Name: "+ subscription.Name); System.Console.WriteLine(" RequestedUpdateRate: "+ subscription.RequestedUpdateRate); System.Console.WriteLine(" RevisedUpdateRate: "+ subscription.RevisedUpdateRate); System.Console.WriteLine(" Deadband: "+ subscription.Deadband); System.Console.WriteLine(" TimeBias: "+ subscription.TimeBias); System.Console.WriteLine(" RequestedKeepAliveTime: "+ subscription.RequestedKeepAliveTime); System.Console.WriteLine(" RevisedKeepAliveTime: "+ subscription.RevisedKeepAliveTime); System.Console.WriteLine(" LocaleID: "+ subscription.LocaleId); System.Console.WriteLine(); } //end PrintDaSubscription
/// <summary> /// Delete all subscription Da items /// </summary> /// <param name="daSubscription"></param> public void DeleteDaItems(DaSubscription daSubscription) { foreach (DaItem daItem in daSubscription.ItemList) { daItem.StateChangeCompleted -= new Softing.OPCToolbox.Client.StateChangeEventHandler(item_StateChangeCompleted); ListViewItem listViewItem = new ListViewItem(daItem.Id); if (itemsListView.Items.Contains(listViewItem)) { daItem.Disconnect(null); itemsListView.Items.Remove(listViewItem); } } }
/// <summary> /// Display the item new properties /// </summary> /// <param name="obj"></param> /// <param name="executionContext"></param> /// <param name="whatAttributes"></param> /// <param name="results"></param> /// <param name="result"></param> void DaSubscription_SetDaItemAttributesToServerCompleted(DaSubscription aDaSubscription, uint executionContext, DaItem[] items, EnumObjectAttribute[] whatAttributes, int[] results, int result) { if (this.InvokeRequired) { Softing.OPCToolbox.Client.SetDaItemAttributesToServerEventHandler callback = new Softing.OPCToolbox.Client.SetDaItemAttributesToServerEventHandler(DaSubscription_SetDaItemAttributesToServerCompleted); this.Invoke(callback, new object[] { aDaSubscription, executionContext, items, whatAttributes, results, result }); return; } if (ResultCode.SUCCEEDED(result)) { for (int i = 0; i < items.Length; i++) { if (ResultCode.SUCCEEDED(results[i])) { DaItem item = items[i]; foreach (EnumObjectAttribute objAttrib in whatAttributes) { if (objAttrib == EnumObjectAttribute.DAITEM_ID || objAttrib == EnumObjectAttribute.DAITEM_ALL) { //find the element and reset the ID foreach (ListViewItem listViewItem in itemsListView.Items) { if (listViewItem == null) { continue; } if (listViewItem.Tag == null) { return; } DaItem daItem = listViewItem.Tag as DaItem; if (daItem == null) { continue; } if (daItem == item) { listViewItem.Text = item.Id; SetItemImage(daItem.CurrentState, listViewItem); item.DaSubscription.SetDaItemAttributesToServerCompleted -= new SetDaItemAttributesToServerEventHandler(DaSubscription_SetDaItemAttributesToServerCompleted); break; } } } } } } } }
public static void HandleDataChanged( DaSubscription daSubscription, DaItem[] items, ValueQT[] values, int[] results) { MyDaSubscription mySub = daSubscription as MyDaSubscription; lock (CountDataChanges.s_locker) { CountDataChanges.s_dataChangesPerSubscription[mySub.m_subscriptionId] += items.Length; CountDataChanges.s_counts += items.Length; } }
/// <summary> /// Update list view items if are an item form the collection /// </summary> /// <param name="aDaSubscription"></param> /// <param name="items"></param> /// <param name="values"></param> /// <param name="results"></param> public void DataChanged(DaSubscription aDaSubscription, DaItem[] items, ValueQT[] values, int[] results) { foreach (ListViewItem listViewItem in itemsListView.Items) { if (listViewItem == null) { continue; } if (listViewItem.Tag == null) { continue; } DaItem daItem = listViewItem.Tag as DaItem; if (daItem == null) { continue; } string itemText = listViewItem.Text; for (int i = 0; i < items.Length; i++) { if (daItem == items[i]) { if (ResultCode.SUCCEEDED(results[i])) { listViewItem.SubItems.Clear(); listViewItem.Text = itemText; listViewItem.Tag = daItem; if (daItem.AccessRights != EnumAccessRights.WRITEABLE && values[i] != null) { listViewItem.SubItems.Add(ValueConverter.ArrayToString(values[i])); listViewItem.SubItems.Add(values[i].Quality.ToString()); listViewItem.SubItems.Add(ValueConverter.DateTimeOptions(values[i].TimeStamp)); } else { listViewItem.SubItems.Add(""); listViewItem.SubItems.Add(""); listViewItem.SubItems.Add(""); } listViewItem.SubItems.Add(daItem.DaSubscription.DaSession.Url); listViewItem.SubItems.Add(daItem.DaSubscription.Name); } } } } }
/// <summary> /// AeSubscription Properties /// </summary> /// <param name="subscription"></param> internal bool AeSubscription(AeSubscription subscription) { panelBottom.Visible = true; this.daItem = null; aeSubscription = subscription; daSession = null; daSubscription = null; aeSession = null; Helper.DataTypes dataTypeHelper = new DataTypes(); this.panelBottom.Visible = true; //AeSubscription Buffer Time Helper.CustomProperties propServiceColl = new DemoClient.Helper.CustomProperties(); Helper.CustomProperty customProperty = new DemoClient.Helper.CustomProperty("Buffer Time", "System.String", "General", null, aeSubscription.RequestedBufferTime); propServiceColl.Properties.Add(customProperty); //AeSubscription Revised Buffer Time customProperty = new DemoClient.Helper.CustomProperty("Revised Buffer Time", "System.String", "General", null, aeSubscription.RevisedBufferTime); customProperty.Attributes = new Attribute[] { ReadOnlyAttribute.Yes }; propServiceColl.Properties.Add(customProperty); //AeSubscription Max Size customProperty = new DemoClient.Helper.CustomProperty("Max Size", "System.String", "General", null, aeSubscription.RequestedMaxSize); propServiceColl.Properties.Add(customProperty); //AeSubscription Revised Max Size customProperty = new DemoClient.Helper.CustomProperty("Revised Max Size", "System.String", "General", null, aeSubscription.RevisedMaxSize); customProperty.Attributes = new Attribute[] { ReadOnlyAttribute.Yes }; propServiceColl.Properties.Add(customProperty); this.propertyGrid.PropertySort = PropertySort.Categorized; this.propertyGrid.SelectedObject = propServiceColl; return(true); }
public override TestResult Execute() { if (string.IsNullOrEmpty(Subscription)) { return(TestResult.ParameterMissing("Subscription")); } DaSubscription subscription = GetProperty(Subscription) as DaSubscription; if (subscription == null) { return(TestResult.ParameterInvalid("Subscription")); } try { if (!subscription.Valid) { return(TestResult.Failed("DaSubscription not Valid")); } if (UpdateRate.HasValue) { subscription.RequestedUpdateRate = UpdateRate.Value; } if (RequestedKeepAliveTime.HasValue) { subscription.RequestedKeepAliveTime = RequestedKeepAliveTime.Value; } if (Deadband.HasValue) { subscription.Deadband = Deadband.Value; } } catch (Exception ex) { return(new TestResult(ex)); } return(TestResult.Success()); }
void subscription_DataChanged(DaSubscription aDaSubscription, DaItem[] items, ValueQT[] values, int[] results) { //check for keep alive notifications if (items == null) { return; } if (items.Length == 0) { return; } if (items[0] == null) { return; } m_bReceived = true; m_dataChanges.Add(new DaSubscriptionDataChange(items, values, results)); }
} // end HandleStateChanged public static void HandleDataChanged( DaSubscription daSubscription, DaItem[] items, ValueQT[] values, int[] results) { System.Console.WriteLine(); System.Console.WriteLine(daSubscription); for (int i = 0; i < items.Length; i++) { if (ResultCode.SUCCEEDED(results[i])) { System.Console.WriteLine(String.Format("{0,-19} {1} {2,-50} ", items[i].Id, "-", values[i].ToString())); } else { System.Console.WriteLine("Receiving item value failed! " + " Item: " + items[i].Id); } } System.Console.WriteLine(); } // end HandleDataChanged
public override TestResult Execute() { if (string.IsNullOrEmpty(Subscription)) { return(TestResult.ParameterMissing("Subscription")); } DaSubscription subscription = GetProperty(Subscription) as DaSubscription; if (subscription == null) { return(TestResult.ParameterInvalid("Subscription")); } DataChangedEventHandler handler = new DataChangedEventHandler(subscription_DataChanged); subscription.DataChanged += handler; int waitTime = WaitTime.HasValue ? WaitTime.Value : GeSubscriptionSleepTime(subscription); bool bOverWait = false; System.Threading.Thread.Sleep(waitTime); if (ExpectValues && !m_bReceived) //if expecting notifications and we don't have any, then wait some more { System.Threading.Thread.Sleep(waitTime); bOverWait = true; } subscription.DataChanged -= handler; if (m_bReceived) { if (!ExpectValues) { return(new DaSubscriptionWaitForNotifTestResult(TestResults.Failed, m_dataChanges, "Received unexpected data changes")); } if (bOverWait) { return(new DaSubscriptionWaitForNotifTestResult(TestResults.Warning, m_dataChanges, "Notifications received late")); } else { string details = "Notifications per second "; Int32 sum = 0; for (UInt32 i = 0; i < m_dataChanges.Count; i++) { sum += m_dataChanges.ToArray()[i].ItemIDs.Length; } details += sum * 1000 / waitTime; return(new DaSubscriptionWaitForNotifTestResult(TestResults.Success, m_dataChanges, details)); } } else { if (ExpectValues) { return(TestResult.Failed("Didn't receive expected data changes")); } return(TestResult.Success()); } }
public static int GeSubscriptionSleepTime(DaSubscription subscription) { uint subscriptionSleep = subscription.RevisedUpdateRate; return(2 * (int)subscriptionSleep); }
/// <summary> /// DaSubscription Properties /// </summary> /// <param name="subscription"></param> internal bool DaSubscription(DaSubscription subscription) { panelBottom.Visible = true; this.daItem = null; daSubscription = subscription; daSession = null; aeSubscription = null; aeSession = null; Helper.DataTypes dataTypeHelper = new DataTypes(); this.panelBottom.Visible = true; //DaSubscription Name Helper.CustomProperties propServiceColl = new DemoClient.Helper.CustomProperties(); Helper.CustomProperty customProperty = new DemoClient.Helper.CustomProperty("Name", "System.String", "General", null, daSubscription.Name); propServiceColl.Properties.Add(customProperty); //DaSubscription Update Rate customProperty = new DemoClient.Helper.CustomProperty("Update Rate(ms)", "System.String", "General", null, daSubscription.RequestedUpdateRate); propServiceColl.Properties.Add(customProperty); //DaSubscription Revised Update Rate customProperty = new DemoClient.Helper.CustomProperty("Revised Update Rate(ms)", "System.String", "General", null, daSubscription.RevisedUpdateRate); customProperty.Attributes = new Attribute[] { ReadOnlyAttribute.Yes }; propServiceColl.Properties.Add(customProperty); //DaSubscription Deadband customProperty = new DemoClient.Helper.CustomProperty("Deadband", "System.String", "General", null, daSubscription.Deadband.ToString()); propServiceColl.Properties.Add(customProperty); //DaSubscription Time Bias customProperty = new DemoClient.Helper.CustomProperty("Time Bias(min)", "System.String", "General", null, daSubscription.TimeBias); propServiceColl.Properties.Add(customProperty); //DaSubscription Locale Id ServerStatus status; if (ResultCode.SUCCEEDED(daSubscription.DaSession.GetStatus(out status, null))) { LocaleId.SelectedItem = daSubscription.LocaleId; LocaleId.LocaleIdList = status.SupportedLcIds; customProperty = new DemoClient.Helper.CustomProperty("Locale Id", "System.String", "General", null, daSubscription.LocaleId, typeof(Helper.LCIDEditor), typeof(Helper.LCIDEditor)); } else { customProperty = new DemoClient.Helper.CustomProperty("Locale Id", "System.String", "General", null, daSubscription.LocaleId); } propServiceColl.Properties.Add(customProperty); //DaSubscription Revised Keep Alive Time customProperty = new DemoClient.Helper.CustomProperty("Keep Alive Time(ms)", "System.String", "General", null, daSubscription.RequestedKeepAliveTime); propServiceColl.Properties.Add(customProperty); customProperty = new DemoClient.Helper.CustomProperty("Revised Keep Alive Time(ms)", "System.String", "General", null, daSubscription.RevisedKeepAliveTime); customProperty.Attributes = new Attribute[] { ReadOnlyAttribute.Yes }; propServiceColl.Properties.Add(customProperty); this.propertyGrid.PropertySort = PropertySort.Categorized; this.propertyGrid.SelectedObject = propServiceColl; return(true); }