私は、最初の列の名前と他の列の追加情報を持つデータグリッドを持つwpfアプリケーションを持っています。名前はソート順です。ユーザーがキーボード上のキー、たとえばpを押すと、名前がpで始まる最初の行にデータグリッドを移動します。ユーザーがeを押すと、peなどで始まる最初の行に移動します。これはデータグリッドで可能ですか?私はこれについて何か事例を見つけることができませんでした。助けてください。ユーザのキー押下でデータグリッドの最初の列を検索するには
1
A
答えて
0
可能です。 DataGridの簡単な例:あなたはのKeyDownイベントを追加する必要があり、そのために
private void DgUsers_OnKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
foreach (var row in dgUsers.Items)
{
User user = (User) row;
user.Name = e.Key.ToString();
dgUsers.SelectedItem = row;
break;
}
}
2
: http://www.wpf-tutorial.com/datagrid-control/details-row/ 次に簡単なの背後にあるイベントデータグリッド
<DataGrid Name="dgUsers" AutoGenerateColumns="False" KeyDown="DgUsers_OnKeyDown">
にKeyDownイベントのコードを処理します。 ステップ1:OnkeyDownイベントはキーのテキストを取得します。 ステップ2:あなたの条件に従ってアイテムをリストから探します。 手順3:選択した項目を変更します。 手順4:DataGridを選択した項目にスクロールします。
私のケースでは、ウィンドウkeydownイベントが正常に動作します。行が選択されたときにDataGridイベントが機能しました。
ここはコードです。
List<Employee> empData = new List<Employee>();
private Task task;
private CancellationToken token;
private CancellationTokenSource tokenSource;
private string searchText = "";
KeyDownEvent:きれいなテキストの
private void OnKeyDown(object sender, KeyEventArgs e)
{
if (task != null && tokenSource != null)
{
// cancel task
tokenSource.Cancel();
tokenSource = null;
Console.WriteLine("Task cancel");
}
// Set condition for key
string txt = new KeyConverter().ConvertToString(e.Key);
if (txt.ToString().ToList().Any(x => !Char.IsLetterOrDigit(x)))
{
Console.WriteLine("Retrun from.");
return;
}
searchText = searchText + new KeyConverter().ConvertToString(e.Key);
Console.WriteLine("Search text : " + searchText);
var item = empData.FirstOrDefault(x=>x.FirstName.StartsWith(searchText));
if (item != null)
{
myGrid.SelectedItem = item;
myGrid.UpdateLayout();
myGrid.ScrollIntoView(myGrid.SelectedItem);
}
// create task for clean text
Console.WriteLine("Task generate");
tokenSource = new CancellationTokenSource();
token = tokenSource.Token;
task = new Task(()=> CleanSearchText(token), token);
task.Start();
}
タスクいつか
private void CleanSearchText(CancellationToken token)
{
// Throw if cancellation request
token.ThrowIfCancellationRequested();
// Wait for sometime for next key prss
Thread.Sleep(400);
// Do nothing if cancelation request
if (token.IsCancellationRequested)
{
return;
}
Console.WriteLine("Clean text");
searchText = "";
}
0
この後は、既に構築されています!
<DataGrid IsTextSearchEnabled="True" ...
ここで、モデルToStringメソッドで検索したいテキストを返すようにしました。完了!
も参照してください。https://msdn.microsoft.com/en-us/library/system.windows.controls.textsearch.aspx
関連する問題
- 1. 最初のキー押下遅延を削除する
- 2. Ajaxライブ検索最初のキーを押した後にタイマーを追加
- 3. バーチャルキーボードのキー押下を検出する
- 4. キー押下での文字の検出
- 5. 深さ最初に並列で検索
- 6. Altキーを1回押すだけでキー押下を検出する方法
- 7. 検索キーの最初と最後の間でコンテンツを検索して出力するバッチコマンド
- 8. コンソールのキー押下を検出する方法は?
- 9. LWUIT形式のキー押下イベントを検出する方法は?
- 10. 最初に配列を検索
- 11. Vue.jsで複数のキーの押下(上/下)を検出する方法
- 12. Parse Serverユーザ名の下にあるキーワードを検索するクエリ
- 13. テキストを含む最初のセルの行、下から検索
- 14. Pythonのキー押下を検出する最も簡単な方法
- 15. ユーザのマウスクリックを検出してキーを押す
- 16. Excelの最初の列のみを検索する方法
- 17. セマンティック検索の後に「Enter」キーを押したときの検索
- 18. ドロップダウンリストで検索するときにEnterキーを押す方法
- 19. JavaFXで単一キーの押下を検出します
- 20. Generic SortedList、検索キーよりも大きい最初の要素のインデックスを検索する方法は?
- 21. LISP - 最初の検索
- 22. データグリッドをソートして検索した後、最初の行のフォーカスを保持する方法は?
- 23. 連想配列に番号の最初の出現を検索
- 24. ライブ検索django。最初の記号の中からキーで検索する方法
- 25. キーの押下でプログラムを最小化して最大化する
- 26. 配列の複数のキーを検索し、最初に見つかった値を返す方法は?
- 27. ウェブブラウザでキー押下を検出する方法
- 28. LdapLoginModule最初に非匿名の検索を検索
- 29. のjQuery ::キー押下とフォーカス
- 30. NSTextViewのキー押下イベント(macOS)
これは受け入れられる回答である必要があります。 –