Datagridview/BindingSource并排序:在列表末尾添加记录

rob*_*pnl 5 c# datagridview

这将是一个愚蠢的问题,但我有一个带有BindingSource作为数据源的datagridview.

bindingSources.Datasource是一个自带的BindingList,具有排序支持.这一切都有效.

但是当一个记录将被插入到排序列表中时,它将被放置在datagridiview的末尾.刷新后(单击鼠标的示例),记录将放在正确的位置.

所以,我认为我忘了要实现或调用以确保插入的记录将直接显示在datagridview的正确位置.

谁可以帮我提示.

谢谢.

Dav*_*all 1

我使用以下代码进行了此操作。

请原谅粗糙的代码 - 我只是展示关键部分,但如果您需要,我可以提供更完整的示例。

我有一个 SortableBindingList _names 绑定到我的 DataGridView。然后在我的表单上有一个按钮,在单击事件处理程序中添加了新名称。在joepete之间添加名字kevin效果很好。

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; }
}
Run Code Online (Sandbox Code Playgroud)

所以关键是我在添加到列表后对 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);
}
Run Code Online (Sandbox Code Playgroud)

只需将项目插入正确的位置就足以使网格显示正确排序的列表。我使用与您相同的 SortableBindingList,即 MartinWilley.com 上显示的那个。

您的问题可能是您正在添加而不是插入吗?