jvalescu
asked on
Another C# Array of objects question
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(alarm
}
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,ru
}
public void CopyData()
{
this.arLastData.Clear();
this.arLastData.Add(arNewD
}
public void AppendToDataCapture()
{
this.arDataCapture.Add(arN
}
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
}
}
waveformGraph1.PlotYAppend
}
arChamberInfo is an ArrayList of clsChamberInfo objects. I want to get to the arChamberInfo[i].arNewData
Please let me know if you have you tried the following.
waveformGraph1.PlotYAppend (((clsCham berInfo) arChamberInfo[i]).arNewDat a[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]).arNewDat a;
for (int j=0; j<al.Count; j++)
{
waveformGraph1.PlotYAppend (al[j]);
}
}
}
waveformGraph1.PlotYAppend (newPos,2) ;
Thanks.
Jason
waveformGraph1.PlotYAppend
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]).arNewDat
for (int j=0; j<al.Count; j++)
{
waveformGraph1.PlotYAppend
}
}
}
waveformGraph1.PlotYAppend
Thanks.
Jason
ASKER
Jason,
Thanks for the quick response. The line, waveformGraph1.PlotYAppend ( ((clsChamberInfo) arChamberInfo[i]).arNewDat a[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.................
Thanks for the quick response. The line, waveformGraph1.PlotYAppend
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)arChamberI nfo[i];
for (int j = 0; j < ci.Count; j++)
{
clsExposureData ed = (clsExposureData)ci.arNewD ata[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
However, on the assumption that you must use ArrayLists, try this, please:
for(int i = 0; i< arChamberInfo.Count; i++)
{
clsChamberInfo ci = (clsChamberInfo)arChamberI
for (int j = 0; j < ci.Count; j++)
{
clsExposureData ed = (clsExposureData)ci.arNewD
decimal val = ed.parmvalue;
waveformGraph1.PlotYAppend
}
}
Also, please make sure that your clsExposureData class has a public property called "paramvalue" because otherwise, you will get a compile error.
Thanks.
Jason
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
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]).arNewDat a[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.
decimal pv = ((clsChamberInfo) arChamberInfo[i]).arNewDat
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.
ASKER
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;}
}
}
}
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;}
}
}
}
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
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;
}
}
}