WPF高級 | WPF 與數據庫交互:連接、查詢與數據更新
- 前言
- 一、數據庫交互基礎概念
- 1.1 數據庫簡介
- 1.2 數據訪問技術
- 二、WPF 與數據庫連接
- 2.1 連接字符串
- 2.2 建立連接
- 三、WPF 中的數據查詢
- 3.1 使用ADO.NET進行數據查詢
- 3.2 使用 Entity Framework 進行數據查詢
- 3.3 使用 Dapper 進行數據查詢
- 四、WPF 中的數據更新
- 4.1 使用ADO.NET進行數據更新
- 4.2 使用 Entity Framework 進行數據更新
- 4.3 使用 Dapper 進行數據更新
- 五、數據綁定與顯示
- 5.1 將查詢結果綁定到 WPF 控件
- 5.2 實現數據的實時更新顯示
- 六、錯誤處理與事務
- 6.1 錯誤處理
- 6.2 事務處理
- 七、總結
- 結束語
- 優質源碼分享
WPF高級 | WPF 與數據庫交互:連接、查詢與數據更新
,在現代應用程序開發中,數據的存儲和管理至關重要。Windows Presentation Foundation(WPF)作為一款強大的圖形界面開發框架,常常需要與數據庫進行交互,以實現數據的持久化存儲、讀取和更新。本文將深入探討 WPF 與數據庫交互的各個方面,包括數據庫連接的建立、數據查詢的執行以及數據更新的操作,并通過豐富的代碼示例和詳細的概念解釋,幫助讀者掌握這一關鍵技術。
前言
????在數字浪潮洶涌澎湃的時代,程序開發宛如一座神秘而宏偉的魔法城堡,矗立在科技的浩瀚星空中。代碼的字符,似那閃爍的星辰,按照特定的軌跡與節奏,組合、交織、碰撞,即將開啟一場奇妙且充滿無限可能的創造之旅。當空白的文檔界面如同深邃的宇宙等待探索,程序員們則化身無畏的星辰開拓者,指尖在鍵盤上輕舞,準備用智慧與邏輯編織出足以改變世界運行規則的程序畫卷,在 0 和 1 的二進制世界里,鐫刻下屬于人類創新與突破的不朽印記。
????在當今數字化時代,桌面應用程序的用戶界面(UI)設計至關重要,它直接影響著用戶體驗與產品的競爭力。而 WPF(Windows Presentation Foundation)作為微軟推出的一款強大的 UI 框架,其布局系統更是構建精美界面的核心要素。WPF 布局系統為開發者提供了豐富多樣的布局方式,能夠輕松應對各種復雜的界面設計需求,無論是簡潔明了的工具軟件,還是功能繁雜的企業級應用,都能借助其打造出令人驚艷的視覺效果與流暢的交互體驗。
????WPF從入門到精通專欄,旨在為讀者呈現一條從對 WPF(Windows Presentation Foundation)技術懵懂無知到精通掌握的學習路徑。首先從基礎入手,介紹 WPF 的核心概念,涵蓋其獨特的架構特點、開發環境搭建流程,詳細解讀布局系統、常用控件以及事件機制等基礎知識,幫助初學者搭建起對 WPF 整體的初步認知框架。隨著學習的深入,進階部分聚焦于數據綁定、樣式模板、動畫特效等關鍵知識點,進一步拓展 WPF 開發的能力邊界,使開發者能夠打造出更為個性化、交互性強的桌面應用界面。高級階段則涉及自定義控件開發、MVVM 設計模式應用、多線程編程等深層次內容,助力開發者應對復雜的業務需求,構建大型且可維護的應用架構。同時,通過實戰項目案例解析,展示如何將所學知識綜合運用到實際開發中,從需求分析到功能實現再到優化測試,全方位積累實踐經驗。此外,還探討了性能優化、與其他技術集成以及安全機制等拓展性話題,讓讀者對 WPF 技術在不同維度有更深入理解,最終實現對 WPF 技術的精通掌握,具備獨立開發高質量桌面應用的能力。
🛕 點擊進入WPF從入門到精通專欄
一、數據庫交互基礎概念
1.1 數據庫簡介
????數據庫是按照數據結構來組織、存儲和管理數據的倉庫。常見的數據庫管理系統(DBMS)有 SQL Server、MySQL、Oracle 等。在 WPF 應用中,選擇合適的數據庫取決于項目的需求,如數據量大小、性能要求、成本等因素。例如,SQL Server 是微軟的關系型數據庫,與.NET 框架集成度高,適合企業級應用;MySQL 是開源的關系型數據庫,成本低,性能較好,廣泛應用于各種規模的項目。
1.2 數據訪問技術
????在.NET 開發中,有多種數據訪問技術可用于 WPF 與數據庫交互,常見的有ADO.NET、Entity Framework 和 Dapper。
????ADO.NET:是.NET Framework 中用于訪問數據的基本技術,它提供了一組用于與各種數據源進行交互的類,包括數據庫、文件系統等。ADO.NET主要由 Connection、Command、DataReader、DataAdapter 等對象組成。例如,使用ADO.NET連接 SQL Server 數據庫:
using System.Data.SqlClient;string connectionString = "Data Source=YOUR_SERVER_NAME;Initial Catalog=YOUR_DATABASE_NAME;User ID=YOUR_USERNAME;Password=YOUR_PASSWORD";
using (SqlConnection connection = new SqlConnection(connectionString))
{connection.Open();// 在這里執行數據庫操作
}
????Entity Framework:是一種對象關系映射(ORM)框架,它允許開發者使用.NET 對象來操作數據庫,而無需編寫大量的 SQL 語句。Entity Framework 會自動將對象的操作轉換為對應的 SQL 語句。例如,使用 Entity Framework 創建一個簡單的數據庫上下文:
using System.Data.Entity;public class MyDbContext : DbContext
{public DbSet<Product> Products { get; set; }
}public class Product
{public int Id { get; set; }public string Name { get; set; }public decimal Price { get; set; }
}
????Dapper:是一個輕量級的 ORM 框架,它在性能上表現出色,適用于對性能要求較高的場景。Dapper 主要通過SqlMapper類來執行 SQL 語句,并將結果映射到對象。例如,使用 Dapper 查詢數據:
using Dapper;
using System.Data.SqlClient;string connectionString = "Data Source=YOUR_SERVER_NAME;Initial Catalog=YOUR_DATABASE_NAME;User ID=YOUR_USERNAME;Password=YOUR_PASSWORD";
using (SqlConnection connection = new SqlConnection(connectionString))
{var products = connection.Query<Product>("SELECT * FROM Products").ToList();
}
二、WPF 與數據庫連接
2.1 連接字符串
????連接字符串是用于建立與數據庫連接的關鍵信息,它包含了數據庫服務器地址、數據庫名稱、用戶名、密碼等信息。連接字符串的格式因數據庫類型而異。例如,SQL Server 的連接字符串格式如下:
Data Source=服務器名稱;Initial Catalog=數據庫名稱;User ID=用戶名;Password=密碼
????MySQL 的連接字符串格式如下:
server=服務器地址;database=數據庫名稱;uid=用戶名;pwd=密碼;
????在 WPF 應用中,可以將連接字符串存儲在配置文件(如app.config或web.config)中,以便于管理和修改。例如,在app.config中添加連接字符串:
<configuration><connectionStrings><add name="MyConnectionString" connectionString="Data Source=YOUR_SERVER_NAME;Initial Catalog=YOUR_DATABASE_NAME;User ID=YOUR_USERNAME;Password=YOUR_PASSWORD" providerName="System.Data.SqlClient" /></connectionStrings>
</configuration>
????在代碼中讀取連接字符串:
string connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
2.2 建立連接
????使用ADO.NET建立連接:通過SqlConnection類(針對 SQL Server)或其他數據庫對應的連接類來建立連接。
using System.Data.SqlClient;string connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{try{connection.Open();MessageBox.Show("連接成功!");}catch (Exception ex){MessageBox.Show("連接失敗:" + ex.Message);}
}
????使用 Entity Framework 建立連接:在創建DbContext實例時,Entity Framework 會根據配置文件中的連接字符串自動建立連接。
using System.Data.Entity;public class MyDbContext : DbContext
{public MyDbContext() : base("name=MyConnectionString"){}public DbSet<Product> Products { get; set; }
}在使用時:
using (MyDbContext context = new MyDbContext())
{// 在這里執行數據庫操作
}
三、WPF 中的數據查詢
3.1 使用ADO.NET進行數據查詢
????使用 SqlDataReader 讀取數據:SqlDataReader是一種快速、只進的讀取器,用于從數據庫中讀取數據。
using System.Data.SqlClient;string connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{string query = "SELECT * FROM Products";using (SqlCommand command = new SqlCommand(query, connection)){connection.Open();using (SqlDataReader reader = command.ExecuteReader()){while (reader.Read()){int id = reader.GetInt32(0);string name = reader.GetString(1);decimal price = reader.GetDecimal(2);// 處理讀取到的數據}}}
}
????使用 DataSet 和 DataAdapter 填充數據:DataSet是一個內存中的數據緩存,DataAdapter用于在數據庫和DataSet之間進行數據傳輸。
using System.Data.SqlClient;string connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{string query = "SELECT * FROM Products";using (SqlDataAdapter adapter = new SqlDataAdapter(query, connection)){DataSet dataSet = new DataSet();adapter.Fill(dataSet, "Products");// 處理dataSet中的數據}
}
3.2 使用 Entity Framework 進行數據查詢
????Entity Framework 提供了 LINQ to Entities 查詢語法,使得查詢操作更加簡潔和直觀。
using (MyDbContext context = new MyDbContext())
{var products = from p in context.Productswhere p.Price > 100orderby p.Nameselect p;foreach (var product in products){// 處理查詢結果}
}
????還可以使用 Lambda 表達式進行查詢:
using (MyDbContext context = new MyDbContext())
{var products = context.Products.Where(p => p.Price > 100).OrderBy(p => p.Name).ToList();foreach (var product in products){// 處理查詢結果}
}
3.3 使用 Dapper 進行數據查詢
????Dapper 的查詢操作基于 SQL 語句,通過Query方法執行查詢并將結果映射到對象。
using Dapper;
using System.Data.SqlClient;string connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{string query = "SELECT * FROM Products WHERE Price > @Price";var products = connection.Query<Product>(query, new { Price = 100 }).ToList();foreach (var product in products){// 處理查詢結果}
}
四、WPF 中的數據更新
4.1 使用ADO.NET進行數據更新
????使用 SqlCommand 執行更新語句:通過SqlCommand的ExecuteNonQuery方法執行 SQL 更新語句。
using System.Data.SqlClient;string connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{string updateQuery = "UPDATE Products SET Price = @NewPrice WHERE Id = @Id";using (SqlCommand command = new SqlCommand(updateQuery, connection)){command.Parameters.AddWithValue("@NewPrice", 150.0m);command.Parameters.AddWithValue("@Id", 1);connection.Open();int rowsAffected = command.ExecuteNonQuery();if (rowsAffected > 0){MessageBox.Show("數據更新成功!");}else{MessageBox.Show("數據更新失敗!");}}
}
????使用 DataAdapter 更新 DataSet 并同步到數據庫:先修改DataSet中的數據,然后通過DataAdapter的Update方法將更改同步到數據庫。
using System.Data.SqlClient;string connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{string query = "SELECT * FROM Products";using (SqlDataAdapter adapter = new SqlDataAdapter(query, connection)){SqlCommandBuilder builder = new SqlCommandBuilder(adapter);DataSet dataSet = new DataSet();adapter.Fill(dataSet, "Products");DataRow row = dataSet.Tables["Products"].Rows[0];row["Price"] = 150.0m;adapter.Update(dataSet, "Products");}
}
4.2 使用 Entity Framework 進行數據更新
????修改實體對象并保存更改:在 Entity Framework 中,修改實體對象的屬性,然后調用SaveChanges方法保存更改。
using (MyDbContext context = new MyDbContext())
{var product = context.Products.FirstOrDefault(p => p.Id == 1);if (product!= null){product.Price = 150.0m;context.SaveChanges();MessageBox.Show("數據更新成功!");}else{MessageBox.Show("未找到要更新的數據!");}
}
????使用 DbSet 的 Attach 和 Entry 方法更新:對于從其他地方獲取的實體對象,可以使用Attach方法將其附加到上下文,然后使用Entry方法標記屬性的更改狀態。
using (MyDbContext context = new MyDbContext())
{var product = new Product { Id = 1, Name = "Product Name", Price = 150.0m };context.Products.Attach(product);context.Entry(product).Property(p => p.Price).IsModified = true;context.SaveChanges();
}
4.3 使用 Dapper 進行數據更新
????Dapper 通過Execute方法執行 SQL 更新語句。
using Dapper;
using System.Data.SqlClient;string connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{string updateQuery = "UPDATE Products SET Price = @NewPrice WHERE Id = @Id";int rowsAffected = connection.Execute(updateQuery, new { NewPrice = 150.0m, Id = 1 });if (rowsAffected > 0){MessageBox.Show("數據更新成功!");}else{MessageBox.Show("數據更新失敗!");}
}
五、數據綁定與顯示
5.1 將查詢結果綁定到 WPF 控件
????在 WPF 中,可以將數據庫查詢結果綁定到各種控件,如ListView、DataGrid等。
????使用 ListView 顯示數據:首先創建一個包含數據的集合,然后將其綁定到ListView的ItemsSource屬性。
<ListView x:Name="ProductListView"><ListView.View><GridView><GridViewColumn Header="ID" DisplayMemberBinding="{Binding Id}"/><GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}"/><GridViewColumn Header="Price" DisplayMemberBinding="{Binding Price}"/></GridView></ListView.View>
</ListView>using (MyDbContext context = new MyDbContext())
{var products = context.Products.ToList();ProductListView.ItemsSource = products;
}
使用 DataGrid 顯示數據:DataGrid提供了更豐富的數據展示和編輯功能。
<DataGrid x:Name="ProductDataGrid" AutoGenerateColumns="True"/>using (MyDbContext context = new MyDbContext())
{var products = context.Products.ToList();ProductDataGrid.ItemsSource = products;
}
5.2 實現數據的實時更新顯示
????當數據庫中的數據發生變化時,為了在 WPF 界面上實時顯示更新,可以使用ObservableCollection結合數據綁定。ObservableCollection是一個動態數據集合,當集合中的元素發生變化時,會自動通知綁定的 UI 元素進行更新。
public class ProductViewModel : INotifyPropertyChanged
{private ObservableCollection<Product> _products;public ObservableCollection<Product> Products{get { return _products; }set{_products = value;OnPropertyChanged(nameof(Products));}}public ProductViewModel(){LoadProducts();}private void LoadProducts(){using (MyDbContext context = new MyDbContext()){Products = new ObservableCollection<Product>(context.Products.ToList());}}public event PropertyChangedEventHandler PropertyChanged;protected virtual void OnPropertyChanged(string propertyName){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}
}
????在 XAML 中綁定:
<Window.DataContext><local:ProductViewModel/>
</Window.DataContext>
<DataGrid x:Name="ProductDataGrid" ItemsSource="{Binding Products}"/>
????當數據更新后,重新加載數據并更新ObservableCollection,界面會自動刷新顯示最新數據。
六、錯誤處理與事務
6.1 錯誤處理
????在與數據庫交互過程中,可能會出現各種錯誤,如連接失敗、查詢語法錯誤、數據更新沖突等。合理的錯誤處理可以提高應用程序的穩定性和用戶體驗。
????使用 try - catch 塊捕獲異常:在執行數據庫操作時,使用try - catch塊捕獲可能出現的異常,并進行相應的處理。
using System.Data.SqlClient;string connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{try{string query = "SELECT * FROM Products";using (SqlCommand command = new SqlCommand(query, connection)){connection.Open();using (SqlDataReader reader = command.ExecuteReader()){while (reader.Read()){// 處理數據}}}}catch (SqlException ex){MessageBox.Show("數據庫操作錯誤:" + ex.Message);}catch (Exception ex){MessageBox.Show("其他錯誤:" + ex.Message);}
}
????記錄錯誤日志:將錯誤信息記錄到日志文件中,以便后續分析和排查問題。可以使用第三方日志庫,如 Log4Net。
using log4net;
using System.Data.SqlClient;private static readonly ILog log = LogManager.GetLogger(typeof(YourClassName));string connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{try{// 數據庫操作}catch (SqlException ex){log.Error("數據庫操作錯誤", ex);MessageBox.Show("數據庫操作錯誤:" + ex.Message);}catch (Exception ex){log.Error("其他錯誤", ex);MessageBox.Show("其他錯誤:" + ex.Message);}
}
6.2 事務處理
????事務是一組數據庫操作的集合,這些操作要么全部成功執行,要么全部回滾。在 WPF 與數據庫交互中,事務處理尤為重要,特別是在涉及多個相互關聯的數據更新操作時,它能確保數據的完整性和一致性。例如,在一個銀行轉賬操作中,需要同時從轉出賬戶扣除金額并向轉入賬戶增加金額,這兩個操作必須作為一個事務來處理,否則可能導致數據不一致,出現金額丟失或錯誤增加的情況。
1. 使用ADO.NET處理事務
????在ADO.NET
中,可以通過SqlTransaction
類來管理事務。以下是一個使用ADO.NET
進行事務處理的示例,假設我們要在數據庫中插入一條新的產品記錄,同時更新另一條相關記錄的狀態:
using System.Data.SqlClient;string connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{connection.Open();SqlTransaction transaction = connection.BeginTransaction();try{string insertQuery = "INSERT INTO Products (Name, Price) VALUES (@Name, @Price)";using (SqlCommand insertCommand = new SqlCommand(insertQuery, connection, transaction)){insertCommand.Parameters.AddWithValue("@Name", "New Product");insertCommand.Parameters.AddWithValue("@Price", 99.99m);insertCommand.ExecuteNonQuery();}string updateQuery = "UPDATE RelatedRecords SET Status = @Status WHERE ProductId = SCOPE_IDENTITY()";using (SqlCommand updateCommand = new SqlCommand(updateQuery, connection, transaction)){updateCommand.Parameters.AddWithValue("@Status", "Updated");updateCommand.ExecuteNonQuery();}transaction.Commit();MessageBox.Show("操作成功完成!");}catch (Exception ex){transaction.Rollback();MessageBox.Show("操作失敗,已回滾:" + ex.Message);}
}
????在這個示例中,首先通過BeginTransaction
方法開始一個事務,然后在事務中執行插入和更新操作。如果所有操作都成功,調用Commit
方法提交事務;如果在任何一個操作中出現異常,catch
塊會捕獲異常并調用Rollback
方法回滾事務,從而確保數據庫的一致性。
2. 使用 Entity Framework 處理事務
????在 Entity Framework 中,事務管理相對簡潔,因為DbContext
的SaveChanges
方法默認是原子操作,即要么所有更改都保存到數據庫,要么都不保存。然而,當需要在多個SaveChanges
調用之間進行事務處理時,可以使用TransactionScope
類。以下是一個示例:
using System.Transactions;
using (TransactionScope scope = new TransactionScope())
{using (MyDbContext context = new MyDbContext()){var newProduct = new Product { Name = "New Product", Price = 99.99m };context.Products.Add(newProduct);context.SaveChanges();var relatedRecord = context.RelatedRecords.FirstOrDefault(r => r.ProductId == newProduct.Id);if (relatedRecord!= null){relatedRecord.Status = "Updated";context.SaveChanges();}}scope.Complete();
}
????在這個示例中,TransactionScope
會自動管理事務的開始、提交和回滾。在TransactionScope
塊內的所有DbContext
操作都屬于同一個事務。如果所有操作成功完成,調用scope.Complete()
方法提交事務;如果出現異常,事務會自動回滾。
3. 使用 Dapper 處理事務
????Dapper
本身沒有內置的事務管理類,但可以利用SqlTransaction
來實現事務處理。示例如下:
using Dapper;
using System.Data.SqlClient;string connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{connection.Open();SqlTransaction transaction = connection.BeginTransaction();try{string insertQuery = "INSERT INTO Products (Name, Price) VALUES (@Name, @Price)";connection.Execute(insertQuery, new { Name = "New Product", Price = 99.99m }, transaction);string updateQuery = "UPDATE RelatedRecords SET Status = @Status WHERE ProductId = SCOPE_IDENTITY()";connection.Execute(updateQuery, new { Status = "Updated" }, transaction);transaction.Commit();MessageBox.Show("操作成功完成!");}catch (Exception ex){transaction.Rollback();MessageBox.Show("操作失敗,已回滾:" + ex.Message);}
}
????這里通過BeginTransaction
開始事務,在Execute
方法中傳入transaction
參數,確保所有操作都在同一個事務中執行,最后根據操作結果決定是提交還是回滾事務。
七、總結
????通過本文的詳細闡述,我們全面了解了 WPF 與數據庫交互的關鍵技術,涵蓋從數據庫連接、數據查詢、數據更新到數據綁定顯示,以及錯誤處理和事務管理等各個方面。不同的數據訪問技術,如ADO.NET、Entity Framework 和 Dapper,為開發者提供了多樣化的選擇,每種技術都有其獨特的優勢和適用場景。在實際開發中,應根據項目的具體需求,選擇合適的技術和方法來實現高效、穩定的數據庫交互功能。隨著技術的不斷發展,WPF 與數據庫交互的方式也將不斷演進,開發者需要持續關注新技術、新特性,以提升應用程序的數據處理能力和用戶體驗。掌握這些知識和技能,將為構建功能強大、數據驅動的 WPF 應用程序奠定堅實的基礎。
結束語
????????展望未來,WPF 布局系統依然有著廣闊的發展前景。隨著硬件技術的不斷革新,如高分辨率屏幕、折疊屏設備的日益普及,WPF 布局系統有望進一步強化其自適應能力,為用戶帶來更加流暢、一致的體驗。在應對高分辨率屏幕時,能夠更加智能地縮放和布局元素,確保文字清晰可讀、圖像不失真;對于折疊屏設備,可動態調整布局結構,充分利用多屏空間,實現無縫切換。
????????性能優化方面,微軟及廣大開發者社區將持續努力,進一步降低復雜布局的計算開銷,提高布局更新的效率,使得 WPF 應用在處理大規模數據、動態界面時依然能夠保持高效響應。通過改進算法、優化內存管理等手段,讓 WPF 布局系統在性能上更上一層樓。
????????親愛的朋友,無論前路如何漫長與崎嶇,都請懷揣夢想的火種,因為在生活的廣袤星空中,總有一顆屬于你的璀璨星辰在熠熠生輝,靜候你抵達。
???????? 愿你在這紛繁世間,能時常收獲微小而確定的幸福,如春日微風輕拂面龐,所有的疲憊與煩惱都能被溫柔以待,內心永遠充盈著安寧與慰藉。
????????至此,文章已至尾聲,而您的故事仍在續寫,不知您對文中所敘有何獨特見解?期待您在心中與我對話,開啟思想的新交流。
優質源碼分享
-
【百篇源碼模板】html5各行各業官網模板源碼下載
-
【模板源碼】html實現酷炫美觀的可視化大屏(十種風格示例,附源碼)
-
【VUE系列】VUE3實現個人網站模板源碼
-
【HTML源碼】HTML5小游戲源碼
-
【C#實戰案例】C# Winform貪吃蛇小游戲源碼
???? 💞 關注博主 帶你實現暢游前后端
???? 🏰 大屏可視化 帶你體驗酷炫大屏
???? 💯 神秘個人簡介 帶你體驗不一樣得介紹
???? 🎀 酷炫邀請函 帶你體驗高大上得邀請
???? ① 🉑提供云服務部署(有自己的阿里云);
???? ② 🉑提供前端、后端、應用程序、H5、小程序、公眾號等相關業務;
???? 如🈶合作請聯系我,期待您的聯系。
????注:本文撰寫于CSDN平臺,作者:xcLeigh(所有權歸作者所有) ,https://blog.csdn.net/weixin_43151418,如果相關下載沒有跳轉,請查看這個地址,相關鏈接沒有跳轉,皆是抄襲本文,轉載請備注本文原地址。
???? 親,碼字不易,動動小手,歡迎 點贊 ? 收藏,如 🈶 問題請留言(評論),博主看見后一定及時給您答復,💌💌💌
原文地址:https://blog.csdn.net/weixin_43151418/article/details/145470241(防止抄襲,原文地址不可刪除)