C# WinForms存储数据 — 通过Tim Corey(第15课)理解数据流动在Windows窗体中的应用
在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
这是一个关键时刻,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()这一行使用配置的连接字符串检索数据并将其存储到内存中。
然后他创建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演示的那样。

