2010-01-21 78 views
4

這將是一個愚蠢的問題,但我有一個DataGridview作爲數據源的BindingSource。Datagridview/BindingSource和排序:在列表末尾添加記錄

bindingSources.Datasource是一個支持排序的自己的BindingList。所有這些工作。

但是當一個記錄被插入到排序列表中時,它將被放置在datagridiview的末尾。刷新後(例如點擊鼠標),記錄將被放置在正確的位置。

所以,我認爲我忘記了一些東西來實現或調用,以確保插入的記錄直接顯示在datagridview的正確位置。

誰能幫我一個小費。

謝謝。

+0

你有沒有實現類似MSDN SortableBindingList?一些代碼可能有助於解決這個問題。你是否直接將記錄插入到綁定列表中? – 2010-01-21 22:30:30

+2

不是一個愚蠢的問題。 – John 2010-01-21 22:32:34

+0

@大衛,那是真的。示例爲我與BindingList diid:http://www.martinwilley.com/net/code/forms/sortablebindinglist.html – robertpnl 2010-01-21 22:42:52

回答

0

我有以下代碼工作。

請原諒粗略的代碼 - 我只是展示了關鍵部分,但如果需要,我可以提供更完整的示例。

我有一個SortableBindingList _names綁定到我的DataGridView。然後在我的表單中,我有一個按鈕,在Click Click處理程序中添加了一個新名稱。這是工作正常添加名稱凱文之間joe皮特

private SortableBindingList<Names> _names; 

public Form1() 
{ 
    InitializeComponent(); 

    _names = new SortableBindingList<Names>(); 
    _names.Add(new Names() { Name = "joe" }); 
    _names.Add(new Names() { Name = "pete" }); 

    DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn(); 
    col1.DataPropertyName = "Name"; 

    dataGridView1.Columns.Add(col1); 

    dataGridView1.DataSource = _names;    
} 

private void button1_Click(object sender, EventArgs e) 
{    
    _names.Add(new Names(){Name = "kevin"}); 
    dataGridView1.Sort(dataGridView1.Columns[0], ListSortDirection.Descending); 
} 


public class Names 
{ 
    public string Name { get; set; } 
} 

所以關鍵是我添加到列表後排序我的dataGridView。

我可以在我的.sort()調用還提供了一個IComparer的 - 默認的比較只是比較上的ToString()

有趣的是,在我的例子,下面還工作,插入項目時:

private void button1_Click(object sender, EventArgs e) 
{    
    //_names.Add(new Names(){Name = "kevin"}); 
    _names.Insert(1, new Names() { Name = "kevin" }); 
    // dataGridView1.Sort(dataGridView1.Columns[0], ListSortDirection.Descending); 
} 

只需將項目插入正確的位置就足以使網格顯示正確排序的列表。我使用的是與您一樣的SortableBindingList,即MartinWilley.com上顯示的那個。

你的問題可能是你添加,而不是插入?

+0

嗨大衛, 感謝您的代碼。我認爲你的代碼可以幫助我。我會嘗試使用插入而不是添加。 – robertpnl 2010-01-22 08:13:09

0

也許嘗試處理BindingSource.ListChanged事件?

+0

謝謝。我用LastChangedtype.Reset覆蓋函數Endnew添加一個ListChanged,但記錄將再次放在列表的末尾。 – robertpnl 2010-01-21 22:44:04

相關問題