【问题标题】:Sort dataGridView columns in C# ? (Windows Form)在 C# 中对 dataGridView 列进行排序? (Windows 窗体)
【发布时间】:2010-10-22 20:18:25
【问题描述】:

我有一个从 sql 表绑定的 datagridview,在该 dv 中我有这些属性:Id、Name 和 Price。当我将名称列的 SortMode 设置为自动并单击此列的标题时,我可以根据名称的第一个字母对该 dv 进行排序,这样我可以根据产品的第一个字母(Acumulator、Boat、可口可乐、发动机等)。

有没有办法在不单击列名称的情况下发生这种情况。我正在寻找一些可以在表单加载时完成这项工作的代码。

【问题讨论】:

  • 答案是:this.dataGridView1.Sort(this.dataGridView1.Columns["Name"],ListSortDirection.Ascending);
  • olumnheader 点击 c# datagridview

标签: c# winforms datagridview sorting grid


【解决方案1】:

DataGridView 上有一个名为“Sort”的方法:

this.dataGridView1.Sort(this.dataGridView1.Columns["Name"], ListSortDirection.Ascending);

这将以编程方式对您的 datagridview 进行排序。

【讨论】:

  • 排序消耗的时间怎么样,他想在负载中排序,那么在执行SQL语句而不是绑定之后排序呢!我认为它会消耗更多时间
  • 是的,Ahmy 是对的,就性能而言,最好在数据库端对其进行排序。因此,如果您使用 SQL 直接与数据库交互,请在查询末尾附加一个 order by。我只是在回答问题。这是在代码中对 DGV 进行排序的方法。
  • 好的,如果 AXheladini 需要它,那没关系,但我从他的问题中了解到他在 UI 中不需要它,所以我想节省时间,我很高兴 AXheladini 找到了解决方案并且这就是我们希望从我们的答案中得到的结果
  • Ahme 你的解决方案没问题,但正如我告诉你的那样,我正在从 UI 填充这个网格,我没有用 c# 编码。顺便说一句,如果我们用代码完成所有这些工作,您的解决方案就可以工作。我试过了,但我需要的是 BFree 的答案。感谢所有试图回答这个问题的人。
【解决方案2】:
dataGridView1.Sort(dataGridView1.Columns[0],ListSortDirection.Ascending);

【讨论】:

  • 我同意使用数字索引比使用字符串索引更好,因为如果您将来更改列名,您也必须更改字符串索引。
【解决方案3】:

这个比较简单:)

dataview dataview1; 
this.dataview1= dataset.tables[0].defaultview;
this.dataview1.sort = "[ColumnName] ASC, [ColumnName] DESC";
this.datagridview.datasource = dataview1;

【讨论】:

    【解决方案4】:

    您可以通过对返回的数据进行排序来控制从 SQL 数据库返回的数据:

    orderby [Name]
    

    如果您从应用程序执行 SQL 查询,请对返回的数据进行排序。例如,创建一个调用过程或执行 SQL 的函数,并给它一个获取 orderby 条件的参数。因为如果您对从数据库返回的数据进行排序,它将消耗时间,但由于它是按照您所说的那样执行而不是从 UI 中排序的,因此您希望在运行时对其进行排序,因此在执行 SQL 时对其进行排序查询。

    【讨论】:

    • 我正在自动绑定 datagridview 我不使用查询。有没有办法访问数据源的查询并纠正这个问题?
    • 我的意思是查询数据库并返回数据的SQL语句在你使用的过程中或在DAL层的SQL语句中添加语法orderby
    【解决方案5】:

    最好的方法是在绑定数据源之前对列表进行排序。

    cars = cars.OrderBy(o => o.year).ThenBy(o => o.color).ToList(); adgCars.DataSource = cars;

    对不起,我的英语不好。

    【讨论】:

      【解决方案6】:

      使用Datatable.Default.Sort属性,然后将其绑定到datagridview。

      【讨论】:

        【解决方案7】:

        我知道这个问题的 2 个解决方案。

        1.排序(DataGridViewColumn 列,ListSortDirection 方向)函数

        此函数可用于按字母或数字或日期的降序或升序对列进行排序。

        示例:

        dataGridView.Sort(dataGridView1.Columns[5],ListSortDirection.Ascending);
        

        2。排序(IComparer 比较器)函数

        此功能可用于所有其他情况

        以不同于数字顺序的特定顺序对列进行排序(例如:仅使用绝对值对可以为负数或正数的金额进行排序)

        以不同于字母顺序的特定顺序对列进行排序(例如:使用不区分大小写的排序对文本进行排序)

        将多个列排序为使用 AMOUNT 列作为第一列和 DATE 列作为第二列的表排序。

        VB.Net 示例:

        Private Sub pbSort_Click(sender As Object, e As EventArgs) _ 
            Handles pbSort.Click
        
            grid.Sort(New AmountDateComparer(Me))
        End Sub
        
        Private Class AmountDateComparer : Implements IComparer
        
            Private frm As FrmSearch
        
            Public Sub New(frm As FrmSearch)
                Me.frm = frm
            End Sub
        
            Public Function Compare(x1 As Object, x2 As Object) As Integer _
                Implements IComparer.Compare
        
                Dim row1 As DataGridViewRow = x1
                Dim row2 As DataGridViewRow = x2
        
                ' compare AMOUNT values of columns
        
                Dim nAmount1 = Convert.ToDecimal(row1.Cells(frm.Col_AMOUNT.Index).Value)
                Dim nAmount2 = Convert.ToDecimal(row2.Cells(frm.Col_AMOUNT.Index).Value)
        
                Dim iCompareResult As Integer 
                    = System.Decimal.Compare(nAmount1, nAmount2)
        
                If iCompareResult = 0 Then
                    'compare DATE values of columns
                    Dim d1 = Convert.ToDateTime(row1.Cells(frm.Col_DATE.Index).Value)
                    Dim d2 = Convert.ToDateTime(row2.Cells(frm.Col_DATE.Index).Value)
        
                    iCompareResult = System.DateTime.Compare(d1, d2)
                End If
        
                Return iCompareResult
            End Function
        End Class
        

        【讨论】:

          猜你喜欢
          • 2015-12-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-12
          • 2015-10-26
          • 1970-01-01
          相关资源
          最近更新 更多