kitty0445 发表于 2021-5-7 20:57

Li7 发表于 2021-5-7 21:04

设计流水号唯一,根据流水号add

weixiaozi 发表于 2021-5-7 22:28

不知道是不是我理解错误,
我觉得楼主整体都复杂化了
本身不应该是数据库设计的时候就考虑到各种字段属性嘛.那么你从数据库读取数据的时候肯定需要条件查询啊!!!你这个
你总不可能每次都要把整个表都读取出来吧?这样很不理智.会造成性能浪费.
然后条件查询出来的结果直接一个List<T> 不就可以了吗?LIST<T>或者ArrayList也可以排序的

cdj68765 发表于 2021-5-7 22:50


            var 档案List = new Dictionary<int, List<档案Class>>();
            if (档案List.ContainsKey(档案Class.FLD_PID))
            {
                档案List[档案Class.FLD_PID].Add(档案Class);
            }
            else
            {
                档案List.Add(档案Class.FLD_PID, new List<档案Class>() { 档案Class });
            }
不知道类似这样的代码,是不是你想要的

touna 发表于 2021-5-7 23:25

你这个是列表联动问题,点左边列表,触发事件,右边列表显示数据~
例如左边列表绑定了档案list, 左边列表下拉选定某个值的时候触发value change事件,事件中 查询数据库,
将结果返回右边的列表中
例如左边列表获取的value 是 ID
那么触发事件执行数据库,查询语句就是 select *from tablewhereid=ID   (table 是你要查的数据表名, id是字段名)
再将结果绑定右边列表就OK

PearDress 发表于 2021-5-7 23:47

档案List = new Dictionary<int, 档案Class>();这个如果你只是为了后面根据日期做查询,可以改为:档案List = new Dictionary<日期, List<档案Class>>();
如果不需要通过Key获取,感觉你这个业务直接List<T>就行了
看你的业务,根据年份切换显示数据,感觉需要重新获取数据呢

wu0o0pj 发表于 2021-5-8 09:35

你这设计的有点问题吧:
    档案List = new Dictionary<int, 档案Class>();
    档案List.Add(档案Class.ID, 档案Class);

用了Dictionary,那之后自然是要通过档案Class.ID 去查找对应的档案Class,但之后却没有用到;

你的需求是 从 档案List 中 筛选出符合年月等条件的记录集,列到下拉表中,然后可以在其他地方展示明细,或者编辑等操作;

常见的其实是 档案List 作为 List<档案Class>,初始时从数据库中读取所有的记录集,可以通过 sql 语句直接排好序 ;
之后当 year,month 下拉列表选择改变后,从 档案List 中提取 符合的,重新加载到 comboBox 就行了;


         /// <summary>
      /// 假设 档案Class 定义如下
      /// </summary>
      private class 档案Class
      {
            public int ID { get; set; }
            public string Name { get; set; }
            public int Year { get; set; }
            public int Month { get; set; }

            public 档案Class()
            {

            }

            public 档案Class(int id, int year, int month)
            {
                ID = id;
                Year = year;
                Month = month;
                Name = $"{id}_{year}_{month}";
            }
      }

      // 初始化,窗体加载时
      private void Init()
      {
            _cboYear.DropDownStyle = ComboBoxStyle.DropDownList;
            _cboMonth.DropDownStyle = ComboBoxStyle.DropDownList;
            _cbo档案.DropDownStyle = ComboBoxStyle.DropDownList;

            _cboYear.Items.Clear();
            for (int i = 2000; i < 2030; i++)
            {
                _cboYear.Items.Add(i);
            }

            _cboMonth.Items.Clear();
            for (int i = 1; i <= 12; i++)
            {
                _cboMonth.Items.Add(i);
            }

            // 数据库获取所有记录
            _档案List = GetAllRecord();

            _cbo档案.DataSource = _档案List;
            _cbo档案.DisplayMember = "Name";
            _cbo档案.ValueMember = "ID";

            _cboYear.SelectedIndex = 0;
            _cboMonth.SelectedIndex = 0;
            _cboYear.SelectedIndexChanged += cboYear_SelectedIndexChanged;
            _cboMonth.SelectedIndexChanged += cboMonth_SelectedIndexChanged;

            Update_档案List();
      }

      private void cboYear_SelectedIndexChanged(object sender, EventArgs e)
      {
            Update_档案List();
      }

      private void cboMonth_SelectedIndexChanged(object sender, EventArgs e)
      {
            Update_档案List();
      }

      private void Update_档案List()
      {
            if (string.IsNullOrWhiteSpace(_cboYear.Text)) { return; }
            if (string.IsNullOrWhiteSpace(_cboMonth.Text)) { return; }

            int year = Convert.ToInt32(_cboYear.Text);
            int month = Convert.ToInt32(_cboMonth.Text);
            var list = _档案List.Where(a => a.Year == year && a.Month == month).ToList();
            _cbo档案.DataSource = list;
      }

      private void Button1_Click(object sender, EventArgs e)
      {
            var obj = _cbo档案.SelectedItem as 档案Class; // 获取选择的档案
            if (obj == null) { return; }

            MessageBox.Show($"ID = {obj.ID }\r\nName = {obj.Name }");
      }

kitty0445 发表于 2021-5-8 10:56

页: [1]
查看完整版本: C#遇到个list遍历和查询的严重BUG想尽了办法无法解决求大神相助