IRONSOFTWAREHOME

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

C# App Start To Finish Lesson 13 - Create Team Form Part 2

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}";
    }
}
Text

这展示了一项重要的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();
Text

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)
{
    // 继续
}
Text

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

测试的重要性

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

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

连接"Create Member"按钮

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

为文本文件实现GetPerson_All

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

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

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

确认一切正常

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

接下来是什么?

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

最后的想法

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

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

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 天试用密钥
无需信用卡或创建账户