Как перемещать отборные элементы checkedlistbox listbox с C#?

Привет всем, прежде всего спасибо за время берется чтения мне. Я делаю программу используя визуальный studio 15 community программируя с C#. В программе я присоединяюсь в базу данных, сделанную в SQL Server 2008, от которой я получаю ключи каких-то продуктов, которые для продажи. Я делаю предыдущее с класса так называемой "связи", в которую его переместил все параметры корреспондент, и загружаю результаты query в checkedlistbox, с целью которого пользователь мог бы выбирать продукты, которые он желает. Отборные объекты проходят (или, по крайней мере, это - то, что он был бы должен делать listbox) для того, чтобы оно смогло отображать только отборных, но это не делает, не, если кто-то может говорить мне, что я врежу, или ориентироваться пожалуйста. Спасибо заранее.

    class conexion{
      public void claves_semanas(CheckedListBox clb)
    {
        try
        {
            DataTable dt = new DataTable();
            using (SqlConnection conn = new SqlConnection("Data Source=Server;Initial Catalog=Productos;Persist Security Info=True;User ID=creedence;Password=fortunateson"))
            {
                string query = "select DS_productos FROM tiend.C_productos WHERE FE_INICIO > '2016-01-10' ORDER BY FE_INICIO";   //aqui omiti los datos por razones de que no puedo dar la información de los productos el caso es que necesito ver los productos que se dieron de alta desde el 2016-01-10
                SqlCommand buscador = new SqlCommand(query, conn);
                SqlDataAdapter da = new SqlDataAdapter(buscador);
                da.Fill(dt);
                clb.DisplayMember = "DS_productos";
                clb.DataSource = dt;
            }
        }

        catch (Exception ex)
        {
            MessageBox.Show("Error" + ex.ToString());
        }
    }

}

Даже там закончи код, который я использую для связи, сейчас это код, который я использую в main

     foreach (var s in checkedListBox1.CheckedItems)
        {
            listBox1.Items.Add(s.ToString());
        }

Очевидно пометь ошибку, хотя не потому что искренне. ОБНОВЛЕНИЕ.

Ошибка, которую он дает, - эта в listbox: System. Восходи. DataRowView Eso - единственное, что может быть оцененным.

Также попробуйте использовать событие 'ItemCheck' этой формы

       private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
    {
        string item = checkedListBox1.SelectedItem.ToString();
        if (e.NewValue == CheckState.Checked)
            listBox1.Items.Add(item);
        else
            listBox1.Items.Remove(item);
    }

В одинокое что он возвращает мне в listbox слово 'коллекцию', я не знаю, из-за которого я это переместил, так как мои знания достаточно основные, и сколько бы я не искал документацию в MSDN я не нашел ничего, что могло помогать мне.

Я должен доводить до сведения также, что перед тем, как использовать весь код, который я поместил ранее, он использовал этот код в моем классе:

      public void claves_semanas(CheckedListBox clb)
    {
        int stop = 1;
     dr8 = cmd8.ExecuteReader();
                while (stop > 0)
                {
                    while (dr8.Read())
                    {
                        clb.Items.Add(dr8["DS_SEMANA"].ToString());
                    }
                    clb.SelectedIndex = 0;
                    dr8.Close();
                    stop = -1;
                }
          }

и в main он использовал этот

       foreach (string s in checkedListBox1.CheckedItems)
        {
           listBox1.Items.Add(s);
        }

И оно функционировало довольно кроме из-за детали, которая состоит в том, что данные выходили у меня повторенными 2 раза, я поверил в то, что решил это в классе с переменной stop, чтобы способствовать тому, чтобы цикл только был сделан однажды, но никогда я не следую, что привело меня к тому, чтобы использовать код, который он размещает даже наверху, с этим кодом, если я добился, чтобы данные появились только однажды, хотя я не могу способствовать тому, чтобы эти появились в listbox.

Я жду и смогите помогать мне. Привет

0
задан 19.01.2017, 22:24
0 ответов

Заяви в твоем классе:

    private BindingList<string> DatosCheckBox = new BindingList<string>();
    private BindingList<string> DatosLista = new BindingList<string>();

Сейчас в твоей консультации

 public void claves_semanas(CheckedListBox clb)
{
    try
    {
        using (SqlConnection conn = new SqlConnection("Data Source=Server;Initial Catalog=Productos;Persist Security Info=True;User ID=creedence;Password=fortunateson"))
        {
            string query = "select DS_productos FROM tiend.C_productos WHERE FE_INICIO > '2016-01-10' ORDER BY FE_INICIO";   //aqui omiti los datos por razones de que no puedo dar la información de los productos el caso es que necesito ver los productos que se dieron de alta desde el 2016-01-10
            SqlCommand buscador = new SqlCommand(query, conn);
            conn.Open();
            var rdr = buscador.ExecuteReader();
            while (rdr.Read())
            {
                DatosCheckBox.Add(rdr["DS_productos"].ToString());
            }
            checkedListBox1.DataSource = DatosCheckBox;
            listBox1.DataSource = DatosLista;
            conn.Close();
        }
    }

    catch (Exception ex)
    {
        MessageBox.Show("Error" + ex.ToString());
    }
}

В событии твоего CheckedListBox:

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
    {
        var index = e.Index;
        var listbox = sender as CheckedListBox;
        var item = DatosCheckBox.Where(W => W == listbox.Items[index].ToString()).Single();

        switch (e.CurrentValue)
        {
            case CheckState.Unchecked:
                DatosLista.Add(item);
                break;
            case CheckState.Checked:
                DatosLista.Remove(item);
                break;
            default:
                break;
        }
    }

Заметь: если твой объект базы данных - составного типа, ты будешь нуждаться в том, чтобы заменить в BindingList из-за типа, который ты используешь

1
ответ дан 03.12.2019, 17:37
  • 1
    Стой большое спасибо твой ответ @Jesus Rodrí guez checaré то, что ты сказал мне, и я буду изучать, что это bidinglist. –  20.01.2017, 21:17

Привет я решил проблему через соединение, которое он поместил @Mauricio

Я оставляю им форму, в которой я это сделал, если он прибывает к кому-то, чтобы служить в будущем.

Единственное, что я был должен делать, состояло в том, чтобы изменять main этой формы:

     private void agregarSemanasToolStripMenuItem_Click(object sender, EventArgs e)

    {
        string s = "";

        foreach (DataRowView drv in checkedListBox1.CheckedItems)
        {
            s += drv[0].ToString() + ",";
        }
        s = s.TrimEnd(',');
        listBox1.Items.Add(s);
    }

И с этим мне удалось получить желанный результат. Благодаря обоим из-за того, что помогает мне.

Привет

0
ответ дан 03.12.2019, 17:37