Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Another C# Array of objects question

Posted on 2006-10-29
8
Medium Priority
?
334 Views
Last Modified: 2008-02-01

I'm having trouble accessing array list members contained within a class.  First here is the class:

using System;
using System.Collections;

namespace Inhallation
{
      /// <summary>
      /// Summary description for clsChamberInfo.
      /// </summary>
      public class clsChamberInfo
      {

            
            public int ChamberID;
            public bool Active;
            public string ChamberTitle;
            public ArrayList arAlarmInfo = new ArrayList();
            public ArrayList arDataCapture = new ArrayList();
            public ArrayList arLastData = new ArrayList();
            public ArrayList arNewData = new ArrayList();



            public clsChamberInfo()
            {
                  //
                  // TODO: Add constructor logic here
                  //
            }

            public clsChamberInfo(int chamberid, bool active, string chambertitle, ArrayList [] aralarms)
            {
                  this.ChamberID = chamberid;
                  this.Active = active;
                  this.ChamberTitle = chambertitle;
                        
            }

            public void AddAlarm( string alarmname,string uom,int alarmid,decimal lowvalue,decimal highvalue,bool active,int recordid,decimal highwarning,decimal lowwarning, decimal x2, decimal x, decimal constant, int linear, int equationtype, int calculationtype, int displaydecimals, bool activewarning)
            {
                  this.arAlarmInfo.Add( new clsExposureAlarmInfo(alarmname,uom,alarmid,lowvalue,highvalue,active,recordid,highwarning,lowwarning,x2,x,constant,linear,  equationtype, calculationtype, displaydecimals,  activewarning));
            }

            public void AddData( DateTime runtime, int runnum, int startnum, int positionid, int alarmid, decimal parmvalue, int studyid, int sessionid, int exposurerun, bool inexposure)
            {
                  this.arNewData.Add( new clsExposureData(runtime,runnum,startnum,positionid, alarmid,parmvalue, studyid, sessionid, exposurerun));
            }

            public void CopyData()
            {
                  this.arLastData.Clear();
                  this.arLastData.Add(arNewData);

            }

            public void AppendToDataCapture()
            {
                  this.arDataCapture.Add(arNewData);

            }

            public void ClearNewData()
            {
                  this.CopyData();
                  this.arNewData.Clear();
            }



            public override string ToString()
            {
                  return this.ChamberTitle;
            }
      }
}


From my main program, I want to access the members of the arNewData ArrayList.   Here is a function that I am stuck on :

            private void PlotData()
            {
                  for( int i = 0; i<arChamberInfo.Count; i++)
                  {
                        switch(i)
                        {
                              case 0:
                                    waveformGraph1.PlotYAppend( ((clsChamberInfo) arChamberInfo[i]).<-------Stuck here
                        }
                  }
                  waveformGraph1.PlotYAppend(newPos,2);

            }

arChamberInfo is an ArrayList of clsChamberInfo objects.  I want to get to the arChamberInfo[i].arNewData members, like arChamberInfo[i].arNewData[0].  Thanks for your quick help.  I'll be checking back frequently in you need more clarification.  Thanks.
0
Comment
Question by:jvalescu
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
8 Comments
 

Author Comment

by:jvalescu
ID: 17831515
By the way, the ArrayList arNewData is an array of this class, clsExposureData:

using System;
using System.Collections;


namespace Inhallation
{
      /// <summary>
      /// Summary description for clsExposureData.
      /// </summary>
      public class clsExposureData
      {
            DateTime RunTime = DateTime.Now;
            int RunNum = 0;
            int StartNum = 0;
            int PositionID = 0;
            int AlarmID = 0;
            decimal ParmValue = 0;
            int StudyID = 0;
            int SessionID = 0;

            public clsExposureData()
            {
                  //
                  // TODO: Add constructor logic here
                  //
            }

            public clsExposureData( DateTime runtime, int runnum, int startnum, int positionid, int alarmid, decimal parmvalue, int studyid, int sessionid, int exposurerun)
            {
                  this.RunTime = runtime;
                  this.RunNum = runnum;
                  this.StartNum = startnum;
                  this.PositionID = positionid;
                  this.AlarmID = alarmid;
                  this.ParmValue = parmvalue;
                  this.StudyID = studyid;
                  this.SessionID = sessionid;

            }
      }
}
0
 
LVL 7

Expert Comment

by:whatsit2002
ID: 17831525
Please let me know if you have you tried the following.

 waveformGraph1.PlotYAppend(((clsChamberInfo) arChamberInfo[i]).arNewData[0]);

If that works and your question is about how to loop through the second collection, try this:

               for( int i = 0; i<arChamberInfo.Count; i++)
               {
                    switch(i)
                    {
                         case 0:
                              ArrayList al = ((clsChamberInfo) arChamberInfo[i]).arNewData;
                              for (int j=0; j<al.Count; j++)
                              {
                                 waveformGraph1.PlotYAppend(al[j]);
                              }
                    }
               }
               waveformGraph1.PlotYAppend(newPos,2);


Thanks.

Jason
0
 

Author Comment

by:jvalescu
ID: 17831655
Jason,

   Thanks for the quick response.  The line, waveformGraph1.PlotYAppend( ((clsChamberInfo) arChamberInfo[i]).arNewData[0]);, compiles fine, but doesn't work.  PlotYAppend is expecting a double for its parameter.  Second, arNewData[0] would be pointing to the first element of that array of clsExposure Data objects.  I'm interested in getting to the clsExposureData.parmvalue property.  Also, when I tried the loop you made, al[j] does not give me access to clsExposureData properties.  Am I confusing things even more?  I'll be standing by.................

0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 7

Expert Comment

by:whatsit2002
ID: 17831710
I see. So you need to do some type casting, it looks like. I presume you are using .NET 1.1 (visual studio 2003) and not 2.0 (visual studio 2005), right? If you were using .NET 2.0, you could simply use a generic list which would make this much, much simpler.

However, on the assumption that you must use ArrayLists, try this, please:

for(int i = 0; i< arChamberInfo.Count; i++)
{
   clsChamberInfo ci = (clsChamberInfo)arChamberInfo[i];
   for (int j = 0; j < ci.Count; j++)
   {
      clsExposureData ed = (clsExposureData)ci.arNewData[j];
      decimal val = ed.parmvalue;
      waveformGraph1.PlotYAppend(val);
   }
}

Also, please make sure that your clsExposureData class has a public property called "paramvalue" because otherwise, you will get a compile error.

Thanks.

Jason
0
 
LVL 30

Accepted Solution

by:
anarki_jimbel earned 400 total points
ID: 17831733
Try that.
If you need to pass a ParmValue to you method you need to :

1. In the clsExposureData class make ParmValue a public property. Really the better way to do that is (unlike your approach)

        private double parmval;

        public double ParmValue
        {
            get{return parmval;}
            set{parmval = value;}
        }

2. Argument to pass: ((clsChamberInfo) arChamberInfo[i]).arNewData[0].ParmValue
0
 

Author Comment

by:jvalescu
ID: 17833551
OK, based on what you've both told me, I've modified my clsExposureData to make each variable a property.  However, I still cannot address it directly.  The class is listed at the bottom of this message.  From my main program, I am trying to get the value, ParmValue, but once I get to here:

decimal pv = ((clsChamberInfo) arChamberInfo[i]).arNewData[0]. <-----  

None of the properties are showing up.  Let me know what else I can do.  Also, Jason, you mentioned "if you must use Array Lists", is there a better way?  If needed, I'll create another so you can get more points.

Thanks.
0
 

Author Comment

by:jvalescu
ID: 17834284
Forgot to list the update class:

using System;
using System.Collections;


namespace Inhallation
{
      /// <summary>
      /// Summary description for clsExposureData.
      /// </summary>
      public class clsExposureData
      {
            private DateTime runtime = DateTime.Now;
            private int runnum = 0;
            private int startnum = 0;
            private int positionid = 0;
            private int alarmid = 0;
            decimal parmvalue = 0;
            private int studyid = 0;
            private int sessionid = 0;

            public clsExposureData()
            {
                  //
                  // TODO: Add constructor logic here
                  //
            }

            
            public DateTime RunTime
            {
                  get{return runtime;}
                  set{runtime=value;}
            }

            public int RunNum
            {
                  get{return runnum;}
                  set{runnum = value;}
            }
            
            public int StartNum
            {
                  get{return startnum;}
                  set{startnum = value;}
            }

            public int PositionID
            {
                  get{return positionid;}
                  set{positionid = value;}
            }

            public int AlarmID
            {
                  get{return alarmid;}
                  set{alarmid = value;}
            }

            public decimal ParmValue
            {
                  get{return parmvalue;}
                  set{parmvalue = value;}
            }

            public int StudyID
            {
                  get{return studyid;}
                  set{studyid = value;}
            }

            public int SessionID
            {
                  get{return sessionid;}
                  set{sessionid = value;}
            }

      }
}
0
 
LVL 7

Assisted Solution

by:whatsit2002
whatsit2002 earned 1600 total points
ID: 17834663
Try this:
decimal pv = ((clsExposureData)((clsChamberInfo) arChamberInfo[i]).arNewData[0]).ParmValue;

Also, my remark about array lists was tied to the availability of generic lists in .NET 2.0. In 2.0, you can create a strongly typed list of your objects like so:

List<clsExposureData> myList = new List<clsExposureData>();
myList.Add(new clsExposureData());

Then when you want to access them, you don't have to cast anything from the base type "object" like you do with an array list. You can do things like:

decimal val = myList[0].ParmValue;

Thanks.

Jason
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article introduced a TextBox that supports transparent background.   Introduction TextBox is the most widely used control component in GUI design. Most GUI controls do not support transparent background and more or less do not have the…
Introduction Hi all and welcome to my first article on Experts Exchange. A while ago, someone asked me if i could do some tutorials on object oriented programming. I decided to do them on C#. Now you may ask me, why's that? Well, one of the re…
Monitoring a network: how to monitor network services and why? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the philosophy behind service monitoring and why a handshake validation is critical in network monitoring. Software utilized …
In this video, Percona Director of Solution Engineering Jon Tobin discusses the function and features of Percona Server for MongoDB. How Percona can help Percona can help you determine if Percona Server for MongoDB is the right solution for …

705 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question