跳至页脚内容
Iron Academy Logo
C# 应用程序
C# 应用程序

其他类别

C#应用程序开发:深度剖析Tim Corey的“创建团队表单第2部分”(第13课)

Tim Corey
46m 06s

在本文中,我们将通过跟随Tim Corey的"C#应用程序从头到尾"系列的第13课,来更深入地了解C#应用程序开发。 Tim带领我们完成构建一个功能性的Windows表单应用程序的过程,重点是如何连接UI控件,如组合框、列表框和按钮到数据。 本课演示了关键概念,如数据绑定、列表管理、使用Dapper的数据库连接,以及基本验证和调试——所有这些都是构建真实世界C#应用程序的必要技能。

继续创建团队表单

Tim首先提醒我们第13课是前一视频的延续,其中"添加新成员"部分已接上线。在这一课中,Tim解释说,主要目标是在下拉框(组合框)和列表框之间接上线,然后连接新创建的人物对象,以便它出现在列表中。Tim明确设定了计划:本课将重点关注UI接线、数据移动和列表同步——构建C#桌面应用程序的基本方面。

了解下拉和列表框数据

Tim解释说,在组合框和列表框的背后,将有一个Person对象的列表。 这是Windows表单中数据绑定的经典示例,其中UI元素绑定到数据模型的集合。

他在类级别创建了两个私有列表:

  • availableTeamMembers——那些可以被添加到团队中的人员

  • selectedTeamMembers——已经被添加到团队中的人员

Tim澄清了预期的行为:当一个人在下拉框中被选择并添加时,他们应该从availableTeamMembers移到selectedTeamMembers。 这是桌面应用程序开发中的标准CRUD操作模式,其中UI反映基础数据。

为什么Tim不按比赛限制团队成员

Tim解决了一个常见的设计问题:"为什么不根据比赛限制团队成员?"他解释说,Create Team表单没有直接绑定到比赛,多场比赛可能同时进行。

Tim举了一个实际例子:如果篮球比赛和乒乓比赛都在进行,一个人可以参加这两项。 限制下拉框将需要复杂的逻辑,并可能引入错误。 相反,Tim选择了一个更简单的方法:

  • 只有在被添加到团队后删除一个人出现在下拉框中。

这种方法展示了一个实际的软件设计决策:除非必要,否则避免过度复杂化。

创建WireUpLists方法

Tim创建了一个名为WireUpLists的方法,以将列表连接到UI控件。 此方法将availableTeamMembers列表绑定到组合框,将selectedTeamMembers列表绑定到列表框。

Tim指出了一个重要的改进:在现代Windows表单中,您可以直接将列表绑定到控件,而无需使用单独的BindingSource。 这是为开发Windows表单数据绑定的开发人员提供的一个有用的提示。

添加DisplayMember和全名

Tim解释组合框必须显示可读名称。 DisplayMember属性需要从Person模型中获取字符串属性。 Tim警告说仅使用FirstName或LastName可能会导致重复。

因此Tim创建了一个名为FullName的只读属性:

public string FullName
{
    get
    {
        return "{FirstName} {LastName}";
    }
}

这展示了一项重要的UI实践:始终确保UI显示用户友好的信息,而不是原始对象数据。

创建测试样本数据

Tim创建了一个名为CreateSampleData的方法,以测试列表和UI。 他将样本Person对象添加到两个列表中,并在构造函数中调用WireUpLists。

这是在连接到真实数据库之前快速构建和测试Windows Forms应用程序的有用技术。

用真实数据替换样本数据

Tim将样本数据注释掉,准备加载真实数据。 他向IDataConnection接口添加了一个方法GetPerson_All。 Tim解释他的命名规则:

  • Create = 插入

  • Get = 选择

这是C#应用程序中数据访问层的标准命名策略。

使用Dapper实现SQL数据检索

Tim使用Dapper和存储过程实现了GetPerson_All的SQL版本:

connection.Query<PersonModel>("spPeople_GetAll").ToList();

Tim有意使用了输出变量而不是直接返回,以方便调试。 这展示了调试实践如何影响代码设计。

使用常量清理重复代码

Tim注意到重复的连接字符串名称,并将它们更改为常量。 他解释说,重复是坏习惯,以后可能会导致错误。

这是一个重要的软件工程原则:DRY(不要重复自己)。

将真实数据加载到下拉菜单

Tim创建了LoadListData(),并使用GetPerson_All()填充availableTeamMembers。 selectedTeamMembers列表保持为空,这是正确的,因为新的团队从空开始。

这展示了如何将UI连接到真实数据源,无论是数据库还是文本文件。

连接添加成员按钮

Tim创建了添加成员按钮的事件处理程序。 逻辑是:

  1. 从下拉菜单获取选定人员

  2. 从可用列表中移除他们

  3. 将他们添加到选定列表

  4. 刷新UI

Tim解释说,选定的项目必须转换为PersonModel,因为组合框将对象存储为object。 这突出了类型转换和C#中的对象处理的重要性。

调试刷新问题

Tim发现移动项目后UI没有刷新。 调试后,他找到了解决方案:

  • 将DataSource设置为null

  • 然后重新分配列表

这迫使组合框和列表框刷新。 Tim强调,调试技能是必需的,通常需要了解数据绑定的行为。

连接删除选定按钮

Tim将按钮重命名为Remove Selected,并创建了事件处理程序。 这反转了添加操作:

  • 从selectedTeamMembers中删除

  • 添加回到availableTeamMembers

  • 刷新UI

Tim发现了一个错误:如果没有选择项目,则会添加一个空值。 他添加了验证:

if (p != null)
{
    // 继续
}

这展示了基本的验证和错误预防。

测试的重要性

Tim强调要像尝试破坏它的用户那样测试您的应用程序。 他建议找一些故意尝试破坏应用程序的测试者,因为真实用户会执行意外操作。

这是构建可靠软件的关键教训。

连接"Create Member"按钮

Tim修改"Create Member"按钮来保存新用户到数据存储,并立即将他们添加到选定列表。这展示了如何在Windows Forms应用程序中实现CRUD操作。

为文本文件实现GetPerson_All

Tim意识到GetPerson_All的文本文件版本缺失。 他使用简单的一行实现了它:

return PeopleFile.FullFilePath.LoadFile().ConvertToPersonModels();

这表明基于文件的存储可以轻松实现,无需复杂逻辑。

确认一切正常

Tim运行应用程序,确认下拉菜单现在从文本文件和数据库加载人员。 他添加新人员,看到他们立即出现,显示整个系统正常工作。

接下来是什么?

Tim总结说,下一个视频将重点于创建团队本身。 这涉及将多条数据保存到数据库或文本文件,完成此功能。

最后的想法

Tim Corey的 第13课 是一个C# Windows Forms应用开发的真实案例。 从连接UI控件和数据绑定到调试和验证,Tim教授了构建真实桌面应用程序的实用编程技能。 本课对于想要学习数据绑定、Dapper、SQL CRUD操作以及C#中的UI驱动编程的开发人员尤其有价值。

如果您想继续学习,Tim的下一课将完成创建团队功能,并将所有内容整合成一个工作应用程序。

Hero Worlddot related to C#应用程序开发:深度剖析Tim Corey的“创建团队表单第2部分”(第13课)
Hero Affiliate related to C#应用程序开发:深度剖析Tim Corey的“创建团队表单第2部分”(第13课)

分享您的所爱,赚取更多收入

您为使用 .NET、C#、Java、Python 或 Node.js 的开发人员创建内容吗?将您的专业知识转化为额外收入!

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我