C# 在保留索引的同时隐藏DataGridView行
我有一个DataGridView,用于显示自定义类foo的数据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
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;。