diff --git a/README.md b/README.md
index bd08923..fce8605 100644
--- a/README.md
+++ b/README.md
@@ -804,6 +804,8 @@ await this.NavigateTo(cd);
### Button Grid
+#### Paging & Searching
+
## Groups
diff --git a/TelegramBotBase/Controls/ButtonGrid.cs b/TelegramBotBase/Controls/ButtonGrid.cs
index aa6de7b..472d15d 100644
--- a/TelegramBotBase/Controls/ButtonGrid.cs
+++ b/TelegramBotBase/Controls/ButtonGrid.cs
@@ -188,6 +188,7 @@ namespace TelegramBotBase.Controls
if (this.SearchQuery != null && this.SearchQuery != "")
{
+ this.CurrentPageIndex = 0;
this.Updated();
}
@@ -480,7 +481,14 @@ namespace TelegramBotBase.Controls
if (this.ButtonsForm.Count == 0)
return 1;
- return (int)Math.Ceiling((decimal)(this.ButtonsForm.Rows / (decimal)(MaximumRow - 3)));
+ var bf = this.ButtonsForm;
+
+ if (this.EnableSearch && this.SearchQuery != null && this.SearchQuery != "")
+ {
+ bf = bf.FilterDuplicate(this.SearchQuery);
+ }
+
+ return (int)Math.Ceiling((decimal)(bf.Rows / (decimal)(MaximumRow - 3)));
}
}
diff --git a/TelegramBotBaseTest/Tests/Controls/ButtonGridForm.cs b/TelegramBotBaseTest/Tests/Controls/ButtonGridForm.cs
index 82ed2cc..2158621 100644
--- a/TelegramBotBaseTest/Tests/Controls/ButtonGridForm.cs
+++ b/TelegramBotBaseTest/Tests/Controls/ButtonGridForm.cs
@@ -44,7 +44,7 @@ namespace TelegramBotBaseTest.Tests.Controls
}
- private async void Bg_ButtonClicked(object sender, ButtonClickedEventArgs e)
+ private async Task Bg_ButtonClicked(object sender, ButtonClickedEventArgs e)
{
if (e.Button == null)
return;
diff --git a/TelegramBotBaseTest/Tests/Controls/ButtonGridPagingForm.cs b/TelegramBotBaseTest/Tests/Controls/ButtonGridPagingForm.cs
new file mode 100644
index 0000000..d7b5447
--- /dev/null
+++ b/TelegramBotBaseTest/Tests/Controls/ButtonGridPagingForm.cs
@@ -0,0 +1,73 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using TelegramBotBase.Args;
+using TelegramBotBase.Controls;
+using TelegramBotBase.Form;
+
+namespace TelegramBotBaseTest.Tests.Controls
+{
+ public class ButtonGridPagingForm : AutoCleanForm
+ {
+
+ ButtonGrid m_Buttons = null;
+
+ public ButtonGridPagingForm()
+ {
+ this.DeleteMode = TelegramBotBase.Enums.eDeleteMode.OnLeavingForm;
+
+ this.Init += ButtonGridForm_Init;
+ }
+
+ private async Task ButtonGridForm_Init(object sender, InitEventArgs e)
+ {
+ m_Buttons = new ButtonGrid();
+
+ m_Buttons.KeyboardType = TelegramBotBase.Enums.eKeyboardType.ReplyKeyboard;
+
+ m_Buttons.EnablePaging = true;
+ m_Buttons.EnableSearch = true;
+
+ m_Buttons.HeadLayoutButtonRow = new List() { new ButtonBase("Back", "back") };
+
+ var countries = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
+
+ ButtonForm bf = new ButtonForm();
+
+ foreach (var c in countries)
+ {
+ bf.AddButtonRow(new ButtonBase(c.EnglishName, c.EnglishName));
+ }
+
+ m_Buttons.ButtonsForm = bf;
+
+ m_Buttons.ButtonClicked += Bg_ButtonClicked;
+
+ this.AddControl(m_Buttons);
+
+
+ }
+
+ private async Task Bg_ButtonClicked(object sender, ButtonClickedEventArgs e)
+ {
+ if (e.Button == null)
+ return;
+
+ if (e.Button.Value == "back")
+ {
+ var start = new Menu();
+ await this.NavigateTo(start);
+ }
+ else
+ {
+
+ await this.Device.Send($"Button clicked with Text: {e.Button.Text} and Value {e.Button.Value}");
+ }
+
+
+ }
+ }
+}
diff --git a/TelegramBotBaseTest/Tests/Menu.cs b/TelegramBotBaseTest/Tests/Menu.cs
index eef19bf..f3f6de1 100644
--- a/TelegramBotBaseTest/Tests/Menu.cs
+++ b/TelegramBotBaseTest/Tests/Menu.cs
@@ -146,6 +146,16 @@ namespace TelegramBotBaseTest.Tests
await this.NavigateTo(bg);
+ break;
+
+ case "buttongridfilter":
+
+ message.Handled = true;
+
+ var bg2 = new Controls.ButtonGridPagingForm();
+
+ await this.NavigateTo(bg2);
+
break;
}
@@ -175,6 +185,8 @@ namespace TelegramBotBaseTest.Tests
btn.AddButtonRow(new ButtonBase("#12 ButtonGrid", new CallbackData("a", "buttongrid").Serialize()));
+ btn.AddButtonRow(new ButtonBase("#13 ButtonGrid Paging & Filter", new CallbackData("a", "buttongridfilter").Serialize()));
+
await this.Device.Send("Choose your test:", btn);
}
diff --git a/images/buttongrid_pagingfilter.gif b/images/buttongrid_pagingfilter.gif
new file mode 100644
index 0000000..e887288
Binary files /dev/null and b/images/buttongrid_pagingfilter.gif differ