【问题标题】:How to compare DataTable row with listbox items如何将 DataTable 行与列表框项进行比较
【发布时间】:2016-06-15 11:33:53
【问题描述】:

当我在月历中选择日期时,我想将列表框中的列表项与名为“时间”的 DataTable 列行进行比较,如果它们等于列中的值,我会尝试删除列表框中的项目,如果没有,那么使用我一开始的默认项目。但我收到消息:设置 Datasource 属性时无法修改项目集合。请帮我更正代码:

   private void monthCAL_DateChanged(object sender, DateRangeEventArgs e)
    {
        string date = monthCAL.SelectionStart.Date.ToString("yyyyMMdd");
        string connetionString = null;
        MySqlConnection connection;
        MySqlCommand command;
        MySqlDataAdapter adapter = new MySqlDataAdapter();
        DataSet ds = new DataSet();
        string sql = null;
        connetionString = "datasource=localhost; database=bokning;port=3306;username=root;password=666666";
        sql = "select day, time from system where day='" + date + "'";
        connection = new MySqlConnection(connetionString);
        try
        {
            connection.Open();
            command = new MySqlCommand(sql, connection);
            adapter.SelectCommand = command;
            adapter.Fill(ds);
            adapter.Dispose();
            command.Dispose();
            connection.Close();

            MyDateT = ds.Tables[0];

            if (MyDateT.Rows.Count > 0)
            {
                foreach (DataRow dr in MyDateT.Rows) { 
                    for (int i = 0; i < MydefaultList.Length; i++)
                    {
                        if (MydefaultList[i].ToString().Equals(dr["time"].ToString())) {
                            listB1.Items.Remove(MydefaultList[i]);
                            //listB1.DataSource = MydefaultList;
                        }
                    }
            }                  
            }
            else
            {
                listB1.DataSource = MydefaultList;
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

    } 

【问题讨论】:

    标签: c# mysql foreach datatable listbox


    【解决方案1】:

    据我了解,您无法从具有 DataSource 属性的 Listbox 中删除项目。

    这个链接可以更深入地描述:

    http://www.codeproject.com/Questions/758161/Items-collection-cannot-be-modified-when-the-DataS

    您需要将DataSource 设置为null,进行您想要进行的更改,然后重新添加DataSource

    【讨论】:

      【解决方案2】:

      您必须创建一个新列表来存储有限的选项。请参阅下面的编辑代码。

            private void monthCAL_DateChanged(object sender, DateRangeEventArgs e)
      {
          string date = monthCAL.SelectionStart.Date.ToString("yyyyMMdd");
          string connetionString = null;
          MySqlConnection connection;
          MySqlCommand command;
          MySqlDataAdapter adapter = new MySqlDataAdapter();
          DataSet ds = new DataSet();
          string sql = null;
          connetionString = "datasource=localhost; database=bokning;port=3306;username=root;password=666666";
          sql = "select day, time from system where day='" + date + "'";
          connection = new MySqlConnection(connetionString);
          try
          {
              connection.Open();
              command = new MySqlCommand(sql, connection);
              adapter.SelectCommand = command;
              adapter.Fill(ds);
              adapter.Dispose();
              command.Dispose();
              connection.Close();
      
              MyDateT = ds.Tables[0];
              List<string> limitedList = MyDefaultList; //added line
      
              if (MyDateT.Rows.Count > 0)
              {
                  foreach (DataRow dr in MyDateT.Rows) { 
                      for (int i = 0; i < MydefaultList.Length; i++)
                      {
                          if (MydefaultList[i].ToString().Equals(dr["time"].ToString())) {
                              limitList.Remove(MyDefaultList[i]);
                              listB1.DataSource = limitedList;
                              //listB1.Items.Remove(MydefaultList[i]); offending line
                              //listB1.DataSource = MydefaultList; offending line
                          }
                      }
              }                  
              }
              else
              {
                  listB1.DataSource = MydefaultList;
              }
          }
          catch (Exception ex)
          {
              MessageBox.Show(ex.Message);
          }
      
      } 
      

      【讨论】:

      • 它只是从列表中删除数据库中第一个比较的选定日期,之后在尝试比较其他日期时没有任何反应,我的 MyDefaultList 是: List MydefaultList = new List (); MydefaultList.Add("08:00-12:00"); MydefaultList.Add("12:00-16:00"); MydefaultList.Add("16:00-20:00"); for (int i = 0; i
      猜你喜欢
      • 2015-08-04
      • 1970-01-01
      • 2014-02-08
      • 2018-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多