排序后获取DataGridRow

时间:2017-11-08 17:40:59

标签: c# vb.net datagridview

在vb.net或c#中,DataGridViews有一种内置方法,即使在对行进行排序后也总是将一行分配给一个id。

使用

For Each row In DataGridView1.Rows
    debug.writeline(row.cells(0).value)
Next

受行当前位置的影响,而不是它们被添加的位置。

我知道你可以添加一个隐藏的id列,并在每次添加行时递增它,但我不知道是否有内置的方法来执行此操作。

修改

我有一个填充数据网格视图的值列表,然后可以编辑网格视图,编辑后,需要更新值列表。因此,如果你有一行说“丰田”,“黄色”,你把它改为“丰田”,“红色”id要求“丰田”,“黄色”指数成为“丰田”,“红色”

基本上是一个sql表但是在list(of string())中。

1 个答案:

答案 0 :(得分:0)

(可能)在未绑定的DataGridView中,您可能可以将HashCode用作每行的Id。

        public Form1()
    {
        InitializeComponent();

        dgv.Columns.Add(new DataGridViewTextBoxColumn());
        dgv.Columns.Add(new DataGridViewTextBoxColumn());

        dgv.Rows.Add("key1", "value1");
        dgv.Rows.Add("key2", "value2");
        dgv.Rows.Add("key3", "value3");

        Debug.Print("original");
        dispHash();

        /*sorting*/
        dgv.Sort(dgv.Columns[1], ListSortDirection.Descending);

        Debug.Print("sorted");
        dispHash();

        /*edit*/
        dgv[1, 2].Value = "changed";
        Debug.Print("edited");
        dispHash();

        /*deleted*/
        dgv.Rows.Remove(dgv.Rows[1]);
        Debug.Print("removed");
        dispHash();

        /*add*/
        dgv.Rows.Add("key4", "value4");
        Debug.Print("add");
        dispHash();
    }

    private void dispHash()
    {
        foreach (DataGridViewRow row in dgv.Rows)
        {
            Debug.Print(row.Cells[0].Value + ":" + row.GetHashCode());
        }
    }

原 KEY1:41014879 KEY2:3888474 KEY3:25209742 :26966483

排序 KEY3:25209742 KEY2:3888474 KEY1:41014879 :26966483

编辑 KEY3:25209742 KEY2:3888474 KEY1:41014879 :26966483

除去 KEY3:25209742 KEY1:41014879 :26966483

添加 KEY3:25209742 KEY1:41014879 KEY4:31884011 :26966483