2010-01-21 52 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