代码之家  ›  专栏  ›  技术社区  ›  Rashmi Pandit

如何防止数据网格视图排序

  •  14
  • Rashmi Pandit  · 技术社区  · 17 年前

    有人能告诉我如何禁用网格视图排序吗?

    谢谢:)

    编辑:

    7 回复  |  直到 17 年前
        1
  •  21
  •   Rashmi Pandit    17 年前

    好的,找到答案了。对于每一列,我都需要明确指定

    this.dgv.Columns[1].SortMode = DataGridViewColumnSortMode.NotSortable;
    

    所以我在Helper类中编写了自己的函数

    /// <summary>
    /// Sets the sort mode for the data grid view by setting the sort mode of individual columns
    /// </summary>
    /// <param name="dgv">Data Grid View</param>
    /// <param name="sortMode">Sort node of type DataGridViewColumnSortMode</param>
    public static void SetGridViewSortState(DataGridView dgv, DataGridViewColumnSortMode sortMode)
    {
        foreach (DataGridViewColumn col in dgv.Columns)
            col.SortMode = sortMode;
    }
    

    无论在哪里,我都需要使网格视图不可排序,我这样称呼它:

    Helper.SetGridViewSortState(this.dgv, DataGridViewColumnSortMode.NotSortable);
    
        2
  •  3
  •   ChrisF    17 年前
    For i = 0 To DataGridView1.Columns.Count - 1
        DataGridView1.Columns.Item(i).SortMode = DataGridViewColumnSortMode.Programmatic
    Next i
    

    webgridview有一个属性AllowSorting,这要容易得多!

        3
  •  2
  •   Marc Gravell    17 年前

    DataTable 也许吧?一种选择是简单地使用不支持排序的数据源,这几乎是所有的数据源。 List<T> BindingList<T> etc-不提供排序。

    DataView IBindingList (返回 false SupportsSorting 做任何其他事情。..)

        4
  •  0
  •   tyne    8 年前

    我为我的数据网格视图使用绑定源和数据表。为了绕过数据视图完成的所有底层自动排序,我为每一行都有一个数据库id号,这样我就可以使用数据网格视图列出我的id号(来自所选行),然后我可以搜索我的数据表中的每条记录并在那里进行更改。我可能也可以直接对datagridview本身做同样的事情。需要明确的是,我实际上不确定我是否绕过了自动排序,但这里的方法不会因为行在自动排序中移动而遗漏任何行。如果你的数据库非常大,这可能不好,因为它需要在整个数据库中搜索每一条记录。

    我有一个员工数据库,我可以选择多行,然后从组合框中选择一个职务代码,单击按钮为每行设置职务代码。我可能不需要暂停绑定源,但无论如何。..

    Private Sub SetCodeBtn_Click(sender As Object, e As EventArgs) Handles SetCodeBtn.Click
        If current_db_name = "employees" Then
            Dim db_id_col As Integer = FindDataGridColumn("DB_ID", DataGridView1.Columns)
            Dim job_code_col As Integer = FindDataGridColumn("JOBCODE", DataGridView1.Columns)
            Dim new_job_code As String = JobCodesCBX.Text
            Dim db_id_list As IList(Of String) = New List(Of String)
            For Each row As DataGridViewRow In DataGridView1.SelectedRows
                db_id_list.Add(row.Cells.Item(db_id_col).Value)
            Next
            For Each id As String In db_id_list
                For Each table_row As DataRow In tables_data("employees").Rows
                    If table_row(tables_data("employees").Columns.IndexOf("DB_ID")) = id Then
                        table_row(tables_data("employees").Columns.IndexOf("JOBCODE")) = new_job_code
                    End If
                Next
            Next
            table_changes_made = True
            RefreshDataGridView(DataGridView1)
            BindingSource1.ResumeBinding()
        Else
            MsgBox("You Must Select Rows In The Employees Database To Set A Job Code.")
        End If
    End Sub 
    

    Screenshot of my Program

        5
  •  -1
  •   GWLlosa    17 年前

    或者你可以创建自己的函数

    Private Sub NotSortGrid()
            For i = 0 To dgvUtil.Columns.Count - 1
                dgvUtil.Columns.Item(i).SortMode = DataGridViewColumnSortMode.NotSortable
            Next i
    End Sub
    
        6
  •  -1
  •   Marcus Santodonato    13 年前

    推荐文章