diff --git a/ComponentPractice/ComponentPractice/Components/Layout/NavMenu.razor b/ComponentPractice/ComponentPractice/Components/Layout/NavMenu.razor
index 40cee7b..bd49fb0 100644
--- a/ComponentPractice/ComponentPractice/Components/Layout/NavMenu.razor
+++ b/ComponentPractice/ComponentPractice/Components/Layout/NavMenu.razor
@@ -49,6 +49,12 @@
SRBS
+
+
+
+ DataGrid
+
+
diff --git a/ComponentPractice/ComponentPractice/Components/Pages/DataGrid.razor b/ComponentPractice/ComponentPractice/Components/Pages/DataGrid.razor
new file mode 100644
index 0000000..cff621b
--- /dev/null
+++ b/ComponentPractice/ComponentPractice/Components/Pages/DataGrid.razor
@@ -0,0 +1,47 @@
+@page "/datagrid"
+
+@inject InMemoryData data;
+
+@rendermode RenderMode.InteractiveServer
+
+
+ DataGrid IQuariable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+@code {
+ IEnumerable employees;
+ IList selectedEmployees;
+
+ protected override async Task OnInitializedAsync()
+ {
+ employees = await data.GetEmployeeDataAsync(100);
+
+ selectedEmployees = new List() { employees.FirstOrDefault() };
+ }
+}
diff --git a/ComponentPractice/ComponentPractice/Components/_Imports.razor b/ComponentPractice/ComponentPractice/Components/_Imports.razor
index 8fa5423..482c7df 100644
--- a/ComponentPractice/ComponentPractice/Components/_Imports.razor
+++ b/ComponentPractice/ComponentPractice/Components/_Imports.razor
@@ -9,4 +9,6 @@
@using ComponentPractice
@using ComponentPractice.Components
@using Radzen
-@using Radzen.Blazor
\ No newline at end of file
+@using Radzen.Blazor
+@using Models
+@using Data
\ No newline at end of file
diff --git a/ComponentPractice/ComponentPractice/Data/InMemoryData.cs b/ComponentPractice/ComponentPractice/Data/InMemoryData.cs
new file mode 100644
index 0000000..167ae66
--- /dev/null
+++ b/ComponentPractice/ComponentPractice/Data/InMemoryData.cs
@@ -0,0 +1,47 @@
+using ComponentPractice.Models;
+using System.Linq.Dynamic.Core;
+
+namespace ComponentPractice.Data
+{
+ public class InMemoryData
+ {
+ public async Task> GetEmployeeDataAsync(int count)
+ {
+ var employees = new List();
+ var random = new Random();
+ var firstNames = new[] { "John", "Jane", "Michael", "Emily", "Robert", "Linda", "William", "Jessica", "David", "Sarah" };
+ var lastNames = new[] { "Smith", "Johnson", "Brown", "Williams", "Jones", "Garcia", "Miller", "Davis", "Martinez", "Hernandez" };
+ var jobs = new[] { "Developer", "Designer", "Manager", "Analyst", "Consultant", "Administrator", "Engineer", "Specialist", "Technician", "Coordinator" };
+ var titles = new[] { "Junior", "Mid", "Senior", "Lead", "Chief" };
+ var cities = new[] { "New York", "Los Angeles", "Chicago", "Houston", "Phoenix", "Philadelphia", "San Antonio", "San Diego", "Dallas", "San Jose" };
+ var regions = new[] { "NY", "CA", "IL", "TX", "AZ", "PA", "TX", "CA", "TX", "CA" };
+ var counties = new[] { "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA" };
+
+ for (int i = 0; i < count; i++)
+ {
+ var employee = new Employee
+ {
+ ID = i + 1,
+ Photo = $"https://randomuser.me/api/portraits/med/{(i % 2 == 0 ? "men" : "women")}/{i}.jpg",
+ FirstName = firstNames[random.Next(firstNames.Length)],
+ LastName = lastNames[random.Next(lastNames.Length)],
+ Job = jobs[random.Next(jobs.Length)],
+ Title = titles[random.Next(titles.Length)],
+ BirthDate = new DateTime(random.Next(1950, 2000), random.Next(1, 13), random.Next(1, 29)),
+ HireDate = DateTime.Today.AddDays(-random.Next(1, 3650)),
+ Address = $"{random.Next(1, 9999)} Main St",
+ City = cities[random.Next(cities.Length)],
+ Region = regions[random.Next(regions.Length)],
+ PostalCode = $"{random.Next(10000, 99999)}",
+ County = counties[random.Next(counties.Length)],
+ Phone = $"{random.Next(100, 999)}-555-{random.Next(1000, 9999)}",
+ Extension = $"{random.Next(100, 9999)}",
+ Notes = "Generated demo data"
+ };
+ employees.Add(employee);
+ }
+
+ return await employees.ToDynamicListAsync();
+ }
+ }
+}
diff --git a/ComponentPractice/ComponentPractice/Models/Employee.cs b/ComponentPractice/ComponentPractice/Models/Employee.cs
new file mode 100644
index 0000000..8bbb844
--- /dev/null
+++ b/ComponentPractice/ComponentPractice/Models/Employee.cs
@@ -0,0 +1,22 @@
+namespace ComponentPractice.Models
+{
+ public class Employee
+ {
+ public int ID { get; set; }
+ public string Photo { get; set; }
+ public string FirstName { get; set; }
+ public string LastName { get; set; }
+ public string Job { get; set; }
+ public string Title { get; set; }
+ public DateTime BirthDate { get; set; }
+ public DateTime HireDate { get; set; }
+ public string Address { get; set; }
+ public string City { get; set; }
+ public string Region { get; set; }
+ public string PostalCode { get; set; }
+ public string County { get; set; }
+ public string Phone { get; set; }
+ public string Extension { get; set; }
+ public string Notes { get; set; }
+ }
+}
diff --git a/ComponentPractice/ComponentPractice/Program.cs b/ComponentPractice/ComponentPractice/Program.cs
index c61b0b0..add23c8 100644
--- a/ComponentPractice/ComponentPractice/Program.cs
+++ b/ComponentPractice/ComponentPractice/Program.cs
@@ -1,4 +1,5 @@
using ComponentPractice.Components;
+using ComponentPractice.Data;
using Radzen;
namespace ComponentPractice
@@ -15,6 +16,8 @@ namespace ComponentPractice
builder.Services.AddRadzenComponents();
+ builder.Services.AddScoped();
+
var app = builder.Build();
// Configure the HTTP request pipeline.