WSCurve wsc = new WSCurve();
#region 取到数据,要修改
for (int i = 0; i < gvAdd.Rows.Count; i++)
{
wsc.CurveWid = Convert.ToString(this.gvAdd.Rows[i].Cells[0].Value);
wsc.CurveName = Convert.ToString(this.gvAdd.Rows[i].Cells[1].Value);
wsc.CurveAlia = Convert.ToString(this.gvAdd.Rows[i].Cells[2].Value);
string[] srrSQL = { "select * from " + bDBName + ".dbo.wits_64 where CurveName='" + wsc.CurveName + "'" }; //bDBName=WIS00001
string[] srrTableName = { "wits_64" };
DataSet ds = Library.WebServicesLayer.GetELISPar(srrSQL, srrTableName);
//string sql = "select * from WIS00001.dbo.wits_64 where CurveName='P6LA'";
if (ds == null)
return;
DataTable dt = ds.Tables[0];
foreach (DataRow dr in dt.Rows)
{
//wsc = new WSCurve();
wsc.CurveWid = dr["wid"].ToString();
wsc.CurveName = dr["CurveName"].ToString();
wsc.CurveAlia = dr["CurveName"].ToString();
wsc.CurveNumber = dr["sno"].ToString() == "" ? "0" : dr["sno"].ToString(); //对应数据库中sno字段
wsc.CurveHis = dr["his"].ToString() == "" ? "0" : dr["his"].ToString(); //对应数据库中his字段
wsc.CurveWid = dr["wid"].ToString(); //对应数据库中wid字段
wsc.wCurveTableName = dr["TableName"].ToString(); //对应数据库中TableName字段
wsc.wCurvePlace = dr["place"].ToString(); //对应数据库中place字段
wsc.wCurveCnName = dr["CurveName"].ToString(); //对应数据库中CurveName字段
wsc.wCurveFLName = dr["CurveName"].ToString(); //对应数据库中CurveName字段
wsc.wTableName = wsc.CurveHis == "0" ? (dr["tableName"].ToString() == "62" ? "wits_62" : "wits_63") : (dr["tableName"].ToString() == "62" ? "wits_62_his" : "wits_63_his"); //对应数据库中的字段
wsc.wFieldname = "[" + Library.Util.GetColumnsNameFromPlace(dr["place"].ToString()) + "]"; //以对应的位置,拼出字段名字.
wsc.wUnitText = dr["Unit"].ToString(); //对应数据库中Unit字段
wsc.wRenderStyle = EnumRenderStyle.solid; //是曲线的线型
wsc.wShow = true; //是否显示
wsc.wPoints = dr["Points"].ToString(); //总点数
wsc.swing = "40"; //声波振幅
wsc.interval = "2"; //采样间隔值
wsc.wDelay = "24"; //采样间隔时间
wsc.intervalValue = "240"; //第一个点的采样延迟时间
wsc.STCurveName = "";
wsc.SICurveName = "";
wsc.iWCurveIndex = 1;
wsc.iShowRectB = int.Parse(dr["Points"].ToString()) * int.Parse(wsc.wDelay);
wsc.iShowRectS = 240;
wsc.iWaveImageNum = int.Parse(dr["Victoria"].ToString()); //对应数据库中的字段波形的条数
}
wcb.ArCurve.Add(wsc);
}
为什么我最后add后...比如我gvAdd.Rows.Count中2行不同的数据,但是当我添加到arrayList ArCurve = new arrayList ();后.2条数据都是后者的数据,(就是说前者被后者给覆盖了)...怎么样才能解决呢?
亲,你的问题是逻辑的问题,你应该放在for里new的,给你看看……你是这么写的
要改成注释里的那样……
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace ComTest { class Program { static void Main(string[] args) { ArrayList ar = new ArrayList(); //A a; //for (int i = 0; i < 5; i++) //{ // a = new A { Name = i.ToString() }; // ar.Add(a); //} //foreach (A item in ar) //{ // Console.WriteLine(item.Name); //} A a=new A (); for (int i = 0; i < 5; i++) { a.Name = i.ToString(); ar.Add(a); } foreach (A item in ar) { Console.WriteLine(item.Name); } Console.Read(); } } class A { public string Name { get; set; } } }
谢谢..我去查看一下..我是把所有取到的数据都存在了类中的曲线属性中了,每次取出来,都会覆盖,因为类中的属性变了,所以也就变了,,,没思路怎么改..
谢谢搞定了.能留个qq吗?我对数组不是很熟练,麻烦您了
????还在吗?我存到arraylist中数据,我想以string[] str =new string[]{""};
取到里面的数组,报错-----源数组中至少有一个元素无法被向下转换到目标数组类型。
这个?是什么问题呢?
wsc 没有new ,都是指向同一个对象,这样,你的效果就是都是最后的数据
wcb.ArCurve.Clear();
WSCurve wsc;
#region 取到数据,要修改
for (int i = 0; i < gvAdd.Rows.Count; i++)
{
wsc= new WSCurve();
是这样吗?写到for中,但是还是...被覆盖
谢谢搞定了.能留个qq吗?我对数组不是很熟练,麻烦您了
@一個亼冷暖自知: 只要明白了引用类型,就ok了
@chenping2008: 恩恩,qq方便说吗?我存了还要取的.....