.NET数据库编程求索之路--2.示例系统概览与设计(2)

简介: 2  示例系统概览与设计(2) 2.4  设计界面   我们先创建一个界面原型系统,为后续具体功能的编程实现打下一个基础。启动Visual Studio 2010,单击【文件】→【新建项目】,在“新建项目”对话框中(图2-6),选择“Windows窗体应用程序”,输入项目名称 “HomeShop.WinForm”,位置“D:\”,解决方案名称“HomeShop”,然后单击【确定】。

2  示例系统概览与设计(2)

2.4  设计界面


  我们先创建一个界面原型系统,为后续具体功能的编程实现打下一个基础。启动Visual Studio 2010,单击【文件】→【新建项目】,在“新建项目”对话框中(图2-6),选择“Windows窗体应用程序”,输入项目名称 “HomeShop.WinForm”,位置“D:\”,解决方案名称“HomeShop”,然后单击【确定】。系统在D盘根目录下创建了“HomeShop”文件夹、“HomeShop.WinForm”子文件夹和相关代码文件。

 

 图2-6  新建项目

 

  在Visual Studio 2010“解决方案资源管理器”中,修改项目“HomeShop.WinForm”下的默认窗体文件Form1.csFormMain.cs,并新建窗体文件FormEdit.cs。项目文件结构如下图所示。

 

图2-7  项目文件结构

 2.4.1  设计订单浏览界面
  从工具箱拖拽MenuStrip、Label、TextBox、Button、DataGridView等控件到FormMain窗体,将系统主界面(订单浏览界面)设计成如图2-8所示。

   

图2-8 系统主界面(订单浏览界面)

 

  FormMain窗体及窗体中各控件的属性设置如下表。

表2-4  FormMain窗体及窗体中各控件的属性设置

控件类型

控件名称

属性名称

属性值

Form

FormMain

FormBorderStyle

FixedSingle

MaximizeBox

False

Size

600, 400

StartPosition

CenterScreen

Text

订单管理系统

MenuStrip

menuStrip

 

 

ToolStripMenuItem

menuAdd

Text

新增(&A)

menuUpdate

Text

修改(&U)

menuDelete

Text

删除(&D)

TextBox

txtCustomerName

 

 

Button

btnQuery

Text

查询(&Q)

DataGridView

gridView

AllowUserToAddRows

False

AllowUserToDeleteRows

False

MultiSelect

False

ReadOnly

True

RowHeadersWidth

10

SelectionMode

FullRowSelect

 

在FormMain窗体设计器中,右键gridView控件→单击【编辑列】(图2-9),在“编辑列”对话框中单击【添加】(图2-10),在“添加列”对话框中按照表2-5依次添加列信息。

 

 图2-9  编辑列


 

图2-10  添加列

 

 

表2-5  DataGridView控件的列

列名称

类型

页眉文本

Data属性值

Col_OrderID

DataGridViewTextBoxCoulumn

订单ID

OrderID

Col_CustomerName

DataGridViewTextBoxCoulumn

顾客姓名

CustomerName

Col_CustomerPhoneNo

DataGridViewTextBoxCoulumn

联系电话

CustomerPhoneNo

Col_CustomerAddress

DataGridViewTextBoxCoulumn

送货地址

CustomerAddress

Col_OrderTime

DataGridViewTextBoxCoulumn

下单时间

OrderTime

Col_OrderState

DataGridViewTextBoxCoulumn

订单状态

OrderState

 

添加完毕后关闭“添加列”对话框,然后在“编辑列”对话框中,按照表1-5依次对应设置列属性中DataPropertyName的值(如图2-11)。DataPropertyName属性的值指示DataGridView控件的列要绑定的数据库表(/视图/查询结果)中字段的名称。

图2-11  编辑列之设置DataPropertyName属性

2.4.2  设计订单新增/修改界面

  虽然新增和修改订单的功能是不一样,但界面表现上是一样,所以我们可以复用一个Form窗体控件。从工具箱拖拽GroupBox、Label、TextBox、DateTimePicker、ComboBox、Button、DataGridView等控件到FormEdit窗体,将新增/修改订单界面设计成如图2-12所示。

图2-12 新增/修改订单界面

FormEdit窗体及窗体中各控件的属性设置如下表。

表2-6  FormEdit窗体及窗体中各控件的属性设置

控件类型

控件名称

属性名称

属性值

Form

FormEdit

FormBorderStyle

FixedSingle

MaximizeBox

False

Size

600, 400

StartPosition

CenterParent

Text

新增/修改订单

GroupBox

grpOrderBaseInfo

Text

订单基本信息:

grpOrderProducts

Text

订购商品信息:

Enabled

False

TextBox

OrderID

Enabled

False

CustomerName

 

 

CustomerPhoneNo

 

 

CustomerAddress

 

 

OrderTotal

Enabled

False

ForeColor

DarkRed

Product

 

 

UnitPrice

 

 

Quantity

 

 

DateTimePicker

OrderTime

CustomFormat

yyyy-MM-dd HH:mm

Format

Custom

ComboBox

OrderState

DropDownStyle

DropDownList

Button

btnSaveOrderBaseInfo

Text

保存(&S)

btnProductAdd

Text

新增(&A)

btnProductUpdate

Text

修改(&U)

btnProductDelete

Text

删除(&D)

DataGridView

gridView

AllowUserToAddRows

False

AllowUserToDeleteRows

False

MultiSelect

False

ReadOnly

True

RowHeadersWidth

10

SelectionMode

FullRowSelect

 

在FormEdit窗体设计器中,右键gridView控件→单击【编辑列】,在“编辑列”对话框中单击【添加】,在“添加列”对话框中按照表2-7依次添加列信息。添加完毕后关闭“添加列”对话框,然后在“编辑列”对话框中,按照表2-7依次对应设置列属性中DataPropertyName的值。

表2-7  DataGridView控件的列

列名称

类型

页眉文本

Data属性值

Col_Product

DataGridViewTextBoxCoulumn

商品名称

Product

Col_UnitPrice

DataGridViewTextBoxCoulumn

单价

UnitPrice

Col_Quantity

DataGridViewTextBoxCoulumn

订购数量

Quantity

Col_Subtotal

DataGridViewTextBoxCoulumn

小计

Subtotal

 

2.4.3  测试界面效果

 

为了能完整看到界面的运行效果,可以在FormMain窗体设计器中双击【新增】菜单,为其添加单击事件的代码(代码2-5),创建FormEdit对象,并以模式对话框方式显示FormEdit窗体。

代码2-5 【新增】菜单单击事件

private void menuAdd_Click(object sender, EventArgs e)

{

    FormEdit formEdit = new FormEdit();

    formEdit.ShowDialog(this); //显示为模式对话框

}

然后,按下【F5】键,调试运行系统,即看到运行状态下的系统主界面(图2-13),单击菜单【新增】即可看到运行状态下的新增/修改订单界面(图2-14)。

 

图2-13 系统运行-订单浏览界面

 

图2-14 系统运行-新增/修改订单界面

 

2.5 小结


  本章对示例系统(订单管理系统)功能进行了概览,设计了系统的数据库,并利用SQL脚本方式在SQL Server 2005中创建了数据库。然后,利用Visual Studio 2010设计了系统界面原型。后续章节将在此基础上,由浅入深,逐步探索各种数据库编程实现方式。

 

转载请注明:【 夏春涛 email: xchuntao@163.com  blog: http://www.cnblogs.com/SummerRain

目录
相关文章
|
9天前
|
SQL 关系型数据库 MySQL
MySQL数据库子查询——in多个数据查询的示例
MySQL数据库子查询——in多个数据查询的示例
9 1
|
8天前
|
开发框架 前端开发 .NET
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
集成于VS 2019,EXT.NET前端和ASP.NET后端,搭配MSSQL 2018数据库。系统覆盖样品管理、数据分析、报表和项目管理等实验室全流程。应用广泛,包括生产质检(如石化、制药)、环保监测、试验研究等领域。随着技术发展,现代LIMS还融合了临床、电子实验室笔记本和SaaS等功能,以满足复杂多样的实验室管理需求。
17 3
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
|
1天前
|
前端开发 测试技术 C#
如何开发一套基于C#和.NET 6.0手术麻醉系统? 手术麻醉系统源码
如何开发一套基于C#和.NET 6.0手术麻醉系统?
7 1
|
4天前
|
SQL Java 关系型数据库
Java数据库编程的详细介绍
Java数据库编程的详细介绍
9 1
|
18天前
|
开发框架 .NET API
.NET 体系概览图集 - 2024 最全总结
.NET Core 是一个免费、跨平台、开源的开发平台,用于一站式构建不同类型的应用程序。 .NET Core 是以 .NET Framework 为基础,但是经过重新设计、实现的的新一代框架,实现了原 .NET Framework 中的几乎所有功能,核心特点就是开源、跨平台。
127 0
.NET 体系概览图集 - 2024 最全总结
|
18天前
|
SQL 设计模式 开发框架
.NET异步有多少种实现方式?(异步编程提高系统性能、改善用户体验)
想要知道.NET异步有多少种实现方式,首先我们要知道.NET提供的执行异步操作的三种模式,然后再去了解.NET异步实现的四种方式。
|
19天前
|
XML API 图形学
.Net 简单示例 "文字动图显示" Typing to SVG “
该文描述了一个.NET API的实现过程,该API能将输入的文字转换成SVG动态图。首先,作者展示了示例网站(<https://readme-typing-svg.demolab.com/>)的功能,它能将文字转化为可自定义样式的SVG动画。接着分析了示例URL的响应,发现其内容类型为`image/svg+xml`,主要由SVG、path、animate和text元素组成。通过创建一个.NET Core Web API项目,作者设置了响应内容类型为`image/svg+xml`,并将示例URL的SVG内容直接输出,成功实现了相同效果。
|
28天前
|
安全 API C#
C#.Net筑基-类型系统②常见类型--枚举Enum
枚举(enum)是C#中的一种值类型,用于创建一组命名的整数常量。它们基于整数类型(如int、byte等),默认为int。枚举成员可指定值,未指定则从0开始自动递增。默认值为0。枚举可以与整数类型互相转换,并可通过`[Flags]`特性表示位域,支持位操作,用于多选场景。`System.Enum`类提供了如`HasFlag`、`GetName`等方法进行枚举操作。
|
28天前
|
编译器 C#
C#.Net筑基-类型系统②常见类型 --record是什么类型?
`record`在C#中是一种创建简单、只读数据结构的方式,常用于轻量级数据传输。它本质上是类(默认)或结构体的快捷形式,包含自动生成的属性、`Equals`、`ToString`、解构赋值等方法。记录类型可以继承其他record或接口,但不继承普通类。支持使用`with`语句创建副本。例如,`public record User(string Name, int Age)`会被编译为包含属性、相等比较和`ToString()`等方法的类。记录类型提供了解构赋值和自定义实现,如密封的`sealed`记录,防止子类重写。
|
28天前
|
存储 C#
C#.Net筑基-类型系统②常见类型--结构体类型Struct
本文介绍了C#中的结构体(struct)是一种用户自定义的值类型,适用于定义简单数据结构。结构体可以有构造函数,能定义字段、属性和方法,但不能有终结器或继承其他类。它们在栈上分配,参数传递为值传递,但在类成员或包含引用类型字段时例外。文章还提到了`readonly struct`和`ref struct`,前者要求所有字段为只读,后者强制结构体存储在栈上,适用于高性能场景,如Span和ReadOnlySpan。