gpt4 book ai didi

c# - 如何对绑定(bind)到 WinForm 列表的 DataGridView 中的列进行排序?

转载 作者:行者123 更新时间:2023-11-30 22:34:04 24 4
gpt4 key购买 nike

我的表单中有一个 DataGridView,我正在将该 DataGridView 绑定(bind)到一个列表。该列设置为 SortMode=Automatic

这是我的代码

List<string> lstLines = new List<string>();
StreamReader sr = new StreamReader(tbFile.Text);
while ((line = sr.ReadLine()) != null)
{
lstLines.Add(line);
}
dgvLines.DataSource = lstLines.Select(x=>new {Text=x}).ToList();

当我点击列标题时,我希望对列进行排序,但没有任何反应。

最佳答案

你可以试试这个......

对datasource为泛型List的datagridview的列进行排序的完整代码

//-------------------------------------------- ------------------------------------------//在表单中 - 在构造函数或表单加载中,填充网格。//-------------------------------------------- --------------------------------------------

    List<student> students;

private void PopulateList()
{
student std1 = new student("sss", 15, "Female");
student std2 = new student("ddd", 12, "Male");
student std3 = new student("zzz", 16, "Male");
student std4 = new student("qqq", 14, "Female");
student std5 = new student("aaa", 11, "Male");
student std6 = new student("lll", 13, "Female");

students = new List<student>();
students.Add(std1);
students.Add(std2);
students.Add(std3);
students.Add(std4);
students.Add(std5);
students.Add(std6);

dataGridView1.DataSource = students;
}

//-------------------------------------------- ----------------------------------------------

//根据列名和排序顺序进行排序的比较类//-------------------------------------------- --------------------------------------------

class StudentComparer : IComparer<Student>
{
string memberName = string.Empty; // specifies the member name to be sorted
SortOrder sortOrder = SortOrder.None; // Specifies the SortOrder.

/// <summary>
/// constructor to set the sort column and sort order.
/// </summary>
/// <param name="strMemberName"></param>
/// <param name="sortingOrder"></param>
public StudentComparer(string strMemberName, SortOrder sortingOrder)
{
memberName = strMemberName;
sortOrder = sortingOrder;
}

/// <summary>
/// Compares two Students based on member name and sort order
/// and return the result.
/// </summary>
/// <param name="Student1"></param>
/// <param name="Student2"></param>
/// <returns></returns>
public int Compare(Student Student1, Student Student2)
{
int returnValue = 1;
switch (memberName)
{
case "Name" :
if (sortOrder == SortOrder.Ascending)
{
returnValue = Student1.Name.CompareTo(Student2.Name);
}
else
{
returnValue = Student2.Name.CompareTo(Student1.Name);
}

break;
case "Sex":
if (sortOrder == SortOrder.Ascending)
{
returnValue = Student1.Sex.CompareTo(Student2.Sex);
}
else
{
returnValue = Student2.Sex.CompareTo(Student1.Sex);
}
break;
default:
if (sortOrder == SortOrder.Ascending)
{
returnValue = Student1.Name.CompareTo(Student2.Name);
}
else
{
returnValue = Student2.Name.CompareTo(Student1.StudentId);
}
break;
}
return returnValue;
}
}

//-------------------------------------------- ----------------------------------------------

//在点击列标题时执行排序//-------------------------------------------- --------------------------------------------

    private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
//get the current column details
string strColumnName = dataGridView1.Columns[e.ColumnIndex].Name;
SortOrder strSortOrder = getSortOrder(e.ColumnIndex);

students.Sort(new StudentComparer(strColumnName, strSortOrder));
dataGridView1.DataSource = null;
dataGridView1.DataSource = students;
customizeDataGridView();
dataGridView1.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = strSortOrder;
}

/// <summary>
/// Get the current sort order of the column and return it
/// set the new SortOrder to the columns.
/// </summary>
/// <param name="columnIndex"></param>
/// <returns>SortOrder of the current column</returns>
private SortOrder getSortOrder(int columnIndex)
{
if (dataGridView1.Columns[columnIndex].HeaderCell.SortGlyphDirection == SortOrder.None ||
dataGridView1.Columns[columnIndex].HeaderCell.SortGlyphDirection == SortOrder.Descending)
{
dataGridView1.Columns[columnIndex].HeaderCell.SortGlyphDirection = SortOrder.Ascending;
return SortOrder.Ascending;
}
else
{
dataGridView1.Columns[columnIndex].HeaderCell.SortGlyphDirection = SortOrder.Descending;
return SortOrder.Descending;
}
}

希望对你有帮助......

关于c# - 如何对绑定(bind)到 WinForm 列表的 DataGridView 中的列进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8011481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com