簡體   English   中英

將臨時數據添加到列表並將其綁定到DataGridView Winform

[英]Adding Temporary Data to List and bind it to a DataGridView Winform

我想將臨時數據放入通用列表並將其綁定到datagridview。
但是,我只能在datagridview中放置1行,我想像數據庫一樣輸入多行。

這是我嘗試過的方法,請告訴我如何解決。 謝謝 :))

MyClass
{
   private List<object> _list = new List<object>();;

   public MyClass()
   {
   }

   protected void OnClickButton(object sender, args e)
   {
     _list.Add(new { Name = textBoxName.Text, Gender = genderComboBox.Text });
     dataGridView1.DataSource = _list;
   }
}

非常感謝你! 我真的很困惑這個問題。

您可以使用BindingList<object>代替List<object> ,例如:

BindingList<object> bList = new BindingList<object>();

public MyClass()
{
}

private void button1_Click(object sender, EventArgs e)
{
    bList.Add(new { Name = "Foo", Gender = "Bar" });
    dataGridView1.DataSource = bList;
}

代碼的問題是,您要向_list添加元素,然后將列表作為網格的數據源傳遞。 第一次,一切正常。 下次它不起作用,因為DataGridView.DataSource屬性在內部執行檢查,以驗證所傳遞的對象是否等於當前對象(或更佳的引用等於),並且在不執行任何操作的情況下。

BindingList<T>之所以起作用,是因為它在修改列表時公開了事件(由網格內部使用)報告,因此,基本上,您也可以避免每次都將其傳遞給DataSource第一個除外)。


作為附帶說明,我建議您使用特定的類(如@Alex answer所示),而不是將匿名類放入object列表中。

例如,使用類似Person的自定義類,可以將一個空的BindingList<Person>傳遞給grid.DataSource然后添加其他Person對象而不會出現任何問題。

相反,您不能將空的BindingList<object>傳遞給grid.DataSource因為它會導致形成無列的網格,因此在添加任何具有公共屬性的元素之后(因為公共屬性會變成列)。 因此,您需要傳遞一個至少定義了一個對象的BindingList<object> ,以便網格可以了解列的內容並創建它們。

如果您以自己的方式使用DataGridView,似乎總是需要將其重置。

public class Person
{
    public String Name { get; set; }
    public String Gender { get; set; }
}

// Your control
private List<Person> _persons = new List<Person>();

// Click Event
dataGridView1.DataSource = null;
_persons.Add(new Person() { Name = "Test", Gender = "Male" });
dataGridView1.DataSource = _persons;

這將使用列表中的當前數據刷新datagridview

但是,使用BindingList<T>似乎是適當的方法。 (感謝@digEmAll)

private BindingList<Person> _persons = new BindingList<Person>();

// Load Event
dataGridView1.DataSource = _persons;

private void button1_Click(object sender, EventArgs e)
{
    _persons.Add(new Person() { Name = "Test", Gender = "Male" });
}

使用ObservableCollection<T>而不是列表

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM