如何将DataTable行与列表框项进行比较

时间:2016-03-02 14:36:46

标签: c# mysql foreach datatable listbox

当我在monthcalendar中选择日期时,我想将列表框中的列表项与名为“time”的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);
        }

    } 

2 个答案:

答案 0 :(得分:0)

根据我的理解,您无法从public static void replaceAllTest() { String textBanner = "This advertisement on $P_NAME$ will make the $P_NAME$ very popular"; Pattern replace = Pattern.compile("\\$(.*?)\\$"); // <-- non-greedy here with "?" Matcher matcherValue = replace.matcher(textBanner); String updatedValue = matcherValue.replaceAll("DotCom"); // <-- replaceAll to replace all matches System.out.println(updatedValue); } 删除具有Listbox属性的项目。

此链接可以更深入地描述:

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

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

答案 1 :(得分:0)

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

      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);
    }

}