diff --git a/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/DefaultFunctionalities.razor b/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/DefaultFunctionalities.razor new file mode 100644 index 000000000..f044e2368 --- /dev/null +++ b/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/DefaultFunctionalities.razor @@ -0,0 +1,109 @@ +@page "/MultiColumn-ComboBox/Default-Functionalities" + +@using Syncfusion.Blazor.MultiColumnComboBox + +@*Hidden:Lines*@ +@inherits SampleBaseComponent +@*End:Hidden*@ + + +

This example demonstrates the primary features of the Blazor MultiColumn ComboBox. You can type into the ComboBox or click the dropdown icon to choose an item from multiple columns.

+
+ +

The MultiColumn ComboBox allows users to either input a value or select from a list that is organized into multiple columns.

+

See also

+ +
+ +
+
+
+ + +
+
+
+
+
Properties
+
+
Selected Value : @Value
+
+
+
+
+ + + +@code { + + public class Product + { + public string Name { get; set; } + public decimal Price { get; set; } + public string Availability { get; set; } + public string Category { get; set; } + public double Rating { get; set; } + } + + private List Products = new List(); + + private string Value { get; set; } = "Smartphone"; + + protected override Task OnInitializedAsync() + { + Products = new List + { + new Product { Name = "Laptop", Price = 999.99m, Availability = "In Stock", Category = "Electronics", Rating = 4.5 }, + new Product { Name = "Smartphone", Price = 599.99m, Availability = "Out of Stock", Category = "Electronics", Rating = 4.3 }, + new Product { Name = "Tablet", Price = 299.99m, Availability = "In Stock", Category = "Electronics", Rating = 4.2 }, + new Product { Name = "Headphones", Price = 49.99m, Availability = "In Stock", Category = "Accessories", Rating = 4.0 }, + new Product { Name = "Smartwatch", Price = 199.99m, Availability = "Limited Stock", Category = "Wearables", Rating = 4.4 }, + new Product { Name = "Monitor", Price = 129.99m, Availability = "In Stock", Category = "Electronics", Rating = 4.6 }, + new Product { Name = "Keyboard", Price = 39.99m, Availability = "In Stock", Category = "Accessories", Rating = 4.1 }, + new Product { Name = "Mouse", Price = 19.99m, Availability = "Out of Stock", Category = "Accessories", Rating = 4.3 }, + new Product { Name = "Printer", Price = 89.99m, Availability = "In Stock", Category = "Office Supplies", Rating = 4.2 }, + new Product { Name = "Camera", Price = 499.99m, Availability = "In Stock", Category = "Electronics", Rating = 4.7 }, + new Product { Name = "Speakers", Price = 149.99m, Availability = "In Stock", Category = "Accessories", Rating = 4.5 }, + new Product { Name = "Router", Price = 79.99m, Availability = "Out of Stock", Category = "Electronics", Rating = 4.4 }, + new Product { Name = "External Hard Drive", Price = 59.99m, Availability = "In Stock", Category = "Storage", Rating = 4.6 }, + new Product { Name = "USB Flash Drive", Price = 9.99m, Availability = "In Stock", Category = "Storage", Rating = 4.2 }, + new Product { Name = "Webcam", Price = 29.99m, Availability = "Limited Stock", Category = "Accessories", Rating = 4.1 }, + new Product { Name = "Smart TV", Price = 799.99m, Availability = "In Stock", Category = "Electronics", Rating = 4.8 }, + new Product { Name = "Projector", Price = 299.99m, Availability = "Out of Stock", Category = "Electronics", Rating = 4.5 }, + new Product { Name = "VR Headset", Price = 349.99m, Availability = "In Stock", Category = "Electronics", Rating = 4.7 }, + new Product { Name = "Drone", Price = 599.99m, Availability = "In Stock", Category = "Electronics", Rating = 4.6 }, + new Product { Name = "Fitness Tracker", Price = 99.99m, Availability = "In Stock", Category = "Wearables", Rating = 4.3 } + }; + return base.OnInitializedAsync(); + } +} diff --git a/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/Filtering.razor b/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/Filtering.razor new file mode 100644 index 000000000..28aa88ae9 --- /dev/null +++ b/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/Filtering.razor @@ -0,0 +1,161 @@ +@page "/MultiColumn-ComboBox/Filtering" + +@using Syncfusion.Blazor.MultiColumnComboBox +@using Syncfusion.Blazor.DropDowns + +@*Hidden:Lines*@ +@inherits SampleBaseComponent +@*End:Hidden*@ + + +

This example demonstrates the filtering capabilities of the Blazor MultiColumn ComboBox. Users can type in the ComboBox to filter and narrow down the list of items across multiple columns, making it easier to find specific entries.

+
+ +

The MultiColumn ComboBox supports filtering, which allows users to search for and select items by typing keywords. The available items are dynamically filtered based on the input, ensuring quick access to the desired data.

+

See also

+ +
+ +
+
+
+ + + +
+
+
+
+
Properties
+
+ + + +
+
+
+
+ +@code { + public class Employee + { + public string Name { get; set; } + public string Department { get; set; } + public string Role { get; set; } + public string Location { get; set; } + public int Experience { get; set; } + } + + private string Value { get; set; } = "Alice Johnson"; + + private List Employees = new List(); + + protected override Task OnInitializedAsync() + { + Employees = new List + { + new Employee + { + Name = "Alice Johnson", + Department = "Engineering", + Role = "Software Engineer", + Location = "New York", + Experience = 5 + }, + new Employee + { + Name = "Bob Smith", + Department = "Marketing", + Role = "Marketing Manager", + Location = "San Francisco", + Experience = 7 + }, + new Employee + { + Name = "Catherine Lee", + Department = "Finance", + Role = "Financial Analyst", + Location = "Chicago", + Experience = 4 + }, + new Employee + { + Name = "David Kim", + Department = "Engineering", + Role = "DevOps Engineer", + Location = "Austin", + Experience = 6 + }, + new Employee + { + Name = "Eva Brown", + Department = "Sales", + Role = "Sales Executive", + Location = "Boston", + Experience = 3 + }, + new Employee + { + Name = "Frank White", + Department = "Human Resources", + Role = "HR Manager", + Location = "Seattle", + Experience = 8 + }, + new Employee + { + Name = "Grace Green", + Department = "Design", + Role = "UX Designer", + Location = "Los Angeles", + Experience = 5 + }, + new Employee + { + Name = "Hank Wilson", + Department = "Engineering", + Role = "Front-end Developer", + Location = "Denver", + Experience = 4 + } + }; + + return base.OnInitializedAsync(); + } + + public string[] EnumValues = Enum.GetNames(typeof(Syncfusion.Blazor.MultiColumnComboBox.FilterType)); + + public Syncfusion.Blazor.MultiColumnComboBox.FilterType SelectedFilterType { get; set; } = Syncfusion.Blazor.MultiColumnComboBox.FilterType.Contains; +} + + + diff --git a/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/FormSupport.razor b/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/FormSupport.razor new file mode 100644 index 000000000..554dfab13 --- /dev/null +++ b/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/FormSupport.razor @@ -0,0 +1,130 @@ +@page "/MultiColumn-ComboBox/FormSupport" + +@using Syncfusion.Blazor.MultiColumnComboBox +@using Syncfusion.Blazor.Buttons; +@using System.ComponentModel.DataAnnotations; + +@*Hidden:Lines*@ +@inherits SampleBaseComponent +@*End:Hidden*@ + + +

This example demonstrates how the Blazor MultiColumn ComboBox can be integrated within a form using the EditForm component. This allows the ComboBox to be used in data entry scenarios, where it can be validated and managed as part of a form submission process.

+
+ +

The MultiColumn ComboBox supports form integration, enabling it to work seamlessly within an EditForm. In this example, the ComboBox is placed inside an EditForm, allowing it to participate in form validation and data binding. This feature is particularly useful for creating data entry forms where the ComboBox needs to be validated and its values submitted as part of the form.

+

See also

+ +
+ +
+
+ @if (string.IsNullOrEmpty(Message)) + { + + +
+ + + + +
+
+ Submit +
+
+ } + else + { +
+ @Message +
+ } +
+
+ + +@code { + public Product ProductModel = new Product(); + + public class Product + { + [Required(ErrorMessage = "Please select a product")] + public string Name { get; set; } + public decimal Price { get; set; } + public string Availability { get; set; } + public string Category { get; set; } + public double Rating { get; set; } + } + + private List Products = new List(); + + protected override Task OnInitializedAsync() + { + Products = new List + { + new Product { Name = "Laptop", Price = 999.99m, Availability = "In Stock", Category = "Electronics", Rating = 4.5 }, + new Product { Name = "Smartphone", Price = 599.99m, Availability = "Out of Stock", Category = "Electronics", Rating = 4.3 }, + new Product { Name = "Tablet", Price = 299.99m, Availability = "In Stock", Category = "Electronics", Rating = 4.2 }, + new Product { Name = "Headphones", Price = 49.99m, Availability = "In Stock", Category = "Accessories", Rating = 4.0 }, + new Product { Name = "Smartwatch", Price = 199.99m, Availability = "Limited Stock", Category = "Wearables", Rating = 4.4 }, + new Product { Name = "Monitor", Price = 129.99m, Availability = "In Stock", Category = "Electronics", Rating = 4.6 }, + new Product { Name = "Keyboard", Price = 39.99m, Availability = "In Stock", Category = "Accessories", Rating = 4.1 }, + new Product { Name = "Mouse", Price = 19.99m, Availability = "Out of Stock", Category = "Accessories", Rating = 4.3 }, + new Product { Name = "Printer", Price = 89.99m, Availability = "In Stock", Category = "Office Supplies", Rating = 4.2 }, + new Product { Name = "Camera", Price = 499.99m, Availability = "In Stock", Category = "Electronics", Rating = 4.7 }, + new Product { Name = "Speakers", Price = 149.99m, Availability = "In Stock", Category = "Accessories", Rating = 4.5 }, + new Product { Name = "Router", Price = 79.99m, Availability = "Out of Stock", Category = "Electronics", Rating = 4.4 }, + new Product { Name = "External Hard Drive", Price = 59.99m, Availability = "In Stock", Category = "Storage", Rating = 4.6 }, + new Product { Name = "USB Flash Drive", Price = 9.99m, Availability = "In Stock", Category = "Storage", Rating = 4.2 }, + new Product { Name = "Webcam", Price = 29.99m, Availability = "Limited Stock", Category = "Accessories", Rating = 4.1 }, + new Product { Name = "Smart TV", Price = 799.99m, Availability = "In Stock", Category = "Electronics", Rating = 4.8 }, + new Product { Name = "Projector", Price = 299.99m, Availability = "Out of Stock", Category = "Electronics", Rating = 4.5 }, + new Product { Name = "VR Headset", Price = 349.99m, Availability = "In Stock", Category = "Electronics", Rating = 4.7 }, + new Product { Name = "Drone", Price = 599.99m, Availability = "In Stock", Category = "Electronics", Rating = 4.6 }, + new Product { Name = "Fitness Tracker", Price = 99.99m, Availability = "In Stock", Category = "Wearables", Rating = 4.3 } + }; + return base.OnInitializedAsync(); + } + + private string Message { get; set; } = string.Empty; + async void OnValidSubmit() + { + Message = "Form Submitted Successfully!"; + await Task.Delay(2000); + Message = string.Empty; + ProductModel.Name = null; + StateHasChanged(); + } + private void OnInvalidSubmit() + { + Message = string.Empty; + } +} + + + diff --git a/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/Grouping.razor b/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/Grouping.razor new file mode 100644 index 000000000..abb62669f --- /dev/null +++ b/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/Grouping.razor @@ -0,0 +1,90 @@ +@page "/MultiColumn-ComboBox/Grouping-Sorting" + +@using Syncfusion.Blazor.MultiColumnComboBox + +@*Hidden:Lines*@ +@inherits SampleBaseComponent +@*End:Hidden*@ + + +

This example demonstrates the grouping feature of the Blazor MultiColumn ComboBox. Grouping allows you to categorize items within the ComboBox, making it easier to navigate and select related options.

+
+ +

The MultiColumn ComboBox supports grouping, which organizes the list items into logical categories. This feature enhances user experience by structuring related items together, enabling quicker selection and better data organization.

+

See also

+ +
+ +
+
+
+ + + +
+
+
+
+ + + +
+
+
+ +@code { + + public class Product + { + public string Name { get; set; } + public decimal Price { get; set; } + public string Availability { get; set; } + public string Category { get; set; } + public double Rating { get; set; } + } + + private List Products = new List(); + + protected override Task OnInitializedAsync() + { + Products = new List + { + new Product { Name = "Laptop", Price = 999.99m, Availability = "In Stock", Category = "Electronics", Rating = 4.5 }, + new Product { Name = "Smartphone", Price = 599.99m, Availability = "Out of Stock", Category = "Electronics", Rating = 4.3 }, + new Product { Name = "Tablet", Price = 299.99m, Availability = "In Stock", Category = "Electronics", Rating = 4.2 }, + new Product { Name = "Headphones", Price = 49.99m, Availability = "In Stock", Category = "Accessories", Rating = 4.0 }, + new Product { Name = "Smartwatch", Price = 199.99m, Availability = "Limited Stock", Category = "Wearables", Rating = 4.4 }, + new Product { Name = "Monitor", Price = 129.99m, Availability = "In Stock", Category = "Electronics", Rating = 4.6 }, + new Product { Name = "Keyboard", Price = 39.99m, Availability = "In Stock", Category = "Accessories", Rating = 4.1 }, + new Product { Name = "Mouse", Price = 19.99m, Availability = "Out of Stock", Category = "Accessories", Rating = 4.3 }, + new Product { Name = "Printer", Price = 89.99m, Availability = "In Stock", Category = "Office Supplies", Rating = 4.2 }, + new Product { Name = "Camera", Price = 499.99m, Availability = "In Stock", Category = "Electronics", Rating = 4.7 }, + new Product { Name = "Speakers", Price = 149.99m, Availability = "In Stock", Category = "Accessories", Rating = 4.5 }, + new Product { Name = "Router", Price = 79.99m, Availability = "Out of Stock", Category = "Electronics", Rating = 4.4 }, + new Product { Name = "External Hard Drive", Price = 59.99m, Availability = "In Stock", Category = "Storage", Rating = 4.6 }, + new Product { Name = "USB Flash Drive", Price = 9.99m, Availability = "In Stock", Category = "Storage", Rating = 4.2 }, + new Product { Name = "Webcam", Price = 29.99m, Availability = "Limited Stock", Category = "Accessories", Rating = 4.1 }, + new Product { Name = "Smart TV", Price = 799.99m, Availability = "In Stock", Category = "Electronics", Rating = 4.8 }, + new Product { Name = "Projector", Price = 299.99m, Availability = "Out of Stock", Category = "Electronics", Rating = 4.5 }, + new Product { Name = "VR Headset", Price = 349.99m, Availability = "In Stock", Category = "Electronics", Rating = 4.7 }, + new Product { Name = "Drone", Price = 599.99m, Availability = "In Stock", Category = "Electronics", Rating = 4.6 }, + new Product { Name = "Fitness Tracker", Price = 99.99m, Availability = "In Stock", Category = "Wearables", Rating = 4.3 } + }; + return base.OnInitializedAsync(); + } +} + + diff --git a/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/KeyboardNavigation.razor b/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/KeyboardNavigation.razor new file mode 100644 index 000000000..2a5ae86a1 --- /dev/null +++ b/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/KeyboardNavigation.razor @@ -0,0 +1,201 @@ +@page "/MultiColumn-ComboBox/Keyboard-Navigation" + +@using Syncfusion.Blazor.MultiColumnComboBox + +@*Hidden:Lines*@ +@inherits SampleBaseComponent +@*End:Hidden*@ + + +

This example demonstrates the keyboard navigation capabilities of the Blazor MultiColumn ComboBox. Users can interact with the ComboBox using only the keyboard, providing an accessible and efficient way to navigate through the list and select items.

+
+ +

The MultiColumn ComboBox supports comprehensive keyboard navigation, allowing users to perform all interactions without a mouse. You can open the dropdown, navigate through items, select an option, and close the dropdown using standard keyboard keys. This feature enhances accessibility and improves the user experience for keyboard-centric users.

+

MultiColumn ComboBox supports the below keyboard actions

+ Focus +
    +
  • + Alt + J + - Focuses on the first component of the sample. +
  • +
+ + Input Navigation +
    +
  • + Alt + Down arrow + - Opens the popup list. +
  • +
  • + Alt + Up arrow + - Closes the popup list. +
  • +
  • + Home + - Cursor moves before the first character in the input. +
  • +
  • + End + - Cursor moves next to the last character in the input. +
  • +
  • + Tab + + - Focuses on the next Tab Index element on the page. + +
  • +
  • + Shift + Tab + + - Focuses on the previous Tab Index element on the page. + +
  • +
+ + Selection +
    +
  • + Enter + - Selects the focused item, and when it is in an open state the popup list closes. +
  • +
+ + Popup Navigation +
    +
  • + Down arrow + + - Selects the first item in the ComboBox when no item is + selected. Otherwise, selects the item next to the currently selected item. + +
  • +
  • + Up arrow + - Selects the item previous to the currently selected one. +
  • +
  • + Esc + + - Closes the popup list when it is in an open state and the + currently selected item remains the same. + +
  • +
+
+ +
+
+ + +
+
+ +@code { + public class Product + { + public int ProductID { get; set; } + public string ProductName { get; set; } + public decimal UnitPrice { get; set; } + public int UnitsInStock { get; set; } + } + + private List Products = new List(); + + protected override Task OnInitializedAsync() + { + Products = new List + { + new Product + { + ProductID = 1, + ProductName = "Chai", + UnitPrice = 18m, + UnitsInStock = 39 + }, + new Product + { + ProductID = 2, + ProductName = "Chang", + UnitPrice = 19m, + UnitsInStock = 45 + }, + new Product + { + ProductID = 3, + ProductName = "Aniseed Syrup", + UnitPrice = 23m, + UnitsInStock = 79 + }, + new Product + { + ProductID = 4, + ProductName = "Chef Anton Cajun Seasoning", + UnitPrice = 28m, + UnitsInStock = 28 + }, + new Product + { + ProductID = 5, + ProductName = "Gumbo Mix", + UnitPrice = 11m, + UnitsInStock = 50 + }, + new Product + { + ProductID = 6, + ProductName = "Grandma Boysenberry", + UnitPrice = 37m, + UnitsInStock = 49 + }, + new Product + { + ProductID = 7, + ProductName = "Northwoods Cranberry Sauce", + UnitPrice = 23m, + UnitsInStock = 91 + }, + new Product + { + ProductID = 8, + ProductName = "Mishi Kobe Niku", + UnitPrice = 32m, + UnitsInStock = 16 + }, + new Product + { + ProductID = 9, + ProductName = "Ikura", + UnitPrice = 80m, + UnitsInStock = 29 + }, + new Product + { + ProductID = 10, + ProductName = "Uncle Bob Organic Dried Pears", + UnitPrice = 26m, + UnitsInStock = 32 + }, + new Product + { + ProductID = 11, + ProductName = "Organic Dried Pears", + UnitPrice = 29m, + UnitsInStock = 19 + } + }; + return base.OnInitializedAsync(); + } +} + + diff --git a/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/Paging.razor b/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/Paging.razor new file mode 100644 index 000000000..2b4e98a75 --- /dev/null +++ b/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/Paging.razor @@ -0,0 +1,259 @@ +@page "/MultiColumn-ComboBox/Paging" + +@using Syncfusion.Blazor.MultiColumnComboBox +@using Syncfusion.Blazor.Inputs + +@*Hidden:Lines*@ +@inherits SampleBaseComponent +@*End:Hidden*@ + + +

This example demonstrates the paging feature of the Blazor MultiColumn ComboBox. The ComboBox can display a large dataset efficiently by dividing it into pages, allowing users to navigate through items without performance degradation.

+
+ +

The MultiColumn ComboBox supports paging, enabling users to manage large data sets by navigating through different pages. This feature improves load times and maintains performance when dealing with extensive lists.

+

See also

+ +
+ +
+
+
+ + + +
+
+
+
+
Properties
+
+ + +
+
+ + +
+
+
+
+ +@code { + public int PageSize { get; set; } = 4; + public int PageCount { get; set; }= 5; + + public class Service + { + public string Name { get; set; } + public string Icon { get; set; } + public string Description { get; set; } + public string Price { get; set; } + public double Rating { get; set; } + } + + private IEnumerable GridData { get; set; } + + protected override async Task OnInitializedAsync() + { + GridData = new List + { + new Service + { + Name = "Cloud Hosting", + Icon = "cloud_icon.png", + Description = "Scalable cloud hosting solutions.", + Price = "$50/month", + Rating = 4.6 + }, + new Service + { + Name = "Data Analysis", + Icon = "data_icon.png", + Description = "Advanced data analysis services.", + Price = "$150/hour", + Rating = 4.7 + }, + new Service + { + Name = "SEO Optimization", + Icon = "seo_icon.png", + Description = "Boost your website's SEO.", + Price = "$200/project", + Rating = 4.5 + }, + new Service + { + Name = "Digital Marketing", + Icon = "marketing_icon.png", + Description = "Comprehensive digital marketing.", + Price = "$100/hour", + Rating = 4.8 + }, + new Service + { + Name = "Cybersecurity", + Icon = "security_icon.png", + Description = "Protect your digital assets.", + Price = "$300/hour", + Rating = 4.9 + }, + new Service + { + Name = "Web Development", + Icon = "web_icon.png", + Description = "Full-stack web development services.", + Price = "$100/hour", + Rating = 4.5 + }, + new Service + { + Name = "Mobile App Development", + Icon = "app_icon.png", + Description = "iOS and Android app development.", + Price = "$120/hour", + Rating = 4.6 + }, + new Service + { + Name = "IT Support", + Icon = "it_icon.png", + Description = "24/7 IT support services.", + Price = "$75/hour", + Rating = 4.4 + }, + new Service + { + Name = "E-commerce Solutions", + Icon = "ecommerce_icon.png", + Description = "Complete e-commerce solutions.", + Price = "$2000/project", + Rating = 4.7 + }, + new Service + { + Name = "Graphic Design", + Icon = "design_icon.png", + Description = "Professional graphic design services.", + Price = "$80/hour", + Rating = 4.8 + }, + new Service + { + Name = "Video Production", + Icon = "video_icon.png", + Description = "High-quality video production.", + Price = "$250/hour", + Rating = 4.9 + }, + new Service + { + Name = "Content Creation", + Icon = "content_icon.png", + Description = "Content writing and creation.", + Price = "$50/hour", + Rating = 4.6 + }, + new Service + { + Name = "Social Media Management", + Icon = "social_icon.png", + Description = "Manage your social media presence.", + Price = "$150/hour", + Rating = 4.7 + }, + new Service + { + Name = "Email Marketing", + Icon = "email_icon.png", + Description = "Effective email marketing campaigns.", + Price = "$100/hour", + Rating = 4.5 + }, + new Service + { + Name = "Branding", + Icon = "branding_icon.png", + Description = "Build and enhance your brand.", + Price = "$500/project", + Rating = 4.8 + }, + new Service + { + Name = "Public Relations", + Icon = "pr_icon.png", + Description = "Professional PR services.", + Price = "$200/hour", + Rating = 4.9 + }, + new Service + { + Name = "Photography", + Icon = "photo_icon.png", + Description = "Professional photography services.", + Price = "$150/hour", + Rating = 4.7 + }, + new Service + { + Name = "Event Planning", + Icon = "event_icon.png", + Description = "Comprehensive event planning.", + Price = "$1000/event", + Rating = 4.6 + }, + new Service + { + Name = "Consulting", + Icon = "consulting_icon.png", + Description = "Business and IT consulting services.", + Price = "$200/hour", + Rating = 4.8 + }, + new Service + { + Name = "Translation Services", + Icon = "translation_icon.png", + Description = "Professional translation services.", + Price = "$50/hour", + Rating = 4.5 + } + }; + } +} + + diff --git a/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/RemoteDataBinding.razor b/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/RemoteDataBinding.razor new file mode 100644 index 000000000..1283c0b7d --- /dev/null +++ b/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/RemoteDataBinding.razor @@ -0,0 +1,78 @@ +@page "/MultiColumn-ComboBox/Remote-Data-Binding" + +@using Syncfusion.Blazor.MultiColumnComboBox +@using Syncfusion.Blazor.Data + +@*Hidden:Lines*@ +@inherits SampleBaseComponent +@*End:Hidden*@ + + +

This example demonstrates the remote data binding capabilities of the MultiColumn ComboBox. Select an item from the suggestion list by interacting with the component. Upon initial selection, a loading icon appears while the data is retrieved from the server.

+
+ +

+ The MultiColumn ComboBox can load data from either local sources or remote services using the DataSource property. Supported data types include Array, ObservableCollection, ExpandoObject, DynamicObject, and DataManager. +

+

+ The DataManager acts as an intermediary between the service endpoint and the MultiColumn ComboBox, requiring minimal setup to connect effectively. +

+
    +
  • DataManager.Url - Specifies the service endpoint for data retrieval.
  • +
  • +

    + DataManager.Adaptor - Determines the adaptor used, with ODataAdaptor as the default for remote binding. + Syncfusion.Blazor.Data provides various adaptors, including: +

    +
      +
    • UrlAdaptor - For generic remote services.
    • +
    • ODataAdaptor - For OData endpoints.
    • +
    • ODataV4Adaptor - For OData V4 endpoints.
    • +
    • WebApiAdaptor - For Web APIs adhering to OData standards.
    • +
    • WebMethodAdaptor - For interacting with web methods.
    • +
    +
  • +
+

The example below demonstrates the MultiColumn ComboBox bound to a customer data collection using DataManager.

+

See also

+ +
+ +
+
+ + + + +
+
+ +@code { + public string EmployeeValue { get; set; } = "Andrew"; + + public Query RemoteQuery = new Query(); + + public class EmployeeData + { + public int EmployeeID { get; set; } + public string FirstName { get; set; } + public string LastName { get; set; } + public string Country { get; set; } + } +} + + diff --git a/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/RowStyle.razor b/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/RowStyle.razor new file mode 100644 index 000000000..bb9f6b2b9 --- /dev/null +++ b/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/RowStyle.razor @@ -0,0 +1,233 @@ +@page "/MultiColumn-ComboBox/RowStyle" + +@using Syncfusion.Blazor.MultiColumnComboBox + +@*Hidden:Lines*@ +@inherits SampleBaseComponent +@*End:Hidden*@ + + +

This example demonstrates how to customize row styles in the Blazor MultiColumn ComboBox. It showcases the use of vertical and horizontal grid lines along with alternative row styles to enhance the readability and appearance of the ComboBox's dropdown list.

+
+ +

+ The MultiColumn ComboBox supports extensive row customization through styles. Grid lines can be added both vertically and horizontally to clearly separate items and columns, making the list easier to navigate. Additionally, the alternative row style feature allows for different styles to be applied to even and odd rows, offering a visually distinct and appealing look that improves user experience. +

+

See also

+ +
+ +
+
+ + + +
+
+ +@code { + public int PageSize { get; set; } = 3; + + public int PageCount { get; set; }= 10; + + public class Service + { + public string Name { get; set; } + public string Icon { get; set; } + public string Description { get; set; } + public string Price { get; set; } + public double Rating { get; set; } + } + + private IEnumerable GridData { get; set; } + + protected override async Task OnInitializedAsync() + { + GridData = new List + { + new Service + { + Name = "Cloud Hosting", + Icon = "cloud_icon.png", + Description = "Scalable cloud hosting solutions.", + Price = "$50/month", + Rating = 4.6 + }, + new Service + { + Name = "Data Analysis", + Icon = "data_icon.png", + Description = "Advanced data analysis services.", + Price = "$150/hour", + Rating = 4.7 + }, + new Service + { + Name = "SEO Optimization", + Icon = "seo_icon.png", + Description = "Boost your website's SEO.", + Price = "$200/project", + Rating = 4.5 + }, + new Service + { + Name = "Digital Marketing", + Icon = "marketing_icon.png", + Description = "Comprehensive digital marketing.", + Price = "$100/hour", + Rating = 4.8 + }, + new Service + { + Name = "Cybersecurity", + Icon = "security_icon.png", + Description = "Protect your digital assets.", + Price = "$300/hour", + Rating = 4.9 + }, + new Service + { + Name = "Web Development", + Icon = "web_icon.png", + Description = "Full-stack web development services.", + Price = "$100/hour", + Rating = 4.5 + }, + new Service + { + Name = "Mobile App Development", + Icon = "app_icon.png", + Description = "iOS and Android app development.", + Price = "$120/hour", + Rating = 4.6 + }, + new Service + { + Name = "IT Support", + Icon = "it_icon.png", + Description = "24/7 IT support services.", + Price = "$75/hour", + Rating = 4.4 + }, + new Service + { + Name = "E-commerce Solutions", + Icon = "ecommerce_icon.png", + Description = "Complete e-commerce solutions.", + Price = "$2000/project", + Rating = 4.7 + }, + new Service + { + Name = "Graphic Design", + Icon = "design_icon.png", + Description = "Professional graphic design services.", + Price = "$80/hour", + Rating = 4.8 + }, + new Service + { + Name = "Video Production", + Icon = "video_icon.png", + Description = "High-quality video production.", + Price = "$250/hour", + Rating = 4.9 + }, + new Service + { + Name = "Content Creation", + Icon = "content_icon.png", + Description = "Content writing and creation.", + Price = "$50/hour", + Rating = 4.6 + }, + new Service + { + Name = "Social Media Management", + Icon = "social_icon.png", + Description = "Manage your social media presence.", + Price = "$150/hour", + Rating = 4.7 + }, + new Service + { + Name = "Email Marketing", + Icon = "email_icon.png", + Description = "Effective email marketing campaigns.", + Price = "$100/hour", + Rating = 4.5 + }, + new Service + { + Name = "Branding", + Icon = "branding_icon.png", + Description = "Build and enhance your brand.", + Price = "$500/project", + Rating = 4.8 + }, + new Service + { + Name = "Public Relations", + Icon = "pr_icon.png", + Description = "Professional PR services.", + Price = "$200/hour", + Rating = 4.9 + }, + new Service + { + Name = "Photography", + Icon = "photo_icon.png", + Description = "Professional photography services.", + Price = "$150/hour", + Rating = 4.7 + }, + new Service + { + Name = "Event Planning", + Icon = "event_icon.png", + Description = "Comprehensive event planning.", + Price = "$1000/event", + Rating = 4.6 + }, + new Service + { + Name = "Consulting", + Icon = "consulting_icon.png", + Description = "Business and IT consulting services.", + Price = "$200/hour", + Rating = 4.8 + }, + new Service + { + Name = "Translation Services", + Icon = "translation_icon.png", + Description = "Professional translation services.", + Price = "$50/hour", + Rating = 4.5 + } + }; + + } +} + + + diff --git a/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/Template.razor b/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/Template.razor new file mode 100644 index 000000000..55f65a8f7 --- /dev/null +++ b/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/Template.razor @@ -0,0 +1,209 @@ +@page "/MultiColumn-ComboBox/Template" + +@using Syncfusion.Blazor.MultiColumnComboBox + +@*Hidden:Lines*@ +@inherits SampleBaseComponent +@*End:Hidden*@ + + +

This example demonstrates the template capabilities of the Blazor MultiColumn ComboBox. Various templates such as column header, column content, NoRecords, and footer templates are used to customize the appearance and layout of the ComboBox.

+
+ +

+ The MultiColumn ComboBox allows for extensive customization through templates. The column header template lets you define custom headers for each column, while the column content template provides control over how the data is displayed within the columns. The NoRecords template displays a custom message or layout when no records match the search criteria, and the footer template enables you to add content at the bottom of the multi-column popup, such as additional instructions or summary information. +

+

See also

+ +
+ +
+
+ + + + + + + +
+ Photo +
+
+
+ + + + + + +
+
+ +
+
+ +@code { + public class Employee + { + public string Name { get; set; } + public string Department { get; set; } + public string Role { get; set; } + public string Location { get; set; } + public int Experience { get; set; } + public int EmployeeID { get; set; } + } + + private string Value { get; set; } = "Alice Johnson"; + + private List Employees = new List(); + + protected override Task OnInitializedAsync() + { + Employees = new List + { + new Employee + { + Name = "Alice Johnson", + Department = "Engineering", + Role = "Software Engineer", + Location = "New York", + Experience = 5, + EmployeeID = 1 + }, + new Employee + { + Name = "Bob Smith", + Department = "Marketing", + Role = "Marketing Manager", + Location = "San Francisco", + Experience = 7, + EmployeeID = 7 + }, + new Employee + { + Name = "Catherine Lee", + Department = "Finance", + Role = "Financial Analyst", + Location = "Chicago", + Experience = 4, + EmployeeID = 3 + }, + new Employee + { + Name = "David Kim", + Department = "Engineering", + Role = "DevOps Engineer", + Location = "Austin", + Experience = 6, + EmployeeID = 8 + }, + new Employee + { + Name = "Eva Brown", + Department = "Sales", + Role = "Sales Executive", + Location = "Boston", + Experience = 3, + EmployeeID = 5 + }, + new Employee + { + Name = "Frank White", + Department = "Human Resources", + Role = "HR Manager", + Location = "Seattle", + Experience = 8, + EmployeeID = 9 + }, + new Employee + { + Name = "Grace Green", + Department = "Design", + Role = "UX Designer", + Location = "Los Angeles", + Experience = 5, + EmployeeID = 2 + }, + new Employee + { + Name = "Hank Wilson", + Department = "Engineering", + Role = "Product Manager", + Location = "Denver", + Experience = 24, + EmployeeID = 10 + } + }; + + return base.OnInitializedAsync(); + } +} + + diff --git a/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/TextWrap.razor b/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/TextWrap.razor new file mode 100644 index 000000000..74a1f7bce --- /dev/null +++ b/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/TextWrap.razor @@ -0,0 +1,90 @@ +@page "/MultiColumn-ComboBox/TextWrap" + +@using Syncfusion.Blazor.Calendars +@using Syncfusion.Blazor.DropDowns +@using Syncfusion.Blazor.MultiColumnComboBox + +@*Hidden:Lines*@ +@inherits SampleBaseComponent +@*End:Hidden*@ + + +

This example demonstrates the TextWrap feature of the Blazor MultiColumn ComboBox, which specifies how words should break when reaching the end of a line, ensuring that content and headers wrap appropriately based on the specified wrapping options.

+
+ +

The TextWrap feature of the Blazor MultiColumn ComboBox can be achieved by setting EnableTextWrap to true and configuring the TextWrapElement and TextOverflowMode enums to control how the content is displayed based on your preferences.

+
    +

    TextWrapElement is an enum Defines the element where text wrapping is applied.

    +
      +
    • Both - Wraps both the header and content.
    • +
    • Header - Wraps only the header.
    • +
    • Content - Wraps only the content.
    • +
    +
+
    +

    TextOverflowMode is an enum Defines truncates the cell content when it overflows its area.

    +
      +
    • Ellipsis - Displays an ellipsis (...) when the content overflows its area.
    • +
    • EllipsisWithTooltip - Displays an ellipsis (...) when the content overflows its area, and it also shows a tooltip on hover.
    • +
    +
+
+ +
+
+ + + + + + + + + + +
+
+ +@code { + public class Employee + { + public string Name { get; set; } + public string Position { get; set; } + public string Department { get; set; } + public decimal Salary { get; set; } + public double Rating { get; set; } + } + private List Employees = new List(); + private string Value { get; set; } = "Jonathan Alexander Smith"; + protected override Task OnInitializedAsync() + { + Employees = new List + { + new Employee { Name = "Jonathan Alexander Smith", Position = "Senior Software Engineer", Department = "Engineering Department", Salary = 105000m, Rating = 4.8 }, + new Employee { Name = "Sophia Elizabeth Johnson", Position = "Lead Product Designer", Department = "Design & UX Team", Salary = 95000m, Rating = 4.7 }, + new Employee { Name = "Alexander James Thompson", Position = "Chief Marketing Officer", Department = "Marketing Division", Salary = 125000m, Rating = 4.9 }, + new Employee { Name = "Madeline Grace Harris", Position = "Project Manager for Enterprise Solutions", Department = "Project Management Office", Salary = 85000m, Rating = 4.5 }, + new Employee { Name = "Christopher Daniel Roberts", Position = "Data Scientist with AI Expertise", Department = "Data Analytics & AI", Salary = 115000m, Rating = 4.6 }, + new Employee { Name = "Rebecca Olivia Martinez", Position = "Human Resources Manager", Department = "Human Resources & Recruiting", Salary = 77000m, Rating = 4.3 }, + new Employee { Name = "James Benjamin Lee", Position = "Senior Web Developer and Full Stack Specialist", Department = "Engineering & Development", Salary = 98000m, Rating = 4.7 }, + new Employee { Name = "Chloe Isabelle Cooper", Position = "Product Marketing Manager", Department = "Product Strategy & Marketing", Salary = 87000m, Rating = 4.4 }, + new Employee { Name = "William Joseph Anderson", Position = "Senior IT Infrastructure Architect", Department = "IT Infrastructure & Operations", Salary = 102000m, Rating = 4.6 }, + new Employee { Name = "Charlotte Emily Carter", Position = "Customer Success Lead for Global Clients", Department = "Customer Success Team", Salary = 92000m, Rating = 4.8 }, + }; + return base.OnInitializedAsync(); + } +} + + + diff --git a/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/Virtualization.razor b/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/Virtualization.razor new file mode 100644 index 000000000..e49979a15 --- /dev/null +++ b/Blazor-MAUI-Demos/Pages/DropDowns/MultiColumnComboBox/Virtualization.razor @@ -0,0 +1,83 @@ +@page "/MultiColumn-ComboBox/Virtualization" + +@using Syncfusion.Blazor.MultiColumnComboBox + +@*Hidden:Lines*@ +@inherits SampleBaseComponent +@*End:Hidden*@ + + +

This example demonstrates the virtualization feature of the Blazor MultiColumn ComboBox. Virtualization optimizes the ComboBox by only rendering the items visible in the dropdown, allowing efficient handling of large datasets without performance issues.

+
+ +

The MultiColumn ComboBox supports virtualization, which enhances performance by loading and displaying only the items currently in view. This feature is particularly useful when working with extensive data sets, ensuring smooth scrolling and quick interactions.

+

See also

+ +
+ +
+
+ + + +
+
+ +@code { + public class Employee + { + public string Name { get; set; } + public string Department { get; set; } + public string Role { get; set; } + public string Location { get; set; } + public int Experience { get; set; } + } + + private string Value { get; set; } = "Alice Johnson"; + + private List Employees = new List(); + + protected override Task OnInitializedAsync() + { + List employees = new List(); + string[] names = { "John Doe", "Jane Smith", "Alice Johnson", "Bob Brown", "Emily Davis" }; + string[] departments = { "HR", "IT", "Finance", "Marketing", "Sales" }; + string[] roles = { "Manager", "Developer", "Analyst", "Consultant", "Executive" }; + string[] locations = { "New York", "San Francisco", "London", "Berlin", "Tokyo" }; + + Random rand = new Random(); + + for (int i = 1; i <= 2000; i++) + { + employees.Add(new Employee + { + Name = names[rand.Next(names.Length)], + Department = departments[rand.Next(departments.Length)], + Role = roles[rand.Next(roles.Length)], + Location = locations[rand.Next(locations.Length)], + Experience = rand.Next(1, 21) // Experience between 1 and 20 years + }); + } + + Employees = employees; + + return base.OnInitializedAsync(); + } +} + + + + diff --git a/Blazor-MAUI-Demos/Pages/DropDowns/SampleList.cs b/Blazor-MAUI-Demos/Pages/DropDowns/SampleList.cs index 0560c2fed..306056684 100644 --- a/Blazor-MAUI-Demos/Pages/DropDowns/SampleList.cs +++ b/Blazor-MAUI-Demos/Pages/DropDowns/SampleList.cs @@ -1,4 +1,4 @@ -#region Copyright Syncfusion® Inc. 2001-2025. +#region Copyright Syncfusion® Inc. 2001-2025. // Copyright Syncfusion® Inc. 2001-2025. All rights reserved. // Use of this code is subject to the terms of our license. // A copy of the current license can be obtained at any time by e-mailing @@ -499,5 +499,107 @@ internal partial class SampleConfig Type = SampleType.None } }; + + public List MultiColumnComboBox { get; set; } = new List { + new Sample + { + Name = "Default Functionalities", + Category = "MultiColumn ComboBox", + Directory = "DropDowns/MultiColumnComboBox", + Url = "MultiColumn-ComboBox/Default-Functionalities", + FileName = "DefaultFunctionalities.razor", + Type = SampleType.None, + }, + new Sample + { + Name = "Remote Data Binding", + Category = "MultiColumn ComboBox", + Directory = "DropDowns/MultiColumnComboBox", + Url = "MultiColumn-ComboBox/Remote-Data-Binding", + FileName = "RemoteDataBinding.razor", + Type = SampleType.None + }, + new Sample + { + Name = "Paging", + Category = "MultiColumn ComboBox", + Directory = "DropDowns/MultiColumnComboBox", + Url = "MultiColumn-ComboBox/Paging", + FileName = "Paging.razor", + Type = SampleType.None + }, + new Sample + { + Name = "Filtering", + Category = "MultiColumn ComboBox", + Directory = "DropDowns/MultiColumnComboBox", + Url = "MultiColumn-ComboBox/Filtering", + FileName = "Filtering.razor", + Type = SampleType.None + }, + new Sample + { + Name = "Virtualization", + Category = "MultiColumn ComboBox", + Directory = "DropDowns/MultiColumnComboBox", + Url = "MultiColumn-ComboBox/Virtualization", + FileName = "Virtualization.razor", + Type = SampleType.None + }, + new Sample + { + Name = "Grouping and Sorting", + Category = "MultiColumn ComboBox", + Directory = "DropDowns/MultiColumnComboBox", + Url = "MultiColumn-ComboBox/Grouping-Sorting", + FileName = "Grouping.razor", + Type = SampleType.None + }, + new Sample + { + Name = "Template", + Category = "MultiColumn ComboBox", + Directory = "DropDowns/MultiColumnComboBox", + Url = "MultiColumn-ComboBox/Template", + FileName = "Template.razor", + Type = SampleType.None + }, + new Sample + { + Name = "Keyboard Navigation", + Category = "MultiColumn ComboBox", + Directory = "DropDowns/MultiColumnComboBox", + Url = "MultiColumn-ComboBox/Keyboard-Navigation", + FileName = "KeyboardNavigation.razor", + Type = SampleType.None + }, + new Sample + { + Name = "Row Style", + Category = "MultiColumn ComboBox", + Directory = "DropDowns/MultiColumnComboBox", + Url = "MultiColumn-ComboBox/RowStyle", + FileName = "RowStyle.razor", + Type = SampleType.None + }, + new Sample + { + Name = "Form Support", + Category = "MultiColumn ComboBox", + Directory = "DropDowns/MultiColumnComboBox", + Url = "MultiColumn-ComboBox/FormSupport", + FileName = "FormSupport.razor", + Type = SampleType.None + }, + new Sample + { + Name = "Text Wrap", + Category = "MultiColumn ComboBox", + Directory = "DropDowns/MultiColumnComboBox", + Url = "MultiColumn-ComboBox/TextWrap", + FileName = "TextWrap.razor", + Type = SampleType.None + } + }; } } diff --git a/Blazor-MAUI-Demos/Pages/Inputs/Rating/KeyboardNavigation.razor b/Blazor-MAUI-Demos/Pages/Inputs/Rating/KeyboardNavigation.razor new file mode 100644 index 000000000..19c25d0b0 --- /dev/null +++ b/Blazor-MAUI-Demos/Pages/Inputs/Rating/KeyboardNavigation.razor @@ -0,0 +1,52 @@ +@page "/rating/navigation" +@using Syncfusion.Blazor.Inputs + +@*Hidden:Lines*@ +@inherits SampleBaseComponent + +@*End:Hidden*@ + + +

+ This demo showcases the keyboard shortcuts applicable in the Rating component. +

+
+ + The below key combinations can be used in Rating to perform various actions. +
    +
  • + Tab + - Focus. +
  • +
  • + Left Arrow + - Increase in RTL and decrease in LTR. +
  • +
  • + Right Arrow + - Decrease in RTL and increase in LTR. +
  • +
  • + Down arrow + - Decreases the value. +
  • +
  • + Up arrow + - Increases the value. +
  • +
+
+ +
+
+ +
+
+ + + diff --git a/Blazor-MAUI-Demos/wwwroot/data/word/markdown-to-word.md b/Blazor-MAUI-Demos/wwwroot/data/word/markdown-to-word.md new file mode 100644 index 000000000..bb53c1a70 --- /dev/null +++ b/Blazor-MAUI-Demos/wwwroot/data/word/markdown-to-word.md @@ -0,0 +1,70 @@ +# A tour of the C\# language + +C\# (pronounced "See Sharp") is a modern, object\-oriented, and type\-safe programming language. C\# enables developers to build many types of secure and robust applications that run in .NET. C\# has its roots in the C family of languages and will be immediately familiar to C, C\+\+, Java, and JavaScript programmers. This tour provides an overview of the major components of the language in C\# 11 and earlier. If you want to explore the language through interactive examples, try the [introduction to C#](https://learn.microsoft.com/en-us/dotnet/csharp/tour-of-csharp/tutorials/) tutorials. + +Several C\# features help create robust and durable applications. [Garbage collection](https://learn.microsoft.com/en-us/dotnet/standard/garbage-collection/) automatically reclaims memory occupied by unreachable unused objects. [Nullable types](https://learn.microsoft.com/en-us/dotnet/csharp/nullable-references) guard against variables that don't refer to allocated objects. [Exception handling](https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/exceptions/) provides a structured and extensible approach to error detection and recovery. [Lambda expressions](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/lambda-expressions) support functional programming techniques. [Language Integrated Query (LINQ)](https://learn.microsoft.com/en-us/dotnet/csharp/linq/) syntax creates a common pattern for working with data from any source. Language support for [asynchronous operations](https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/) provides syntax for building distributed systems. C\# has a [unified type system](https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/types/). All C\# types, including primitive types such as `int` and `double`, inherit from a single root `object` type. All types share a set of common operations. Values of any type can be stored, transported, and operated upon in a consistent manner. Furthermore, C\# supports both user\-defined [reference types](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/reference-types) and [value types](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/value-types). C\# allows dynamic allocation of objects and in\-line storage of lightweight structures. C\# supports generic methods and types, which provide increased type safety and performance. C\# provides iterators, which enable implementers of collection classes to define custom behaviors for client code. + +# Hello world + +The "Hello, World" program is traditionally used to introduce a programming language. Here it is in C\#: +``` +using System; +class Hello +{ + static void Main() + { + Console.WriteLine("Hello, World"); + } +} +``` + + + +The "Hello, World" program starts with a `using` directive that references the `System` namespace. Namespaces provide a hierarchical means of organizing C\# programs and libraries. A `using` directive that references a given namespace enables unqualified use of the types that are members of that namespace. Because of the `using` directive, the program can use Console.WriteLine as shorthand for System.Console.WriteLine. + +The Hello `class` declared by the "Hello, World" program has a single member, the method named `Main`. The `Main` method is declared with the static modifier. By convention, a static method named `Main` serves as the entry point of a C\# program. + +The output of the program is produced by the `WriteLine` method of the `Console` class in the `System` namespace. This class is provided by the standard class libraries, which, by default, are automatically referenced by the compiler. + +# Types and variables + +A *type* defines the structure and behavior of any data in C\#. The declaration of a type may include its members, base type, interfaces it implements, and operations permitted for that type. A *variable* is a label that refers to an instance of a specific type. + +There are two kinds of types in C\#:  + +1. Value types + +1. Reference types. + +## Value types + +C\#'s value types are further divided into *simple types*, *enum types*, *struct types*, *nullable value types*, and *tuple value types*. +|Value types|Details| +|:---|:---| +|[Simple types](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/value-types)|[Signed integral](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/integral-numeric-types), [unsigned integral](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/integral-numeric-types), [unicode characters](https://learn.microsoft.com/en-us/dotnet/standard/base-types/character-encoding-introduction), [IEEE binary floating-point](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/floating-point-numeric-types), [High-precision decimal floating-point](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/floating-point-numeric-types), and boolean. | +|[Enum types](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/enum)|User\-defined types of the form `enum E {...}`. An `enum` type is a distinct type with named constants. Every `enum` type has an underlying type, which must be one of the eight integral types. The set of values of an `enum` type is the same as the set of values of the underlying type.| +|[Struct types](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/struct)|User\-defined types of the form `struct S {...}`| +|[Nullable value types](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/nullable-value-types)|Extensions of all other value types with a `null` value| +|[Tuple value types](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/value-tuples)|User\-defined types of the form  `(T1, T2, ...)`| + + +## Reference types +|Reference types|Details| +|:---|:---| +|[Class types](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/class) |Ultimate base class of all other types: object. Unicode strings: string, which represents a sequence of UTF\-16 code units. User\-defined types of the form class C {...}| +|[Interface types](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/interface) |User\-defined types of the form interface I {...}| +|[Array types](https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/arrays/) |Single\-dimensional, multi\-dimensional, and jagged. For example: int\[], int\[,], and int\[]\[] | +|[Delegate types](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/reference-types) |User\-defined types of the form delegate int D(...) | + + +C\# programs use *type declarations* to create new types. A type declaration specifies the name and the members of the new type. Six of C\#'s categories of types are user\-definable: class types, struct types, interface types, enum types, delegate types, and tuple value types. You can also declare `record` types, either `record struct`, or `record class`. Record types have compiler\-synthesized members. You use records primarily for storing values, with minimal associated behavior. + +- A `class` type defines a data structure that contains data members (fields) and function members (methods, properties, and others). Class types support single inheritance and polymorphism, mechanisms whereby derived classes can extend and specialize base classes. + +- A `struct` type is similar to a class type in that it represents a structure with data members and function members. However, unlike classes, structs are value types and don't typically require heap allocation. Struct types don't support user\-specified inheritance, and all struct types implicitly inherit from type `object`. + +- An `interface` type defines a contract as a named set of public members. A `class` or `struct` that implements an `interface` must provide implementations of the interface's members. An `interface` may inherit from multiple base interfaces, and a `class` or `struct` may implement multiple interfaces. + +- A `delegate` type represents references to methods with a particular parameter list and return type. Delegates make it possible to treat methods as entities that can be assigned to variables and passed as parameters. Delegates are analogous to function types provided by functional languages. They're also similar to the concept of function pointers found in some other languages. Unlike function pointers, delegates are object\-oriented and type\-safe. + +You can explore more about C\# in this [tutorials](https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/tutorials/classes). \ No newline at end of file diff --git a/Blazor-Server-Demos/Blazor_Server_Demos_NET6.csproj b/Blazor-Server-Demos/Blazor_Server_Demos_NET6.csproj deleted file mode 100644 index 5725955f4..000000000 --- a/Blazor-Server-Demos/Blazor_Server_Demos_NET6.csproj +++ /dev/null @@ -1,53 +0,0 @@ - - - - net6.0 - 9.0 - BlazorDemos - true - false - - - - - $(PublishDir)\wwwroot\_content - - - - - - - - - - - TRACE;RELEASE;NET6_0;$(SyncfusionLicensing);STAGING - - - - TRACE;DEBUG;NET6_0;STAGING - - - - $(DefineConstants);STAGING - - - - $(DefineConstants);ISSTAGING - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Blazor-Server-Demos/Blazor_Server_Demos_NET6.sln b/Blazor-Server-Demos/Blazor_Server_Demos_NET6.sln deleted file mode 100644 index 521138f49..000000000 --- a/Blazor-Server-Demos/Blazor_Server_Demos_NET6.sln +++ /dev/null @@ -1,31 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.4.33110.190 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Blazor_Server_Common_NET6", "..\Common\Blazor_Server_Common_NET6.csproj", "{AF7863B9-AA30-4E7C-8F66-D23CA5DC1633}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Blazor_Server_Demos_NET6", "Blazor_Server_Demos_NET6.csproj", "{30F7EA59-B570-459B-82B3-4B5BA0D2485D}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {AF7863B9-AA30-4E7C-8F66-D23CA5DC1633}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AF7863B9-AA30-4E7C-8F66-D23CA5DC1633}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AF7863B9-AA30-4E7C-8F66-D23CA5DC1633}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AF7863B9-AA30-4E7C-8F66-D23CA5DC1633}.Release|Any CPU.Build.0 = Release|Any CPU - {30F7EA59-B570-459B-82B3-4B5BA0D2485D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {30F7EA59-B570-459B-82B3-4B5BA0D2485D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {30F7EA59-B570-459B-82B3-4B5BA0D2485D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {30F7EA59-B570-459B-82B3-4B5BA0D2485D}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {4EDACC92-B8CC-4574-A9E6-9172A07FED8A} - EndGlobalSection -EndGlobal diff --git a/Blazor-Server-Demos/Components/App.razor b/Blazor-Server-Demos/Components/App.razor index e1855d666..3dba663c5 100644 --- a/Blazor-Server-Demos/Components/App.razor +++ b/Blazor-Server-Demos/Components/App.razor @@ -2,18 +2,6 @@ - - -