ComboBox items.count не соответствует источнику данных (C #) - PullRequest
8 голосов
/ 20 мая 2009

У меня есть ComboBox, который связан с источником данных. Я хочу динамически добавлять элементы в ComboBox на основе определенных условий. Итак, я добавил параметры в новый список, а затем изменил источник данных ComboBox следующим образом:

cbo.DataSource = null;
cbo.DataSource = cbos;
cbo.DisplayMember = "Title";
cbo.ValueMember = "Value";

Затем я проверяю cbo.Items.Count, и он не увеличился - он не равен количеству источника данных. Есть идеи, что я могу сделать здесь? Обратите внимание, что это WinForms, а не asp.net.

Спасибо

Ответы [ 13 ]

0 голосов
/ 22 мая 2009

comboBox1.DataSource = somelist;

int c1 = comboBox1.DataSource.Count; // все еще ноль

BindingContext dummy = this.comboBox1.BindingContext; // Принудительное обновление сейчас

int c2 = comboBox1.DataSource.Count; // теперь он равен somelist.Count

0 голосов
/ 20 мая 2009

Этот код выдает 2 в окне сообщения для меня, вы можете попробовать и посмотреть, как он ведет себя для вас?

Вы можете вставить его в консольное приложение и добавить ссылку на System.Windows.Forms и System.Drawing.

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Drawing;

namespace SO887803
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.Run(new MainForm());
        }
    }

    public partial class MainForm : Form
    {
        private Button _Button;
        private ComboBox _ComboBox;

        public MainForm()
        {
            _Button = new Button();
            _Button.Text = "Test";
            _Button.Location = new Point(8, 8);
            _Button.Click += _Button_Click;
            Controls.Add(_Button);

            _ComboBox = new ComboBox();
            _ComboBox.Location = new Point(8, 40);
            Controls.Add(_ComboBox);
        }

        private void _Button_Click(object sender, EventArgs e)
        {
            List<Item> items = new List<Item>();
            items.Add(new Item("A", "a"));
            items.Add(new Item("B", "b"));

            _ComboBox.DataSource = null;
            _ComboBox.DataSource = items;
            _ComboBox.DisplayMember = "Title";
            _ComboBox.ValueMember = "Value";
            MessageBox.Show("count: " + _ComboBox.Items.Count);
        }

        public class Item
        {
            public String Title { get; set; }
            public String Value { get; set; }
            public Item(String title, String value)
            {
                Title = title;
                Value = value;
            }
        }
    }
}
0 голосов
/ 20 мая 2009

Просто чтобы уточнить, вызываете ли вы метод count () После вызова метода databind ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...