IRONSOFTWAREHOME

C# WinForms存储数据 — 通过Tim Corey(第15课)理解数据流动在Windows窗体中的应用

C#应用从头到尾第15课——创建锦标赛表单部分1

Tim Corey

34m 39s

在C# WinForms应用程序中存储和管理数据不仅仅是将控件放置在屏幕上的问题。 它是关于数据如何从数据库或文件移动到模型中,然后在Windows窗体中绑定、显示和操作。 在《C#从头到尾》课程的第15课中,Tim Corey通过构建创建锦标赛表单,非常实际地引导开发人员完成此过程。

在这篇文章中,我们深入研究C# WinForms存储数据概念,完全按照Tim在视频中解释的那样。 我们通过他在Visual Studio中的步骤,跟随他如何检索数据、将其绑定到控件、调试问题和验证结果。

介绍创建锦标赛表单及其角色

在0:00,Tim Corey介绍了第15课,并解释了这个Windows窗体是应用程序中的一个重要转折点。 他指出,一旦这个表单完成,应用程序将大部分功能完善。 尽管这个表单看起来很复杂,Tim向开发人员保证,系统已经支持大多数所需功能。

他强调,到目前为止,早期的工作——模型、数据连接、表格和模式——已经建立了坚实的基础。 现在的目标是将数据连接到表单,使其作为一个系统工作,而不是作为孤立的控件。

查看表单和修复早期问题

在1:10,Tim解释他开始任何Windows窗体时,都会首先查看表单的功能,并将其分解为逻辑块。 他立即注意到设计器中的一个小问题:由于复制粘贴错误,两个列表框有相同的标签。

Tim修复了标签文本,然后继续前进,指出小的UI问题应该尽早解决。 此步骤强调整洁设计和清晰度在向用户显示数据时与代码同样重要。

规划数据块和流程

在2:07,Tim概述了如果他不是在录制视频,他通常会如何处理这个表单。 他解释说他会:

  • 填充选择团队下拉菜单

  • 填充选定的团队列表框

  • 连接添加团队操作

  • 处理奖品

  • 稍后处理创建和删除操作

因为这是一个视频课,Tim将几个块分组在一起。 这一步的规划至关重要,因为它定义了在WinForms应用程序中的集合、控件和事件之间数据的流动方式。

创建一个存储团队数据的集合

在3:45,Tim使用F7切换到代码视图,导航到解决方案资源管理器中的表单代码后文件。他解释说,选择团队下拉菜单需要一个TeamModel对象的集合。

他创建了一个名为availableTeams的List<TeamModel>。 此列表充当用于从数据源检索数据的内存存储。 Tim指出,现在它被初始化为一个新列表,但根据配置,它稍后将从数据库或文本文件中填充。

这是一个关键时刻,Tim展示WinForms如何在集合中存储数据,而不是直接在控件中。

定义数据检索合同

在5:01,Tim创建了一个名为GetTeamAll的方法。 他解释这个方法与项目早期使用的模式相匹配,例如GetPersonAll。 他将其添加到IDataConnection接口中,称其为定义数据检索方式的合同。

然后他在SQL和文本连接器中实现了这个方法。 Tim强调一致性,并解释遵循既定模式使系统更易于维护和理解。

处理存储过程和表

在6:32,Tim导航到SQL Server并讨论存储过程。 他查看现有的过程并解释为什么它们不适用于此情况。 由于锦标赛尚未存在,他创建了一个名为spTeam_GetAll的新存储过程。

该过程:

  • 不接受参数

  • 执行简单的select语句

  • 从Teams表中检索所有团队记录

Tim执行该过程并验证返回的数据。 这一步骤确保数据源在绑定到表单之前正常工作。

使用循环填充相关数据

在8:45,Tim解释仅检索球队是不够的。 每个团队还包含一个成员列表,存储在单独的表中。 他展示TeamModel包含一个必须手动填充的TeamMembers集合。

为此,Tim使用foreach循环遍历每个团队。对于每个团队实例,他调用另一个根据团队ID检索人员的存储过程。 此过程构建了一个与相关数据完全填充的模型。

Tim指出,这一步继续确保应用程序拥有完整的数据对象,而不是部分记录。

将存储的数据连接到Windows窗体

在12:25,Tim返回到创建锦标赛表单并用实际的数据调用替换临时列表:

GlobalConfig.Connection.GetTeamAll()
Text

这一行使用配置的连接字符串检索数据并将其存储到内存中。

然后他创建InitializeLists方法,将数据绑定到UI控件,通过设置:

  • 数据源

  • 显示成员

Tim仔细选择TeamName作为显示属性,确保显示给用户的是有意义的文本而不是对象引用。

调试错误并验证数据

在15:17,Tim运行应用程序并遇到与缺少参数相关的错误。 他冷静地阅读信息,解释调试是开发过程的正常部分。

他通过传递所需参数并将命令类型设置为存储过程来解决此问题。 当下拉列表仍然出现为空时,Tim进一步调查。

在22:35,他意识到InitializeLists方法从未被调用。 一旦添加到构造函数中,数据就会正确显示。 Tim利用这个时刻强调审查系统中各部分如何配合的重要性。

在内存中管理选定的团队

在23:54,Tim创建了另一个名为selectedTeams的列表。 此集合存储为锦标赛选择的团队。 他解释这种模式与项目中早期的表单完全相同,强化了重用性和一致性。

他将此列表绑定到另一个列表框,使用相同的显示成员,使显示选定项目变得容易。

连接按钮事件并移动数据

在28:07,Tim在设计器中双击添加团队按钮,生成点击事件。 他从下拉菜单中检索选定的项目,将其转换回TeamModel,并验证其不为null。

然后他从availableTeams中移除该团队,将其添加到selectedTeams中,并重新绑定两个列表。 Tim解释,重置数据源确保UI立即反映出变化。

总结本课的数据存储

在32:13,Tim总结了所完成的工作:

  • 从数据库中检索数据

  • 存储在集合中

  • 绑定到WinForms控件

  • 在列表之间移动

  • 调试和验证

他指出剩余的工作将基于此基础进行。

来自Tim Corey的最后思考

Tim在视频中总结并鼓励开发人员继续练习。 他提醒观众,了解数据在C# WinForms应用程序中如何存储、检索和显示是构建可靠系统的必要条件。

这节课展示了开发人员如何逐步处理实际数据、实际错误和实际工作流,正如Tim Corey演示的那样。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户