2.8 客户资料管理模块设计
视频讲解
2.8.1 客户资料管理模块概述
客户资料管理窗体用来实现客户信息的添加、修改、删除和查找功能。该窗体中使用了公共类OperateAndValidate中的相关方法分别对客户联系电话、传真号码、邮编、E-mail地址格式进行验证,只有在全部验证都通过时,才可以进行客户信息的添加、修改和保存操作。客户资料管理窗体运行结果如图2.24所示。
图2.24 客户资料管理窗体
2.8.2 客户资料管理模块技术分析
当操作人员修改客户资料时,首先单击DataGridView控件中的任意单元格,然后该单元格所在行的相关信息会显示在对应的TextBox控件中,最后修改TextBox控件中相应的信息并保存。那么在整个操作过程中,程序是如何获取选中单元格所在行的相关数据呢?下面将进行详细分析。
(1)当单击DataGridView控件中的任意单元格时会触发该控件的CellClick事件。其语法格式如下:
public event DataGridViewCellEventHandler CellClick;
该事件是一个DataGridViewCellEventHandler类型的委托。其语法格式如下:
public delegate void DataGridViewCellEventHandler(object sender, DataGridViewCellEventArgs e);
sender:一个object类型的对象,它表示事件源。
e:一个DataGridViewCellEventArgs类型的对象,它包含事件数据。
(2)在CellClick事件的处理方法中,通过DataGridView控件自身的索引器可以获取当前行指定单元格。其语法格式如下:
public DataGridViewCell this[int columnIndex, int rowIndex] { get; set; } public DataGridViewCell this[string columnName, int rowIndex] { get; set; }
columnIndex:单元格所在的列索引。
rowIndex:单元格所在的行索引。
columnName:单元格所在的列的名称。
返回值:指定行和列的单元格。
例如,下面的代码可以获取dataGridView1控件的当前行中列索引值为0或列名称为Address的单元格的值。
string strName = dataGridView1[0,dataGridView1.CurrentCell.RowIndex].Value.ToString(); string strAddress = dataGridView1["Address",dataGridView1.CurrentCell.RowIndex].Value.ToString();
通过上面的讲解可知,当单击DataGridView控件中的任意单元格时,会触发CellClick事件,在CellClick事件的处理方法中,通过DataGridView控件自身的索引器可以获取当前行指定单元格的值,最后把获取的值赋给对应TextBox控件即可。
2.8.3 客户资料管理模块实现过程
本模块使用的数据表:tb_ClientInfo
客户资料管理模块的具体实现步骤如下。
(1)新建一个Windows窗体,命名为frmClientManage.cs,用于实现客户资料管理功能,该窗体主要用到的控件、控件属性设置及其用途如表2.12所示。
表2.12 客户资料管理窗体主要用到的控件
(2)声明公共类BaseOperate和OperateAndVaildate的两个全局对象,通过类对象调用类中的功能方法,然后声明3个保护类型的全局变量,分别用于表示SQL语句、数据表名和判断用户单击的是“添加”按钮还是“修改”按钮。实现关键代码如下:
例程24 代码位置:资源包\TM\02\CRM\DataManage\frmClientManage.cs
frmClientManage窗体的Load事件中,通过调用公共类OperateAndValidate中的cboxBind()方法和BaseOperate中的getds()方法分别对ComboBox控件进行数据绑定和生成一个DataSet对象,然后利用生成的DataSet对象对DataGridView控件进行数据绑定。frmClientManage窗体的Load事件关键代码如下:
例程25 代码位置:资源包\TM\02\CRM\DataManage\frmClientManage.cs
单击“添加”按钮,程序调用公共类OperateAndValidate中的autoNum()方法生成一个新的编号,显示在“客户编号”文本框中,然后将“保存”按钮的Enabled属性设置为true,并给全局变量M_int_judge赋值为0。“添加”按钮的Click事件代码如下:
例程26 代码位置:资源包\TM\02\CRM\DataManage\frmClientManage.cs
代码贴士
❶ 调用公共类OperateAndValidate中的autoNum()方法以指定字符串自动生成一个新编号。
“添加”按钮的Click事件中用到了自定义方法ClearText(),该方法为无返回值类型的自定义方法,它主要用来实现清空文本框内容的功能。ClearText()方法实现代码如下:
例程27 代码位置:资源包\TM\02\CRM\DataManage\frmClientManage.cs
单击“修改”按钮,将“保存”按钮的Enabled属性设置为true,并给全局变量M_int_judge赋值为1。“修改”按钮的Click事件代码如下:
例程28 代码位置:资源包\TM\02\CRM\DataManage\frmClientManage.cs
单击“保存”按钮,程序首先根据全局变量M_int_judge的值决定执行添加操作还是修改操作,然后利用公共类OperateAndVaildate的相应方法判断用户输入的信息是否正确,如果全部正确,则执行数据添加或修改操作。“保存”按钮的Click事件代码如下:
例程29 代码位置:资源包\TM\02\CRM\DataManage\frmClientManage.cs
代码贴士
❶ MessageBox.Show()方法用来在Windows应用程序中显示消息对话框。
❷ 调用公共类OperateAndValidate中的方法对文本框中的输入字符串进行验证。
❸ errorProvider组件的Clear()方法用来清除与此组件关联的所有错误。
❹ errorProvider组件的SetError()方法用来设置指定控件的错误描述字符串。
❺ 调用公共类BaseOperate中的getcom()方法执行SQL语句。
DataGridView控件中,选中某客户信息,单击“删除”按钮,可以将该客户的相应记录从数据表中移除。“删除”按钮的Click事件代码如下:
例程30 代码位置:资源包\TM\02\CRM\DataManage\frmClientManage.cs
代码贴士
❶ DialogResult枚举用来指定标识符以指示对话框的返回值。
❷ DataGridView控件的CurrentCell属性用来获取或设置当前处于活动状态的单元格,RowIndex属性用来获取单元格的索引值。
单击“查找”按钮,程序根据用户选择的查询条件和输入的查询关键字,执行客户信息查找操作。“查找”按钮的Click事件代码如下:
例程31 代码位置:资源包\TM\02\CRM\DataManage\frmClientManage.cs
代码贴士
❶ 调用公共类BaseOperate中的getds()方法生成一个DataSet数据集对象。
❷ DataSet.Tables[index].Rows.Count属性用来获取DataSet数据集中包含表的行数目。
单击“联系客户”按钮,以对话框模式显示联系客户窗体,在该窗体中,用户可以实现给客户发送邮件功能。“联系客户”按钮的Click事件代码如下:
例程32 代码位置:资源包\TM\02\CRM\DataManage\frmClientManage.cs