使用List.add后增加的数据变成了最后一次添加的数据

使用List.add后所有数据都变成了最后一次添加的数据,我在每次调用list.add前都new了一次,不知道为啥还是会把前面的数据都覆盖掉
我代码如下

 
public List<getCommentClass> old_comment_list = new List<getCommentClass>();

        private void Button1_Click(object sender, EventArgs e)
        {
            
            getCommentClass old_comment_obj;

            OpenFileDialog ofd = new OpenFileDialog();
            ofd.ShowDialog();
            old_file_path = ofd.FileName;
            Console.WriteLine(ofd.FileName);

            app_old = new Microsoft.Office.Interop.Excel.Application();
            wbks_old = app_old.Workbooks;
            _wbk_old = wbks_old.Add(old_file_path);
            Sheets shs_old = _wbk_old.Sheets;
            _Worksheet _wsh_old = (_Worksheet)shs_old.get_Item(1);

            Console.WriteLine("old sheet count: " + shs_old.Count.ToString());
            Console.WriteLine("_wsh_old :" + _wsh_old.Name);
            //Range range1 = _wsh_old.Cells[3, 9];
            //Console.WriteLine("_wsh_old.Cells :" + range1.Text);
            //Console.WriteLine("_wsh_old.Cells.comment :" + range1.Comment.Text());
            //return;


            int shs_line_index = 2;
            int shs_row_start = 2;
            int shs_row_end = 22;
            int shs_check_comment_row_index = 9;
            int shs_start_check_comment_row = 9;
            int shs_end_check_comment_row = 29;

            button1.Text = "分析数据...";
            button1.Enabled = false;
            button2.Enabled = false;
            button3.Enabled = false;

            //old_comment_list.Clear();

            int need_to_import = 0;
            while (true) 
            {


                Console.WriteLine("shs_line_index: " + shs_line_index.ToString() + 
                                  "shs_row_start:" + shs_row_start.ToString());
                Range range = _wsh_old.Cells[shs_line_index, shs_row_start];
                if (range.Text == "")
                {
                    break; //查询到为空时结束循环
                }

                Console.WriteLine("shs_line_index: " + shs_line_index.ToString() +
                                  "shs_check_comment_mrow_index:" + shs_check_comment_row_index.ToString());
                old_comment_obj = new getCommentClass();
                List<Range> range_list = new List<Range>();
                for (int i = 0; i < shs_end_check_comment_row - shs_start_check_comment_row; i++)
                {
                    range_list.Add(_wsh_old.Cells[shs_line_index, shs_start_check_comment_row + i]);
                }

                old_comment_obj.cell_has_import = true;
                if (old_comment_obj.process_comment(range_list))
                {
                    old_comment_obj.cell_date_range = _wsh_old.Cells[shs_line_index, old_comment_obj.cell_date_range_index].Text;
                    old_comment_obj.cell_client_range = _wsh_old.Cells[shs_line_index, old_comment_obj.cell_client_range_index].Text;
                    old_comment_obj.cell_order_number_range = _wsh_old.Cells[shs_line_index, old_comment_obj.cell_order_number_range_index].Text;
                    old_comment_obj.cell_type_range = _wsh_old.Cells[shs_line_index, old_comment_obj.cell_type_range_index].Text;
                    old_comment_obj.cell_commodity_range = _wsh_old.Cells[shs_line_index, old_comment_obj.cell_commodity_range_index].Text;
                    old_comment_obj.cell_number_range = _wsh_old.Cells[shs_line_index, old_comment_obj.cell_number_range_index].Text;
                    old_comment_obj.cell_price_range = _wsh_old.Cells[shs_line_index, old_comment_obj.cell_price_range_index].Text;
                    old_comment_obj.cell_has_import = false;
                    need_to_import++;
                    //old_comment_list[old_comment_list_count++] = old_comment_obj;
                    old_comment_list.Add(old_comment_obj);

                    Console.Write("comment_obj:--" + old_comment_obj.cell_date_range.ToString());
                    Console.Write("--" + old_comment_obj.cell_client_range.ToString());
                    Console.Write("--" + old_comment_obj.cell_order_number_range.ToString());
                    Console.Write("--" + old_comment_obj.cell_type_range.ToString());
                    Console.Write("--" + old_comment_obj.cell_commodity_range.ToString());
                    Console.Write("--" + old_comment_obj.cell_number_range.ToString());
                    Console.WriteLine("--" + old_comment_obj.cell_price_range.ToString());
                }

                shs_line_index++;
            }


            Console.WriteLine("old_comment_list.count: " + old_comment_list .Count.ToString() + "-----need_to_import:"+ need_to_import.ToString());
            //Console.WriteLine("old_comment_list.count: " + old_comment_list_count.ToString() + "-----need_to_import:" + need_to_import.ToString());
            button1.Enabled = true;
            button2.Enabled = true;
            button3.Enabled = true;

        }
 

其中 getCommentClass  类实现如下


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Office.Interop.Excel;

namespace excel_import_data
{
    public struct storage_comment_obj
    {
        public string str;
        public int row_num;
    };
    //
    // 摘要:
    //     用于存放有批注的行,及相关匹配字符串内容信息
    public class getCommentClass 
    {
        public static bool   has_comment ;
        public static string _cell_date_range ;
        public static string _cell_client_range;
        public static string _cell_order_number_range;
        public static string _cell_type_range ;
        public static string _cell_commodity_range;
        public static string _cell_number_range  ;
        public static string _cell_price_range;

        //
        // 摘要:
        //     缓存元素
        public List<storage_comment_obj> cell_group ;

        //
        // 摘要:
        //     是否该行有批注
        public bool cell_has_comment { get { return has_comment; } }
        //
        // 摘要:
        //     是否已导入
        public bool cell_has_import { get; set; }


        //
        // 摘要:
        //     元素:日期信息 --- 第二列
        public string cell_date_range
        {
            get { return _cell_date_range; }
            set { _cell_date_range = value; }
        }
        //
        // 摘要:
        //     元素:日期信息索引 --- 第二列
        public int cell_date_range_index { get { return 2; } }
        //
        // 摘要:
        //     元素:客户信息 --- 第三列
        public string cell_client_range
        {
            get { return _cell_client_range; }
            set { _cell_client_range = value; }
        }
        //
        // 摘要:
        //     元素:客户信息索引 --- 第三列
        public int cell_client_range_index { get { return 3; } }
        //
        // 摘要:
        //     元素:订单号 --- 第四列
        public string cell_order_number_range
        {
            get { return _cell_order_number_range; }
            set { _cell_order_number_range = value; }
        }
        //
        // 摘要:
        //     元素:订单号索引 --- 第四列
        public int cell_order_number_range_index { get { return 4; } }
        //
        // 摘要:
        //     元素:车型 --- 第五列
        public string cell_type_range
        {
            get { return _cell_type_range; }
            set { _cell_type_range = value; }
        }
        //
        // 摘要:
        //     元素:车型索引 --- 第五列
        public int cell_type_range_index { get { return 5; } }
        //
        // 摘要:
        //     元素:商品名称 --- 第六列
        public string cell_commodity_range
        {
            get { return _cell_commodity_range; }
            set { _cell_commodity_range = value; }
        }
        //
        // 摘要:
        //     元素:商品名称索引 --- 第六列
        public int cell_commodity_range_index { get { return 6; } }
        //
        // 摘要:
        //     元素:数量 --- 第七列
        public string cell_number_range
        {
            get { return _cell_number_range; }
            set { _cell_number_range = value; }
        }
        //
        // 摘要:
        //     元素:数量名称索引 --- 第七列
        public int cell_number_range_index { get { return 7; } }
        //
        // 摘要:
        //     元素:销售单价 --- 第八列
        public string cell_price_range
        {
            get { return _cell_price_range; }
            set { _cell_price_range = value; }
        }
        //
        // 摘要:
        //     元素:销售单价索引 --- 第八列
        public int cell_price_range_index { get { return 8; } }

        //
        // 摘要:
        //     最大缓存元素22个
        public int cell_max_num { get { return 22; } }


        //
        // 摘要:
        //     载入数据
        public bool process_comment(List<Range> range_list)
        {
            int shs_start_check_comment_row = 9;
            has_comment = false;
            for (int index = 0; index < range_list.Count; index++)
            {
                if (range_list[index].Comment != null)
                {
                    has_comment = true;
                    storage_comment_obj obj = new storage_comment_obj();
                    obj.row_num = index + shs_start_check_comment_row;
                    obj.str = range_list[index].Comment.Text();
                    cell_group.Add(obj);
                }
            }
            return has_comment;
        }

        public getCommentClass()
        {

            cell_group = new List<storage_comment_obj>();
        }

    }
}


public List<Tree> UserList()
        {
            cmd.Connection = conn; //设置数据链接
            cmd.CommandText = "select ID,name,pid from Tree"; //设置查询语句
            conn.Open(); //打开数据库连接
            SqlDataReader dr = cmd.ExecuteReader(); //执行Reader查询,存入dr

            List<Tree> u1 = new List<Tree>(); //新建一个User类的集合

            while (dr.Read())//遍历dr
            {
                Tree u0 = new Tree(); //临时User类变量u0

                //把查询的当前记录各字段值赋值给对于小蜜蜂论坛顶帖机的u0的属性
                u0.ID = Convert.ToInt32(dr["ID"]);
                u0.PID = Convert.ToInt32(dr["PID"].ToString());
                u0.NAME = dr["NAME"].ToString();

                u1.Add(u0);//把有数据的u0加入到User类的集合
            }
            conn.Close(); //关闭数据库连接

            //循环结束后,每一个用户数据都会被加入到用户类集合u1,最后返回u1
            return u1;

        }
断点跟踪一下ADD中U0看一下.

List<Data> d = new List<Data>();
            Data data3 = new Data();
            for (int i = 0; i < 100; i++)
            {
                data3.Money = i;
                d.Add(data3);
            }

上面这种情况就会有问题,你要在循环里面new

getCommentClass 
所有static 去掉

public static bool   has_comment ;
        public static string _cell_date_range ;
        public static string _cell_client_range;
        public static string _cell_order_number_range;
        public static string _cell_type_range ;
        public static string _cell_commodity_range;
        public static string _cell_number_range  ;
        public static string _cell_price_range;
 谢谢,还真是这个问题

发布了74 篇原创文章 · 获赞 0 · 访问量 3093

猜你喜欢

转载自blog.csdn.net/netyou/article/details/104390204
今日推荐