C#源代码:将数据库数据绑定到ListView控件

打印 上一主题 下一主题

主题 2084|帖子 2084|积分 6252

本文还有配套的佳构资源,点击获取  

  简介:本项目提供了C#源代码,用于在.NET Framework的Windows Forms应用步伐中利用ListView控件展示数据库信息。通过实现数据绑定和视图设置,开辟者能够将数据库中的数据以布局化列心情势出现给用户。本文先容了连接数据库、执行SQL查询、利用数据适配器和数据集、设置ListView列以及数据绑定的完备步调,并提供了一个Visual Studio解决方案文件和可能的项目文件夹备份。同时,文章也提示开辟者注意性能优化和用户体验加强的计谋。
1. ListView控件基础布局及应用场景

1.1 ListView控件简介

  ListView控件是.NET框架中用于展示列表数据的标准组件之一。它可以以列表、详细信息或图标的情势显示数据项。每个列表项可以包含子项,同时还可以自定义显示样式,如图标、颜色、字体等。这种灵活性使得ListView成为构建复杂用户界面的理想选择。
1.2 ListView控件的布局

  ListView的基本布局可以分为以下几个部分:


  • 列头(Column Header):定义了ListView中每一列的名称和宽度。
  • 列项(ListViewItem):每个项代表一行数据,可以在每个项下添加子项(SubItems)。
  • 视图模式:ListView有几种差别的视图模式,好比大图标、小图标、列表和详细信息等。
  • 事件:如点击、双击、选择变化等,用户操纵ListView时会触发。
  1. // 示例代码展示如何创建一个简单的ListView及其子项
  2. ListView listView1 = new ListView();
  3. listView1.View = View.Details;
  4. listView1.FullRowSelect = true;
  5. listView1.Dock = DockStyle.Fill;
  6. // 创建列头
  7. listView1.Columns.Add("Name", 100);
  8. listView1.Columns.Add("Description", 200);
  9. // 添加列项
  10. ListViewItem item1 = new ListViewItem("Item1");
  11. item1.SubItems.Add("Description of Item1");
  12. listView1.Items.Add(item1);
  13. // 添加到窗体中
  14. this.Controls.Add(listView1);
复制代码
1.3 ListView的应用场景

  ListView控件在应用步伐中有广泛的应用场景。它常用于:


  • 展示文件列表或目录布局。
  • 显示数据库查询结果。
  • 展示各种设置选项。
  • 实现复杂的陈诉展示。
  合理利用ListView的特性可以极大进步用户界面的信息展示本领和交互性。在后续章节中,我们将深入探究ListView的详细应用,包罗如何优化数据展示和用户体验。
2. 数据库连接的实现与优化

2.1 数据库连接基础

2.1.1 ADO.NET概述

  ADO.NET是.NET平台的一个核心组件,用于数据访问。它基于数据提供者模型,允许开辟者和数据库进行交互。开辟者可以利用ADO.NET进行数据库查询、更新、存储过程执行、事件处理惩罚等操纵。ADO.NET通过所谓的.NET数据提供者与数据库进行通讯,每个提供者通常包含一套连接对象、命令对象、数据读取器对象和数据适配器对象等。常见的.NET数据提供者有:


  •   System.Data.SqlClient  :用于访问Microsoft SQL Server数据库。
  •   System.Data.OleDb  :用于访问OLE DB数据源。
  •   System.Data.Odbc  :用于访问ODBC数据源。
  •   System.Data.Common  :是其他数据提供者类的抽象,提供了访问数据库的通用方式。
2.1.2 常见数据库连接方式

  数据库连接是利用ADO.NET进行数据操纵的第一步,典范的连接字符串的格式如下:
  1. Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=Password;
复制代码
下面是一个利用  SqlConnection  打开数据库连接的示例代码:
  1. using System.Data.SqlClient;
  2. // 定义连接字符串
  3. string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=AdventureWorks2019;Integrated Security=True";
  4. // 创建连接对象
  5. using (SqlConnection connection = new SqlConnection(connectionString))
  6. {
  7.     try
  8.     {
  9.         // 打开连接
  10.         connection.Open();
  11.         // 进行数据库操作...
  12.         // 关闭连接
  13.         connection.Close();
  14.     }
  15.     catch (SqlException ex)
  16.     {
  17.         // 处理异常
  18.         Console.WriteLine("连接出错: " + ex.Message);
  19.     }
  20. }
复制代码
在这段代码中,起首引入了必要的命名空间  System.Data.SqlClient  ,然后定义了连接字符串。利用  using  语句确保  SqlConnection  对象在利用完毕后能够正确释放资源。利用  try-catch  布局捕获可能发生的非常,并打印错误信息。这是在.NET应用步伐中创建和利用数据库连接的一种常见模式。
2.2 数据库连接的高级技术

2.2.1 连接池技术的原理与应用

  连接池是一种广泛应用于数据库连接受理的技术,它通过重用连接对象淘汰建立新连接时的开销。连接池可以明显进步数据库连接的性能和服从,因为它克制了频仍的连接和断开操纵。
  在ADO.NET中,每个  SqlConnection  对象在创建时都会尝试从连接池中获取一个可用连接。假如连接池中没有可用连接,则会创建一个新的数据库连接。当连接关闭时,并不是真正断开与数据库的连接,而是将连接对象返回到连接池中等候下次利用。假如在连接池中没有找到匹配的连接,将创建一个新的连接。
  下面是利用连接池的一个示例:
  1. using System.Data.SqlClient;
  2. // 定义连接字符串
  3. string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=AdventureWorks2019;Integrated Security=True";
  4. using (SqlConnection connection = new SqlConnection(connectionString))
  5. {
  6.     connection.Open(); // 打开连接,这里可能会使用连接池中的连接
  7.     // 执行数据库操作...
  8.     connection.Close(); // 关闭连接时,连接不是真正的关闭,而是返回连接池
  9. }
复制代码
2.2.2 非常处理惩罚与性能监控

  在数据库操纵过程中,正确处理惩罚非常是非常重要的。这不仅可以加强步伐的健壮性,还可以帮助开辟职员在出现题目时快速定位题目的根源。在.NET中,可以通过  try-catch-finally  语句块来处理惩罚非常。
  性能监控是优化数据库操纵的重要环节。可以监控数据库连接的打开和关闭次数、执行时间、执行的SQL语句等,以便对性能瓶颈进行诊断。在.NET中,可以通过性能计数器、日记记录和跟踪工具来实现性能监控。
  下面展示的是一个非常处理惩罚的示例:
  1. using System.Data.SqlClient;
  2. // 定义连接字符串
  3. string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=AdventureWorks2019;Integrated Security=True";
  4. using (SqlConnection connection = new SqlConnection(connectionString))
  5. {
  6.     try
  7.     {
  8.         connection.Open();
  9.         // 执行数据库操作...
  10.     }
  11.     catch (SqlException ex)
  12.     {
  13.         // 记录错误日志
  14.         Console.WriteLine("数据库错误: " + ex.Message);
  15.         // 可以选择记录更多的错误信息,比如异常堆栈
  16.         // 可以记录日志到文件或者数据库中...
  17.     }
  18.     finally
  19.     {
  20.         // 最终释放资源,即使发生异常也会执行
  21.         if (connection.State != ConnectionState.Closed)
  22.         {
  23.             connection.Close();
  24.         }
  25.     }
  26. }
复制代码
在本节中,我们相识了数据库连接的基础知识和高级技术。接下来的章节我们将讨论SQL查询的执行和优化,这是进一步提升应用步伐性能的关键步调。
3. SQL查询的执行与优化

3.1 SQL语句基础与执行

3.1.1 SQL语句布局与编写技巧

  在构建数据库查询时,SQL(Structured Query Language)是编写查询语句的必备技能。一个基础的SQL语句通常包含以下几个部分:


  • SELECT:指定要检索的列。
  • FROM:指定要从哪个表或哪些表中检索数据。
  • WHERE:基于特定条件过滤结果集。
  • GROUP BY:对结果集进行分组。
  • HAVING:对GROUP BY的结果进行条件过滤。
  • ORDER BY:对查询结果进行排序。
  编写高效SQL语句的技巧包罗:


  • 只选择必要的列,克制利用SELECT *。
  • 利用合适的JOIN操纵来代替子查询,以进步服从。
  • 在WHERE子句中只管利用索引列。
  • 克制在WHERE子句中利用OR,特别是在索引列上。
  • 对于大数据量的表,在进行关联查询时,只管确保连接条件上的字段已经建立了索引。
3.1.2 SQL查询执行流程

  在SQL Server等关系型数据库中,SQL查询执行流程大要如下:

  • 剖析:SQL语句被剖析为语法树。
  • 验证:数据库查抄查询语法是否正确,且用户是否有执行查询的权限。
  • 编译:查询被转换成一个查询计划,优化器选择最有效的路径执行查询。
  • 执行:查询计划被实际执行,数据被检索和处理惩罚。
  • 返回:结果返回给客户端。
  这个过程涉及了查询优化器的决策,它会根据统计信息和索引计谋选择最优的查询路径。
3.2 SQL语句的优化计谋

3.2.1 索引的作用与优化方法

  索引是数据库优化中的一项关键技术,它能够大大进步查询的性能。索引雷同于书籍的目录,允许数据库管理系统快速定位到特定的数据,而无需扫描整个表。
  索引优化的方法包罗:


  • 选择合适的列创建索引。通常是WHERE子句、JOIN条件、ORDER BY子句中涉及的列。
  • 利用复合索引,即在一个索引中包含多个列。
  • 定期维护索引,好比重建或重新组织索引。
  • 在插入、更新和删除操纵较多的表上利用较少的索引,以淘汰维护成本。
3.2.2 查询优化实例分析

  假设我们有一个电子商务数据库,内里有一个名为  Orders  的表,我们想要找出全部2023年1月1日之后的订单。
  1. SELECT * FROM Orders WHERE OrderDate > '2023-01-01';
复制代码
要优化这个查询:


  • 起首确保  OrderDate  列上有索引。
  • 假如  OrderDate  是高基数列(即列中包含很多差别的值),而且查询操纵频仍,那么在  OrderDate  上建立索引会明显进步查询性能。
  • 假如查询运行仍然缓慢,查抄执行计划,看是否有其他潜在的瓶颈。
  进一步的优化可能包罗:


  • 对于时间范围查询,可以创建一个包含日期和时间的复合索引,以淘汰查询计划中的隐式转换。
  • 假如查询不必要返回全部列,只选择必要的列以淘汰数据的读取量。
  优化是一个持续的过程,必要不断地监控和调整。通过利用数据库提供的工具,如SQL Server的Query Analyzer或MySQL的EXPLAIN命令,可以分析查询执行计划,从而找到优化的机会。
4. 数据适配器与DataTable的绑定技术

4.1 数据适配器的作用与应用

4.1.1 数据适配器类型选择与利用

  数据适配器是连接数据源和.NET数据集之间的桥梁。它将数据源的数据转换为数据集可以明白和操纵的格式,同时也能将数据集的更改同步回数据源。在.NET中,常见的数据适配器类型有  OleDbDataAdapter  、  SqlDataAdapter  、  OracleDataAdapter  等,根据数据源类型选择合适的适配器。
  在实际应用中,起首必要根据利用的数据库系统来确定利用哪种数据适配器。比方,假如利用的是SQL Server数据库,我们通常利用  SqlDataAdapter  ;而假如是通用数据库,则可能利用  OleDbDataAdapter  。以下是利用  SqlDataAdapter  的一个简单示例:
  1. using System.Data;
  2. using System.Data.SqlClient;
  3. // 创建数据库连接字符串
  4. string connectionString = "Data Source=serverName;Initial Catalog=databaseName;User ID=username;Password=password";
  5. // 创建SqlConnection对象
  6. SqlConnection conn = new SqlConnection(connectionString);
  7. // 创建SqlDataAdapter对象
  8. SqlDataAdapter adapter = new SqlDataAdapter();
  9. // 设置DataAdapter使用的SELECT命令
  10. adapter.SelectCommand = new SqlCommand("SELECT * FROM tableName", conn);
  11. // 使用DataAdapter填充数据集
  12. DataSet dataSet = new DataSet();
  13. adapter.Fill(dataSet);
  14. // 关闭数据库连接
  15. conn.Close();
复制代码
在此代码段中,我们起首设置了数据库连接字符串,然后创建了  SqlConnection  对象和  SqlDataAdapter  对象。通过设置  SqlDataAdapter  对象的  SelectCommand  属性,我们指定了要执行的SQL查询语句,并通过  Fill  方法将查询结果填充到  DataSet  对象中。
4.1.2 适配器与数据库交互细节

  适配器与数据库交互时,其重要操纵包罗从数据库中检索数据和更新数据库。这一过程通常涉及  SELECT  、  INSERT  、  UPDATE  和  DELETE  语句的执行。
  以  SqlDataAdapter  为例,当调用  Fill  方法时,它会执行  SelectCommand  属性所定义的查询,并将结果集存储在  DataSet  或  DataTable  中。当调用  Update  方法时,它会根据  DataSet  或  DataTable  中的更改来执行相应的SQL语句,以同步这些更改回数据库。
  1. // 更新数据集中的更改到数据库
  2. adapter.Update(dataSet);
复制代码
这一操纵会基于数据会合的差别类型的更改(新增、修改或删除)自动选择相应的SQL命令(  INSERT  、  UPDATE  或  DELETE  )并执行。重要的是要确保适配器的  InsertCommand  、  UpdateCommand  和  DeleteCommand  属性被正确地设置,以便能够根据数据会合的更改生成正确的SQL命令。
4.2 DataTable的数据绑定与操纵

4.2.1 DataTable布局与绑定方法

   DataTable  是.NET中用于表现内存中的表的数据布局。它包含一个列的聚集和一个行的聚集,能够表现任何布局化数据集。它广泛应用于数据绑定,如与Windows Forms的  DataGridView  控件或Web Forms的  GridView  控件的绑定。
  要将  DataTable  绑定到界面上,起首必要创建  DataTable  对象,并添加相应的列(  DataColumn  )和行(  DataRow  ):
  1. // 创建一个DataTable对象
  2. DataTable dataTable = new DataTable();
  3. // 添加列定义
  4. dataTable.Columns.Add("ID", typeof(int));
  5. dataTable.Columns.Add("Name", typeof(string));
  6. // 添加数据行
  7. dataTable.Rows.Add(1, "John Doe");
  8. dataTable.Rows.Add(2, "Jane Smith");
复制代码
在此代码段中,我们创建了一个  DataTable  对象,并定义了两个列:  ID  和  Name  。然后,我们向  DataTable  添加了两行数据。
  数据绑定到UI控件时,通常会用到数据绑定表达式或编程方式直接绑定。在Windows Forms中,数据绑定通常通过属性设置完成;而在Web Forms中,通常通过数据绑定语法实现。
  1. // 在Windows Forms中绑定DataTable到DataGridView
  2. dataGridView.DataSource = dataTable;
复制代码
4.2.2 DataTable数据处理惩罚技巧

  处理惩罚  DataTable  数据时,可以利用  DataRow  的  BeginEdit  和  EndEdit  方法来进行单元格级别的编辑。此外,可以利用  DataTable  的  Constraints  来定义数据完备性束缚,如主键束缚和外键束缚等。
  当必要对  DataTable  中的数据进行排序或筛选时,可以利用  DefaultView  属性:
  1. // 对DataTable进行排序
  2. dataTable.DefaultView.Sort = "ID ASC";
  3. // 将排序后的视图绑定到界面上
  4. dataGridView.DataSource = dataTable.DefaultView;
复制代码
在数据量较大时,处理惩罚数据的性能可能会成为瓶颈。此时,可以利用  DataTable  的  Select  方法来对数据进行筛选,以淘汰内存中数据的数目:
  1. // 筛选出ID大于5的所有行
  2. DataRow[] foundRows = dataTable.Select("ID > 5");
  3. // 处理筛选后的行
  4. foreach (DataRow row in foundRows)
  5. {
  6.     // 操作每行数据
  7. }
复制代码
以上展示了  DataTable  布局的创建、绑定以及数据处理惩罚的基础技巧。合理地利用这些技巧能有效地管理和操纵大量数据,进步应用步伐的响应速率和用户体验。
  在本章中,我们详细探究了数据适配器的类型选择与利用,以及如何将  DataTable  与用户界面控件进行有效的绑定和操纵。在下一章中,我们将关注如何设置  ListView  列以及如何优化数据的视觉展示效果,以进一步提升数据的可读性和用户的交互体验。
5. ListView列的设置与数据展示

  在上一章节中,我们探究了数据库连接技术及其实现方法,为高效的数据操纵打下了基础。在本章节中,我们将聚焦于如何利用  ListView  控件展示数据,而且提升数据展示的用户体验。
5.1 ListView列的设置方法

   ListView  控件作为.NET框架中展示列表信息的重要组件之一,其设置列的显示方式是实现精良用户体验的基础。以下将深入探究如何创建和设置列头,以及如何绑定数据与定制样式。
5.1.1 列头的创建与设置

   ListView  控件可以通过  Columns  属性来创建列头。每个列头都与一个特定的数据字段关联。列头的创建通常在控件初始化时进行,并可针对差别用途定制其属性,如标题、宽度、排序等。
  1. ListViewItem headerItem = new ListViewItem("产品名称");
  2. headerItem.SubItems.Add("单价");
  3. headerItem.SubItems.Add("库存数量");
  4. listView.Columns.Add(headerItem);
复制代码
上述代码创建了一个  ListView  列头,并添加了三个子项(产品名称、单价、库存数目)。
5.1.2 列数据绑定与样式定制

  数据绑定到  ListView  列是通过  ListViewItem  和  SubItems  聚集来实现的。样式定制则涉及到诸多属性,如字体、颜色、配景等。比方,下面的代码展示了如何绑定数据到  ListView  列,并定制样式:
  1. // 假设有一个Product对象列表
  2. foreach (var product in products)
  3. {
  4.     ListViewItem item = new ListViewItem(product.Name);
  5.     item.SubItems.Add(product.Price.ToString("C"));
  6.     item.SubItems.Add(product.Stock.ToString());
  7.     listView.Items.Add(item);
  8. }
  9. // 样式定制
  10. listView.Font = new Font(listView.Font, FontStyle.Bold);
  11. listView.ForeColor = Color.Black;
  12. listView.ListViewItemSorter = new ListViewComparer(); // 自定义排序
复制代码
此中  ListViewComparer  是实现了  IComparer<ListViewItem>  接口的一个类,用于定义排序逻辑。
5.2 数据展示的视觉优化

  视觉优化是提升用户体验的关键部分,接下来将探究如何加强视觉效果以及依照用户交互计划原则。
5.2.1 视觉效果加强技术

  精良的视觉效果能加强用户的阅读体验。可以通过改变颜色、增加图形元素和利用渐变效果等方式来优化视觉体验。
  1. // 例如,可以使用BackgroundImage属性为ListView添加背景图片
  2. listView.BackgroundImage = Image.FromFile("background.jpg");
  3. // 或者设置渐变色
  4. using (LinearGradientBrush brush = new LinearGradientBrush())
  5. {
  6.     brush.LinearColors = new Color[] { Color.LightGray, Color.White };
  7.     listView.BackColor = Color.White;
  8.     listView婕冲色 = brush;
  9. }
复制代码
5.2.2 用户交互计划原则

  在数据展示中思量用户交互计划原则,能让用户更容易明白和操纵数据。包罗但不限于提供清晰的指示、响应用户操纵以及提供及时反馈。
  1. // 为ListView的ItemActivate事件添加处理程序,以响应双击事件
  2. listView.ItemActivate += listView_ItemActivate;
  3. private void listView_ItemActivate(object sender, EventArgs e)
  4. {
  5.     if (listView.SelectedItems.Count > 0)
  6.     {
  7.         ListViewItem item = listView.SelectedItems[0];
  8.         // 执行用户点击事件后的操作,例如打开商品详情
  9.         OpenProductDetails(item);
  10.     }
  11. }
复制代码
通过代码块示例,可以看出如何绑定事件处理惩罚步伐,并在用户与  ListView  控件交互时作出响应。
  总结以上,本章节中我们详细学习了如何设置和优化  ListView  控件的列展示和数据出现,以及加强视觉效果和用户体验的计谋。通过实例代码的展示,我们展示了如何将理论与实践相联合,在应用步伐中应用这些计谋,从而进步数据的可视化效果和用户交互体验。
6. 事件处理惩罚与用户体验加强

6.1 ListView事件处理惩罚机制

  ListView控件作为用户界面中显示数据列表的重要组件,其事件处理惩罚机制对于提供精良的用户交互体验至关重要。相识并合理运用ListView的事件处理惩罚机制,可以进步应用步伐的响应速率和用户满意度。
6.1.1 常用事件及触发条件

  ListView控件支持多个事件,每个事件对应差别的用户操纵或控件状态改变。以下是一些常用的ListView事件及其触发条件:


  • ItemSelectionChanged :当用户改变所选项目时触发。
  • ItemActivate :当用户双击某个项目时触发。
  • ColumnClick :当用户点击某个列头时触发。
  • DrawItem :当ListView的项必要被绘制时触发。
  • DrawColumnHeader :当列头必要被绘制时触发。
  1. private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
  2. {
  3.     // 示例代码:响应项目选中改变事件
  4.     MessageBox.Show($"项目 {e.Item.Text} 被选中。");
  5. }
复制代码
6.1.2 事件响应与逻辑实现

  在事件响应方法中,我们通常会执行一些特定的逻辑来响应用户操纵。比方,在  ItemSelectionChanged  事件中,我们可以查抄选中项的索引,并根据索引执行相应的操纵。
  1. private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
  2. {
  3.     // 检查选中项的索引
  4.     int selectedIndex = e.ItemIndex;
  5.     if(selectedIndex == 0)
  6.     {
  7.         MessageBox.Show("您选择了第一个项目!");
  8.     }
  9.     else
  10.     {
  11.         MessageBox.Show($"您选择了第 {selectedIndex} 个项目。");
  12.     }
  13. }
复制代码
6.2 用户体验的优化实践

  用户体验是权衡应用步伐乐成与否的关键指标之一。本节将探究如何通过事件处理惩罚机制加强用户体验。
6.2.1 用户操纵响应优化

  为了优化用户的操纵响应,我们必要确保应用步伐能够快速而正确地响应用户的每个动作。比方,在数据列表中搜索功能的实现,可以利用  KeyDown  事件来捕获用户的输入,并及时过滤ListView中的项目。
  1. private void listView1_KeyDown(object sender, KeyEventArgs e)
  2. {
  3.     // 示例代码:响应键盘按键事件,实现搜索功能
  4.     if(e.KeyCode == Keys.Enter)
  5.     {
  6.         string searchTerm = searchTextBox.Text.ToLower();
  7.         foreach(ListViewItem item in listView1.Items)
  8.         {
  9.             if(item.Text.ToLower().Contains(searchTerm))
  10.                 item.Selected = true;
  11.         }
  12.     }
  13. }
复制代码
6.2.2 错误处理惩罚与用户反馈

  应用步伐中错误处理惩罚机制的实现是加强用户体验的重要组成部分。通过提供清晰的错误信息和反馈,可以淘汰用户的挫败感,并引导他们如何解决题目。
  1. private void listView1_ItemActivate(object sender, EventArgs e)
  2. {
  3.     // 示例代码:响应项目双击事件,检查操作是否成功并给出反馈
  4.     try
  5.     {
  6.         // 模拟操作
  7.         bool operationSuccess = false;
  8.         if(operationSuccess)
  9.             MessageBox.Show("操作成功!");
  10.         else
  11.             throw new InvalidOperationException("操作失败,请重试。");
  12.     }
  13.     catch(Exception ex)
  14.     {
  15.         MessageBox.Show($"发生错误: {ex.Message}");
  16.     }
  17. }
复制代码
通过上述实践,开辟者可以利用ListView控件的事件处理惩罚机制,在应用步伐中构建更加响应快速和用户友好的交互体验。每个章节都展示了如何通过代码实现详细的事件响应,并通过示例代码加深了理论的明白。
   本文还有配套的佳构资源,点击获取  

  简介:本项目提供了C#源代码,用于在.NET Framework的Windows Forms应用步伐中利用ListView控件展示数据库信息。通过实现数据绑定和视图设置,开辟者能够将数据库中的数据以布局化列心情势出现给用户。本文先容了连接数据库、执行SQL查询、利用数据适配器和数据集、设置ListView列以及数据绑定的完备步调,并提供了一个Visual Studio解决方案文件和可能的项目文件夹备份。同时,文章也提示开辟者注意性能优化和用户体验加强的计谋。
   本文还有配套的佳构资源,点击获取  



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

宝塔山

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表