2011-08-08 154 views
0

Googleの検索結果を調べようとしました。運がない。私がしようとしているのは、TextBoxの一部のテキストでは、DataGridViewの任意の列で少なくとも部分的に一致するものを検索し、コントロールに最初の行を選択させます(一番上の行として表示して強調表示させます)その部分一致と遭遇することを意味する。ここで一致または部分一致のDataGridViewの検索

はDataGridViewのためのデータソースとどの列が編成されているの私の宣言です:

var queryData = from va in xdoc.Descendants("language") 
        select new 
        { 
         StringID = va.Parent.Parent.Attribute("id").Value, 
         Language = va.Attribute("name").Value, 
         LanguageData = va.Element("value").Value, 
        }; 

     var organizedData = from x in queryData 
        group x by x.StringID into xg 
        select new 
        { 
         StringID = xg.Key, 
         English = xg.SingleOrDefault(x => x.Language == "ENGLISH_US").LanguageData, 
         Custom = xg.SingleOrDefault(x => x.Language == languageBox.SelectedItem.ToString()).LanguageData, 
        }; 

     mainView.DataSource = organizedData.ToList(); 

そしてここでは、「検索」ボタンのクリックを処理する関数の現在の定義でありますこのような

private void searchButton_Click(object sender, EventArgs e) 
    { 
     int currentIndex = mainView.CurrentRow.Index; 

     if (searchBox.Text.Length == 0) 
     { 
      mainView.CurrentCell = mainView[0,0]; 
      mainView.Focus(); 
      return; 
     } 
    } 
+0

可能重複彼のLinqクエリ](http://stackoverflow.com/questions/6988865/filtering-this-linq-query) –

+1

あなたの質問を最初に正しくフレーズしてみてください。それに少し時間を費やす。そうでない場合は、編集して再投稿しないでください。 –

+0

Henkに感謝しますが、これは2つの異なる質問です。質問の中に重複した内容が重複した質問を示していると仮定するのとは対照的に、質問される質問をより詳細に調べてみてください。 –

答えて

1

何かが、あなたは閉じてしまうかもしれません:[フィルタリングト​​ンの

string searchForText = "whatever"; 

DataGridViewRow rowFound = mainView.Rows.OfType<DataGridViewRow>() 
    .FirstOrDefault(row => row.Cells.OfType<DataGridViewCell>() 
     .Any(cell => ((dynamic)cell.Value).StringID.Contains(searchForText))); 

if (rowFound != null) { 
    mainView.Rows[rowFound.Index].Selected = true; 
    mainView.FirstDisplayedScrollingRowIndex = rowFound.Index; 
} 
+0

これはかなり良い仕事ですが、何らかの理由で最初の列にテキストが含まれている行には行かないのです。途中で返事をありがとう! –

+1

Odd。最初の列について特別なことはありますか?それはコンボボックスなのか、それとも違うの? –

+0

Mm、nope。それはOPのLinqクエリからの "StringID"匿名型です。また、可能であれば、「検索」ボタンを連続してクリックすると、DataGridViewの選択された行が次の候補になります。 –

関連する問題