學習ASP.NET Core Blazor編程系列十六——排序

来源:https://www.cnblogs.com/chillsrc/archive/2022/12/11/16972978.html
-Advertisement-
Play Games

WebApiClient 介面註冊與選項 1 配置文件中配置HttpApiOptions選項 配置示例 "IUserApi": { "HttpHost": "http://www.webappiclient.com/", "UseParameterPropertyValidate": false, ...


學習ASP.NET Core Blazor編程系列文章之目錄 學習ASP.NET Core Blazor編程系列一——綜述 學習ASP.NET Core Blazor編程系列二——第一個Blazor應用程式(上)
學習ASP.NET Core Blazor編程系列三——實體 學習ASP.NET Core Blazor編程系列五——列表頁面 學習ASP.NET Core Blazor編程系列七——新增圖書 學習ASP.NET Core Blazor編程系列八——數據校驗 學習ASP.NET Core Blazor編程系列十——路由(上) 學習ASP.NET Core Blazor編程系列十二——路由(下) 學習ASP.NET Core Blazor編程系列十三——路由(完)  學習ASP.NET Core Blazor編程系列十四——修改 學習ASP.NET Core Blazor編程系列十五——查詢  

      在本篇文章我們來學習如何進行對列表按標題進行排序。

      通過前面的教程學習,你可以實現一個簡單的書籍管理系統。 在本教程將向圖書列表頁面中添加排序功能。

一、排序功能

     1.在Visual Studio 2022的菜單欄上,找到“調試--》開始調試”或是按F5鍵,Visual Studio 2022會生成BlazorAppDemo應用程式,併在瀏覽器中打開Home頁面,我們使用滑鼠點擊左邊的菜單欄上的“圖書列表”菜單項,會進入“圖書列表”頁面。如下圖。這是沒有排序的圖書列表頁面。

     2. 在Visual Studio 2022的解決方案資源管理器中找到 Pages\ BookIndex.razor文件,在文本編輯器中打開,在@code中添加用於進行排序的變數,代碼如下:

    public string NameSort { get; set; }
    public string DateSort { get; set; }
    public string PriceSort { get; set; }  

     3.  同時在@code中添加一個排序方法Sort(MouseEventArgs e, string sortOrder),代碼如下:

    public void Sort(MouseEventArgs e, string sortOrder)
    {

        var qryBooks = from m in _context.Book
                    select m;

 
        //排序
        NameSort = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";

        DateSort = sortOrder == "Date" ? "date_desc" : "Date";
        PriceSort = sortOrder=="price"?"price_desc":"price";

        switch (sortOrder)
        {
            case "name_desc":

                qryBooks = qryBooks.OrderByDescending(s => s.Name);
                break;

            case "Date":
                qryBooks = qryBooks.OrderBy(s => s.ReleaseDate);
                break;

            case "date_desc":
                qryBooks = qryBooks.OrderByDescending(s => s.ReleaseDate);
                break;

            case "price_desc":
                qryBooks = qryBooks.OrderByDescending(s => s.Price);
                break;

            case "price":
                qryBooks = qryBooks.OrderBy(s => s.Price);
                break;

            default:
                qryBooks = qryBooks.OrderBy(s => s.Name);
                break;

        }

        books = qryBooks.ToList();

    }
        按上面的代碼,從排序按鈕的點擊事件中接收sortOrder參數。 “Name”、”Date”、“price”三個排序類型可以選擇用於降序排序,而在這三個排序類型加上下劃線和”desc”構成一個新的排序類型,即為升序。 預設排序順序為升序。

        第一次請求時,沒有任何排序類型的字元串。 書籍按名稱升序顯示也就是預設值中的排序方式。 當用戶單擊列標題的超鏈接,將向Sort方法提供相應的sortOrder排序字元串。

        Blazor頁面使用 NameSort 、DateSort、PriceSort 為列標題超鏈接配置相應的排序字元串值。  代碼如下所示:    

        //排序

        NameSort = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
        DateSort = sortOrder == "Date" ? "date_desc" : "Date";
        PriceSort = sortOrder=="price"?"price_desc":"price";

        這三個語句都使用了三目運算符。 第一個語句指如果sortOrder參數為 null 或為空則 NameSort 設置為”name_desc”; 否則,設置為一個空字元串。

         Sort方法使用 LINQ 指定要作為排序依據的列。 代碼在switch 語句之前創建了IQueryable變數然後在 switch 語句中對其進行修改,併在switch語句之後調用ToList()方法。當你創建和修改IQueryable變數時資料庫不會接收到任何查詢。將 IQueryable 對象轉換成集合後才能執行查詢。 通過調用 IQueryable 等方法可將 ToList() 轉換成集合。 因此,IQueryable 代碼會生成單個查詢,此查詢直到出現以下語句才執行:

        books = qryBooks.ToList(); 

        3. 在以往經典的Web應用程式中,我們經常使用<a>標簽創建鏈接,然後將數據提交給後臺,進行排序。

       那麼Blazor應用程式中應該如何進行排序呢?我們在此次的示例中還是使用<a>元素,但是將此元素當做按鈕來使用。通過onclick事件來調用排序方法 。在Visual Studio 2022中找到已經打開的BookIndex.razor文件,用以下代碼進行修改 ,以下代碼主要添加列標題的超鏈接用於實現排序。

@page "/BookIndex"
@using BlazorAppDemo.Models
@using Microsoft.EntityFrameworkCore
@using Microsoft.AspNetCore.Mvc.Rendering;
@inject IDbContextFactory<BookContext> dbFactory
@inject NavigationManager NavigationManager
 
<PageTitle>圖書列表</PageTitle>
 
<h3>圖書列表</h3>
<EditForm Model=@books>
 
<div class="input-group mb-3"> 

    <div class="input-group-prepend">
    <span class="input-group-text" for="inputGroupSelectAuthor">作者:</span>
      </div>
      <InputSelect @bind-Value=Author id="inputGroupSelectAuthor" class="custom-select">
          <option value="">請選擇作者</option>
          @foreach (var item in Authors)
          {
                <option [email protected]>@item.Text</option>
         }

   
          </InputSelect>

    <div class="input-group-prepend">
    <span class="input-group-text" id="inputGroup-sizing-default">圖書名稱:</span>
      </div>

    <InputText @bind-Value=Name class="form-control" aria-describedby="inputGroup-sizing-default"></InputText>
        <ValidationMessage For="@(() =>Name)" />
         
             <button id="search" class="btn btn-outline-secondary" @onclick="Query">查詢</button>
    </div>
    </EditForm>
<table class="table-responsive" width="90%"> 

    <tr>
        <td><a class="nav-link active" role="button" aria-pressed="true" @onclick="@(e => Sort(e, @NameSort))">書名</a></td>

        <td>作者</td>
        <td><a class="nav-link active" role="button" aria-pressed="true" @onclick="@(e => Sort(e, @PriceSort))">價格</a></td>
        <td><a class="nav-link active" role="button" aria-pressed="true" @onclick="@(e => Sort(e, @DateSort))">出版日期</a></td>
    <td>庫存數量</td>
    <td>已租數量</td>
    <td>操作</td>


    </tr>
    @foreach (var item in books)
    {
        <tr> 
        <td>@item.Name</td>
        <td>@item.Author</td>
        <td>@item.Price</td>
        <td>@item.ReleaseDate.ToShortDateString()</td>
        <td>@item.StockQty</td>
        <td>@item.Qty</td>
            <td><a href="/[email protected]">編輯</a>

                <button id="edit" class="btn btn-primary" @onclick="@(e => EditBook(e, @item.ID))">修改</button>
            </td>
    </tr>
 
    }

</table>

 
       對於上面的代碼中的三行斜體代碼的說明:

       向書名、出版日期、價格三列標題添加超鏈接。

       使用NameSort 、DateSort 、PriceSort做為參數,通過按鈕的點擊事件將此三個參數傳遞給Sort方法。

   4.  在Visual Studio 2022的菜單欄上,找到“調試-->開始調試”或是按F5鍵,Visual Studio 2022會生成BlazorAppDemo應用程式,併在瀏覽器中打開Home頁面,我們使用滑鼠點擊左邊的菜單欄上的“圖書列表”菜單項,會進入“圖書列表”頁面。

    5. 在圖書列表頁面中使用滑鼠左鍵單擊列表標題中的“書名”2次。圖書信息就按書名進行降序或升序排列。如下圖中1與2。

     6.在圖書列表頁面中使用滑鼠左鍵單擊標題名“出版日期”2次,你會看到類似在“書名”上點擊兩次的排序效果,圖書列表會根據出版日期進行升序或降序排列。

      7.在圖書列表頁面中使用滑鼠左鍵單擊標題名“價格”2次。你會看到類似在標題“書名”上點擊兩次的效果,圖書列表會根據價格進行升序或降序排列。

       
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 目錄 一.OpenGL 圖像透明度 1.原始圖片 2.效果演示 二.OpenGL 圖像透明度源碼下載 三.猜你喜歡 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 ...
  • package method; /* * 四則運算計算器 * */ import java.util.Scanner; public class Demo07 { public static void main(String[] args) { Scanner scanner = new Scann ...
  • 前言 今天給大家介紹的是Python爬取螺螄粉商品數據,在這裡給需要的小伙伴們代碼,並且給出一點小心得。 首先是爬取之前應該儘可能偽裝成瀏覽器而不被識別出來是爬蟲,基本的是加請求頭,但是這樣的純文本數據爬取的人會很多,所以我們需要考慮更換代理IP和隨機更換請求頭的方式來對螺螄粉數據進行爬取。 在每次 ...
  • 哈嘍兄弟們,今天分享10個優秀的Python庫,超級實用! 為什麼這麼多人選擇學習python?首先,python是一門全場景編程語言,對於初學編程的人而言,選擇一門全場景編程語言是非常不錯的選擇;其次,python語言簡單易學,對初學者十分友好,即便沒有任何編程語言基礎也很容易學習;另一大原因是因 ...
  • 通過前面8篇文章的學習,我們已經學會了docker的安裝、docker常用的命令已經docker鏡像修改後提交的遠程鏡像倉庫及提交到公司的私服倉庫中。接下來,我們再來學學Docker另外一個重要的東西-容器數據捲。 我們先來看看一個場景:我們有多個docker容器需要使用到同一個數據,比如說A服務和 ...
  • Kibana 是用於在 Elasticsearch 中可視化數據的強大工具,是一種免費及開放的分析和可視化工具,可通過基於瀏覽器的界面輕鬆搜索,可視化和探索大量數據。本文主要包括 Kibana 的簡介及安裝;文中所使用到的軟體版本:Elasticsearch 8.5.1、Kibana 8.5.1、C ...
  • JZ43 整數中1出現的次數(從1到n整數中1出現的次數) 描述 輸入一個整數 n ,求 1~n 這 n 個整數的十進位表示中 1 出現的次數 例如, 1~13 中包含 1 的數字有 1 、 10 、 11 、 12 、 13 因此共出現 6 次 思路:暴力統計法 遍歷1到n的每個數字,然後對每個數 ...
  • 您好,我是@馬哥python說,一枚10年程式猿。 一、爬取目標 之前,我分享過一些B站的爬蟲: 【Python爬蟲案例】用Python爬取李子柒B站視頻數據 【Python爬蟲案例】用python爬嗶哩嗶哩搜索結果 【爬蟲+情感判定+Top10高頻詞+詞雲圖】"谷愛凌"熱門彈幕python輿情分析 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...