2017-07-19 58 views
-1

我目前正在處理一個文件並創建一個數據併爲處理結果創建一個「excel」外觀數據網格視圖的項目。 流程打開一個新文件並單擊進程。之後,datagridview將顯示一個包含已處理數據的表格。以下是創建表格併爲每列輸入值的功能。在Datatable中搜索

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; 
    } 

然後用戶可以使用「查找」功能,它將根據用戶的輸入刷新結果。當用戶選擇查找時,會彈出一個文本框。當用戶按回車鍵時,數據表將根據命令描述刷新。 我想我需要在這個函數中編寫一些代碼。

private void TextBoxKeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Enter) 
     { 
      //write something here 
     } 
    } 

這是我的界面的屏幕截圖。 enter image description here 我的問題是如何在此應用程序中實現查找功能。我會非常感謝各種幫助。謝謝!

回答

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

這會讓你的代碼更清潔,並且會簡化大部分代碼。