我是c#的新手,所以请原谅这种邋code的编码。 我通过单击按钮获得了我在checkedListBox中实现的数据。我使用textBox作为动态过滤功能。
string loc_ShortNamesAndPIDs_S22 = "";
service22Items = new DataTable();
service22Items.Columns.Add("Service22");
for (int i = 0; i < loc_Service22Infos.GetLength(0); i++)
{
loc_ShortNamesAndPIDs_S22 = "[" + loc_Service22Infos[i].variant + "] PID "
+ loc_Service22Infos[i].parameterId_hex
+ ": " + loc_Service22Infos[i].shortName;
//checkedListBox_Service22Data.Items.Add(loc_ShortNamesAndPIDs_S22);
service22Items.Rows.Add(loc_ShortNamesAndPIDs_S22);
}
checkedListBox_Service22Data.DataSource = ReutrnService22Items();
checkedListBox_Service22Data.DisplayMember = "Service22";
}
private DataTable ReutrnService22Items()
{
return service22Items;
}
所以在我将数据放入checkedListBox后,我使用以下代码进行过滤:
private void srchBoxItems_TextChanged(object sender, EventArgs e)
{
DataView dvNumbers = service22Items.DefaultView;
dvNumbers.RowFilter = "Service22 LIKE '%" + srchBoxItems.Text + "%'";
}
所以现在我能够过滤我的数据,这是我遇到的唯一问题,当我选中复选框以选择我想要的数据并过滤所有取消勾选复选框的内容时。 因此我想存储已经检查过的索引并再次检查它们(只是代码的一部分)......
List<int> checkedList = new List<int>();
serviceForm.ShowDialog();
this.Show();
for (int checkedItems_Counter = 0; checkedItems_Counter < checkedListBox_Service22Data.CheckedIndices.Count; checkedItems_Counter++)
{
checkedList.Add(checkedItems_Counter);
checkedList.ToArray();
但这不起作用,因为当您过滤数据时,具有索引的数据(例如56)将具有索引1.
所以我的问题是:
即使我正在过滤,有没有办法检查复选框?我找不到任何东西......如果是的话,这已经是解决方案了。
如果没有,是否可能有一种更优雅的方式来实现一个没有出现这种问题的动态过滤器。
是否有可能在第一次将数据上传到checkedListBox时保留数据的索引。有优雅的方式还是我必须添加一个索引变量?
如果还有其他问题,请提前告知我们,并提前感谢您的帮助!