1

全体を見渡してみましたが、c#Windowsフォームアプリケーションが機能しない理由がわからないようです。

だから私はいくつかのプライベートメンバーを持つItemクラスを持っています:

public class Item : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private string name_;

    public string name { 
        get { return name_;}
        set
        {
            name_ = value;
            this.NotifyPropertyChanged("Name");
        }
    }
    private void NotifyPropertyChanged(string name)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(name));
    }
}

次に、アイテムのバインディングリストを保持する別のクラスがあります

public class ItemList
{
    public BindingList<Item> listItems { get; set; }

    // Default constructor
    public ItemList()
    {
        listItems = new BindingList<Item>();
    }
    public BindingList<Item> returnList()
    {
        return listItems;
    }
    public void addItem(Item newItem)
    {
        listItems.Add(newItem);
    }
}

次に、listItemsからdatagridviewにリンクされているBindingSourceがあります

問題は、アイテムをlistItemsに追加しているのに、データグリッドビューに表示されないことです。datagridviewはすべてのデータメンバーを表示し、それらの列を作成していますが、アイテムは表示されていません。

4

1 に答える 1

1

これを試してみてください。listItemsの代わりにItemListインスタンスを追加しているように感じます。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        ItemList list = new ItemList();
        list.listItems.Add(new Item() { name = "Sample" });
        list.listItems.Add(new Item() { name = "Sample" });
        list.listItems.Add(new Item() { name = "Sample" });
        list.listItems.Add(new Item() { name = "Sample" });
        list.listItems.Add(new Item() { name = "Sample" });
        list.listItems.Add(new Item() { name = "Sample" });

        dataGridView1.DataSource = list.listItems;

    }
}

public class Item : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private string name_;

    public string name
    {
        get { return name_; }
        set
        {
            name_ = value;
            this.NotifyPropertyChanged("name");
        }
    }
    private void NotifyPropertyChanged(string name)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(name));
    }
}

public class ItemList
{
    public BindingList<Item> listItems { get; set; }

    // Default constructor 
    public ItemList()
    {
        listItems = new BindingList<Item>();
    }
    public BindingList<Item> returnList()
    {
        return listItems;
    }
    public void addItem(Item newItem)
    {
        listItems.Add(newItem);
    }
} 
于 2012-06-28T20:11:18.540 に答える