相关疑难解决方法(0)

BindingList <T> .Sort()表现得像List <T> .Sort()

我正在尝试编写一个可用于我的应用程序的SortableBindingList.我发现了很多关于如何实现基本排序支持的讨论,以便BindingList在DataGridView或其他绑定控件的上下文中使用时进行排序,包括来自StackOverflow的这篇文章:
DataGridView排序和例如.NET中的BindingList <T>

这一切都非常有用,我已经实现了代码,经过测试等等,并且一切正常,但在我的特殊情况下,我需要能够支持对Sort()的简单调用,并让该调用使用默认的IComparable. CompareTo()进行排序,而不是调用ApplySortCore(PropertyDescriptor,ListSortDirection).

原因是因为我有很多代码依赖于Sort()调用,因为这个特定的类最初是从List继承的,最近被改为BindingList.

具体来说,我有一个名为VariableCode的类和一个名为VariableCodeList的集合类.VariableCode实现IComparable,其中的逻辑基于几个属性等适度复杂...

public class VariableCode : ...  IComparable ...
{
    public int CompareTo(object p_Target)
    {
        int output = 0;
        //some interesting stuff here
        return output;
    }
}

public class VariableCodeList : SortableBindingList<VariableCode>
{
    public void Sort()
    {
        //This is where I need help
        //  How do I sort this list using the IComparable
        //  logic from the class above?
    }
}
Run Code Online (Sandbox Code Playgroud)

我在Sort()中重新调整了ApplySortCore方法的尝试失败了,但是阻止我的是,ApplySortCore期望PropertyDescriptor进行排序,我无法弄清楚如何使用IComparable .CompareTo()逻辑.

有人能指出我正确的方向吗?

非常感谢.


编辑:这是基于Marc的回复的最终代码,供将来参考.

  /// <summary>
  /// Sorts using the default IComparer of …
Run Code Online (Sandbox Code Playgroud)

.net c# sorting bindinglist winforms

21
推荐指数
2
解决办法
3万
查看次数

如何实现DataGridView的自动排序?

我以编程方式将列添加到DataGridView,然后绑定到列表.默认情况下,列的SortMode是自动的.但是,当我运行我的应用程序时,单击标题无效.向上/向下箭头未显示.从阅读MSDN,关于自动排序的说法并不多.他们详细介绍了程序化排序.所以,我假设自动方式应该很容易.MSDN继续说" 除非使用列标题进行选择,否则单击列标题会自动按此列对DataGridView进行排序,并显示一个指示排序顺序的字形." 这到底是什么意思呢?我可以设置与排序冲突的网格属性吗?我错过了什么?

AutoGenerateColumns = false;
AllowUserToAddRows = false;
AllowUserToDeleteRows = false;
AllowUserToResizeRows = false;
AllowUserToResizeColumns = false;
ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
ReadOnly = true;
MultiSelect = false;
RowHeadersVisible = false;
SelectionMode = DataGridViewSelectionMode.FullRowSelect;
CellBorderStyle = DataGridViewCellBorderStyle.None;


    DataGridViewTextBoxColumn idColumn = new DataGridViewTextBoxColumn();
    idColumn.HeaderText = "ID";
    idColumn.DataPropertyName = "IDNumber";

    DataGridViewTextBoxColumn nameColumn = new DataGridViewTextBoxColumn();
    nameColumn.HeaderText = "Name";
    nameColumn.DataPropertyName = "Description";

    DataGridViewTextBoxColumn lastModifiedColumn = new DataGridViewTextBoxColumn();
    lastModifiedColumn.HeaderText = "Last Modified";
    lastModifiedColumn.DataPropertyName = "Date";

    Columns.Add(idColumn);
    Columns.Add(nameColumn);
    Columns.Add(lastModifiedColumn);

    List<IMyObject> bindingList = GetMyList(); …
Run Code Online (Sandbox Code Playgroud)

c# sorting datagridview

15
推荐指数
2
解决办法
3万
查看次数

如何对绑定到自定义对象集合的 DataGridView 进行排序?

因此,我一直在遵循Windows 窗体控件上的数据绑定指南(MAD 支持作者,该指南很棒),并且我使用它来创建自定义类并将 a 绑定DataGridView到此类的集合:

class CompleteJobListEntry
{
    private string _jobName;
    private Image _jobStatus;
    private DateTime _jobAddedDate;
    private string _jobAddedScanner;
    private string _jobAddedUser;
    private string _jobLastActivity;
    private DateTime _jobActivityDate;
    private string _jobActivityUser;

    public string JobName { get { return _jobName; } set { this._jobName = value; } }
    public Image JobStatus { get { return _jobStatus; } set { this._jobStatus = value; } }
    public DateTime JobAddedDate { get { return _jobAddedDate; } set { this._jobAddedDate …
Run Code Online (Sandbox Code Playgroud)

c# datagridview bindingsource winforms

5
推荐指数
1
解决办法
1万
查看次数

如何在列标题单击的DataGridView中对DataBound列进行排序?

我相信这应该自动处理.我绑定DataGridView到一个对象数组:

public class Entity {    
    public string Name { get; set; }     
    public int PrimaryKey { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

绑定网格:

public void BindGrid(Entity[] entities) {
    grdEntities.DataSource = entities;
}
Run Code Online (Sandbox Code Playgroud)

当我单击"名称"列中的列标题时,即使将SortMode其设置为"自动",也不会发生任何事情.列标题中也缺少排序字形.

我试过绑定到一个IBindingList也是一个,IList但这没有用.

我希望有一个简单,优雅的解决方案,可以在DataGridView或者设置属性,DataGridViewColumn而不是必须创建一个新类来支持排序.通过单击DataBound上的标题,我应该怎么做才能支持对列进行排序DataGridView

.net c# datagridview

3
推荐指数
1
解决办法
3292
查看次数

标签 统计

c# ×4

datagridview ×3

.net ×2

sorting ×2

winforms ×2

bindinglist ×1

bindingsource ×1