2017-07-19 10 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; 
    } 

ユーザーは、ユーザーの入力に基づいて結果を更新する「検索」機能を使用することができます。ユーザーが[検索]を選択すると、テキストボックスが表示されます。ユーザーがEnterを押すと、コマンド説明に基づいてデータテーブルが更新されます。 私はこの関数にいくつかのコードを書く必要があると思います。

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

ここに私のインターフェイスのスクリーンショットがあります。 enter image description here 私の質問は、このアプリケーションでfind関数を実装する方法です。私は本当にあらゆる種類の助けに感謝します。ありがとう!

答えて

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

後で、単にあなたのDataGridViewを埋めるためにList<LogLine>を使用することができます。

これにより、コードがきれいになり、コードの多くが単純化されます。

関連する問題