我目前正在开发一个处理文件并创建数据的项目,并为处理结果创建一个“excel”外观数据网格视图。 该流程将打开一个新文件并单击该过程。之后,datagridview将显示包含已处理数据的表。以下是创建表并输入每列值的函数。
public DataTable createDataTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("Date Time");
dt.Columns.Add("CAT Protocol");
dt.Columns.Add("Display");
//dt.Columns.Add("Command ID");
dt.Columns.Add("Command Description");
List<string> timeList = time();
List<string> catList = read(userSelectedFilePath);
List<string> displayList = translate(catList);
List<string> idList = commandID(catList);
List<string> descList = commandDescription(idList);
int rows = catList.Count();
for (int i = 0; i < rows; i++)
{
DataRow _myRow = dt.NewRow();
_myRow["Date Time"] = timeList.ElementAt(i);
_myRow["CAT Protocol"] = catList.ElementAt(i);
_myRow["Display"] = displayList.ElementAt(i);
//_myRow["Command ID"] = idList.ElementAt(i);
_myRow["Command Description"] = descList.ElementAt(i);
dt.Rows.Add(_myRow);
}
return dt;
}
然后用户可以使用“查找”功能,该功能将根据用户的输入刷新结果。当用户选择“查找”时,将弹出一个文本框。当用户按Enter键时,将根据命令描述刷新数据表。 我想我需要在这个函数中编写一些代码。
private void TextBoxKeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
//write something here
}
}
答案 0 :(得分:0)
您可以使用LINQ获取相应行的所有索引:
var indices = descList.Select((desc, index) => new { desc, index = index }).Where(item => item .desc.Contains(SearchTextBox.Text)).Select(item => item.index).ToList();
然后清除你的DataGridView
并读取所有带有索引的项目,你得到。
for (int i = 0; i < indices.Count; i++)
{
DataRow _myRow = dt.NewRow();
_myRow["Date Time"] = timeList.ElementAt(indices[i]);
_myRow["CAT Protocol"] = catList.ElementAt(indices[i]);
_myRow["Display"] = displayList.ElementAt(indices[i]);
//_myRow["Command ID"] = idList.ElementAt(indices[i]);
_myRow["Command Description"] = descList.ElementAt(indices[i]);
dt.Rows.Add(_myRow);
}
此外,我建议你为每一行构建一个类:
public class LogLine{
public DateTime Date {get;set;} //maybe Convert to DateTime or change to string
public string Protocol {get;set;}
public string Display {get;set;}
public string Command {get;set;}
}
稍后,您只需使用List<LogLine>
填充DataGridView
。
这将使您的代码更清晰,并将简化大部分代码。