我创建了一个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>
{
}
}
答案 0 :(得分:0)
默认情况下,List不支持在绑定到DataGridView(DGV)时进行排序。有关可行的解决方案,请参阅How do I implement automatic sorting of DataGridView?。我的目的是使用BindingListView
library使代码像bs.DataSource = new BindingListView<tempData>(tmplist);
一样简单。
关于样式和语法的另外一个注释,因为看起来你已经习惯了Java并且存在一些差异:
TempDataList
,但在您提供的代码段中,使用var tmplist = new List<tempData>()
没有任何不利之处)tmpList
,但是使用Visual Studio的intellisense时没有理由在变量名称中包含该类型。)TestForm
)对扩展基类库的文件名和类仍有一些优势,但frmFormTest
代替frmTest
。 (但在大多数情况下,这些优点不会扩展到变量名称:最好是bool isFormValidated
而不是bool bValid
。)public string Name {get; set;}
(string
s的默认值为null
)。如果您想要默认值,请使用readonly property(public string Name {get; private set;}
)并在构造函数中设置其值,否则您可以使用支持字段。我不指出这些是一个混蛋(如果我冒犯了,我很抱歉);几年前这些对我来说是有用的指针,也许其他不熟悉C#的人会发现它们很有用。另请注意style can be automatically checked(并且已修复,例如使用ReSharper或CodeRush)。
最后,关于.net 的最好的书,特别是对于中级程序员来说,是Cwalina和Abrams的Framework Design Guidelines(无论你是否在设计框架)。