C# 在保留索引的同时隐藏DataGridView行

C# 在保留索引的同时隐藏DataGridView行,c#,winforms,datagridview,C#,Winforms,Datagridview,我有一个DataGridView,用于显示自定义类foo的数据 public class foo { public string header{get;set;} public int value{get;set;} public bool isHidden{get;set;} } Foo从数据库中读取并从JSON字符串中进行处理,然后插入到DataGridView中以显示给用户 List<foo> listOfFoo = new List<foo&g

我有一个DataGridView,用于显示自定义类foo的数据

public class foo
{
    public string header{get;set;}
    public int value{get;set;}
    public bool isHidden{get;set;}
}
Foo从数据库中读取并从JSON字符串中进行处理,然后插入到DataGridView中以显示给用户

List<foo> listOfFoo = new List<foo>();
DataTable fooTable = new DataTable();
myDataGridView.DataSource = fooTable;

private void getFoo()
{
    JavaScriptSerializer js = new JavaScriptSerializer();
    string getData = myWebClient.DownloadString(/*url of server*/);

    Dictionary<string,object> fooArg = (Dictionary<string,object>)js.DeserializeObject(getData);
    object[] foo = (object[])fooArg["foo"];
    for(int i = 0; i < foo.Length; i++)
    {
        Dictionary<string,object> fooStep = (Dictionary<string,object>)foo[i];
        foo temp = new foo();

        temp.header = (string)fooStep["header"];
        temp.value = (int)fooStep["value"];
        temp.isHidden = (bool)fooStep["isHidden"];
        listOfFoo.Add(temp);
    }
    drawFoo();
}
private void drawFoo()
{
    fooTable.Rows.Clear();
    for(int i = 0; i < listOfFoo.Count; i++)
    {
        //myDataGridView has two columns, header and value. isHidden is not shown in the table itself
        foo i = listOfFoo.ElementAt(i);
        fooTable.Rows.Add(i.header, i.value);
    }
}
我遇到的问题是,我正在使用该行的索引来保持foos DataGridView不可排序的顺序。如果我将drawFoo函数修改为以下内容,索引是否会保留?我有一个insert函数,它将一个新的foo插入到DataGridView中当前选择的foo下面的列表中。考虑到当我将listofoo发回服务器时,它必须按照适当的顺序,这会不会扰乱索引。有没有更好的方法来处理这个问题?我愿意听取建议。谢谢,比我聪明的人

private void drawFoo()
{
    fooTable.Rows.Clear();
    for(int q = 0; q < listOfFoo.Count; q++)
    {
        //myDataGridView has two columns, header and value. isHidden is not shown in the table itself
        foo i = listOfFoo.ElementAt(q);
        fooTable.Rows.Add(i.header, i.value);
        if(i.isHidden)
            myDataGridView.Rows[q].Visible = false;
    }
}

在中间或前面添加行将更改AKK索引。躲起来是不行的。现在是哪一个?您知道新行的正确索引是什么吗?更好的方法是在记录上有唯一的ID,并使用该ID执行数据库级别的插入/更新/删除操作。这意味着您保证您正在与适当的记录交互。@TaW隐藏将保留索引,对吗。因此,如果我在隐藏的foo之前插入foo,它会将隐藏的foo向下移动,不是吗?例如,如果[0,1,2,3,4,5]是我的列表,而3是隐藏的。如果我在2和3之间添加一个名为7的foo,它看起来像[0,1,2,7,3,4,5]吗?不,它看起来总是:0,1,2,3,4,5,6。。如果需要保持原始顺序,则需要将原始索引放在单独的列中,或列或行本身的标记中:row.tag=row.index;。