排序方向在datagridview中不起作用

时间:2013-07-16 12:14:05

标签: c# datagridview

我创建了一个datagridview,并将每列的sort mode属性设置为Automatic。然后我将datagridview与列表绑定,并尝试按升序或降序排序,但两者都不适用于我的datagridview列。

我的示例代码如下所示。

    using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace PBAttendance
{
    public partial class frmFormTest : Form
    {
        public frmFormTest()
        {
            InitializeComponent();
        }

        private void frmFormTest_Load(object sender, EventArgs e)
        {
            tempDataList tmplist = new tempDataList();
            for(int i=0; i<10; i++)
            {
                tempData tmp = new  tempData();
                tmp.Name=i.ToString();
                tmplist.Add(tmp);
            }


            dataGridView1.Columns[0].DataPropertyName = "Name";
            BindingSource bs = new BindingSource();
            bs.DataSource = tmplist;
            dataGridView1.DataSource = bs;
        }
    }
    public class tempData
    {
        string name = null;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }

    }
    public class tempDataList : List<tempData>
    {
    }
}

1 个答案:

答案 0 :(得分:0)

默认情况下,List不支持在绑定到DataGridView(DGV)时进行排序。有关可行的解决方案,请参阅How do I implement automatic sorting of DataGridView?。我的目的是使用BindingListView library使代码像bs.DataSource = new BindingListView<tempData>(tmplist);一样简单。

关于样式和语法的另外一个注释,因为看起来你已经习惯了Java并且存在一些差异:

  • 类名是PascalCase(例如TempDataList,但在您提供的代码段中,使用var tmplist = new List<tempData>()没有任何不利之处)
  • 局部变量可以是任何但通常是camelCase(例如tmpList,但是使用Visual Studio的intellisense时没有理由在变量名称中包含该类型。)
  • 子类通常附加其基类的名称,例如:虽然匈牙利表示法(TestForm)对扩展基类库的文件名和类仍有一些优势,但frmFormTest代替frmTest。 (但在大多数情况下,这些优点不会扩展到变量名称:最好是bool isFormValidated而不是bool bValid。)
  • 关于properties,尤其是auto-properties而不需要支持字段,只需执行public string Name {get; set;}string s的默认值为null)。如果您想要默认值,请使用readonly propertypublic string Name {get; private set;})并在构造函数中设置其值,否则您可以使用支持字段。

我不指出这些是一个混蛋(如果我冒犯了,我很抱歉);几年前这些对我来说是有用的指针,也许其他不熟悉C#的人会发现它们很有用。另请注意style can be automatically checked(并且已修复,例如使用ReSharper或CodeRush)。

最后,关于.net 的最好的书,特别是对于中级程序员来说,是Cwalina和Abrams的Framework Design Guidelines(无论你是否在设计框架)。