求助!帮忙做个个人通讯录
2.建立Contact项目(1)新建名为Contact的Windows Application应用程序
(2)在Visual Studio的编辑界面中选中MainForm,设置其Name属性为MainForm,其Text属性为“个人通讯录”。
(3)向MainForm窗体添加Listview控件,Label控件、TextBox和Button控件,按照图所示控件位置。
控件类型 Name属性 Text属性 Enable属性
Label lblName 姓名: True
Label lblPhone 电话: True
Label lblAddress 地址: True
TextBox txtName False
TextBox txtPhone False
TextBox txtAddress False
Button btnOK 确定 False
Button btnRE 取消 False
Button btnAdd 添加联系人信息 True
Button btnEdit 修改选中联系人信息 True
Button btnDel 删除选中联系人信息 True
Button btnAbout 关于本软件 True
设置txtAddress控件的Multiline属性为True、设置ListView控件的Name属性为listView,FullRowSelect属性为True,Gridlines属性为True,View属性为Details。
为ListView添加四列,Name属性为fContactID、fName、fPhone和fAddress,对应列的Text属性分别为编号、姓名、电话、联系地址。如图所示:
3.显示联系人信息
(1) 注意:需要导入System.Data.SqlClient命名空间
(2)该段程序作用是读取数据库中联系人信息
方法:显示联系人信息这部分程序步骤首先应先连接数据库,再读取数据库中的信息。由于读取数据库中的信息这部分程序在后面的模块中还会使用到,因此可以采用自定义方法。如:
private void getInfo() //这时自定义了一个方法。
该方法中主要程序段:
this.listView.Items.Clear();
while (reader.Read())
{
string[] subItems = new string[]{
reader.GetInt32(0).ToString(),
reader.GetString(1),
reader.GetString(2),
reader.GetString(3)
};
this.listView.Items.Add(new ListViewItem(subItems));
}
reader.Close();
我们希望运行这个人通讯录应用程序时,就会立即显示所拥有的通讯录信息,因此可以在主窗体加载时就调用该方法,如:
private void MainForm_Load(object sender, EventArgs e) //当主窗体加载时
{
this.getInfo(); //调用该方法
}
建议该程序段中加入
Try
{
}
Catch(Exception ex)
{
} 语句段,遇到错误会弹出错误提示。
该部分程序段编写完成后测试效果,读取出数据库中的信息。
如图:该部分效果
4.添加和修改联系人信息
在本项目中添加联系人和修改联系人信息的最终操作都是通过单击“确定”按钮实现,所有的信息也都来源于相同的TextBox控件,只是具体处理时的代码不相同而已。
(1)添加联系人信息
该功能的实现逻辑比较简单,当单击“添加联系人信息”按钮时,首先使对应的文本框和按钮的Enable属性为true,同时将“修改选中联系人信息”和“删除选中联系人信息”按钮禁用。对这些控件的启用和禁用主要由自定义方法enableInfo和disableInfo实现的,另外每次添加信息时首先需要调用clearInfo方法来清空文本框中的内容。
需要注意的是isAdd字段,该字段是用于标识当前操作是添加联系人还是修改联系人。当单击“添加联系人信息”按钮时,isAdd被设置为true。
如:this.isAdd=true。
当用户在文本框输入了要添加的联系人信息以后,单击“确定”按钮时,如果当前isAdd为true则表示应该执行添加联系人信息的功能,即执行如下代码:
//在执行下面的操作之前可以对用户提交的信息进行合法验证
//不合法的数据应该拒绝操作
if (this.isAdd)
{
try
{
addInfo(this.txtName.Text, this.txtPhone.Text, this.txtAddress.Text);
MessageBox.Show("成功添加联系人");
this.getInfo();
this.disableInfo();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
显然,在添加联系人之前应该对联系人的信息进行合法性验证,只有合法的信息才会被提交到数据库中。在向数据库添加信息时由addInfo方法来实现,该方法接收3个参数,依次为联系人姓名、电话和地址。在该方法中,首先将传递过来的参数拼接成SQL语句:
string sql = "insert into friend(Fname,Fphone,Faddress) values ('"; sql += _name + "','" + _phone + "','" + _address + "')";
接着建立数据连接和数据命令:
SqlConnection ….
SqlCommand ….
余下则应该打开数据连接,执行数据命令,执行结束后关闭数据连接。
注意:每次添加了新的联系人信息后必须重新为listView加载数据,以保证其中显示的信息和数据库中的信息同步。实现该功能其实很简单,只需要在“确定”按钮的单击处理程序中调用getInfo方法即可(该方法第一部分已用过)。
(2)修改联系人信息
为了修改需要指定的联系人信息,首先需要选中需要修改信息的联系人,如果用户没有选定联系人而直接单击“修改选中联系人信息”按钮,则弹出对话框,提示用户首先选定要修改的联系人。
可通过this.listView.SelectedItems.Count = = 0 代码判断是否选定了要修改的联系人
其中this.listView.SelectedItems.Count标识了listView中被选定的记录的数目。当用户选定了需要修改的联系人时,则需要执行的操作是获取被选定的记录,将其信息显示在对应的文本框中,并使文本框和按钮启用:
ListViewItem lvi = this.listView.SelectedItems[this.listView.SelectedItems.Count - 1];
this.txtName.Text = lvi.SubItems[1].Text;
this.txtPhone.Text = lvi.SubItems[2].Text;
this.txtAddress.Text = lvi.SubItems[3].Text;
Fid = Convert.ToInt32(lvi.SubItems[0].Text);
this.isAdd = false;
需要注意的是同时要给Fid赋值,以便标识要修改联系人的编号,另外要将isAdd设置为false,这样,当用户修改了信息以后单击“确定”按钮时则执行修改操作。
else
{
try
{
changeInfo(Fid, this.txtName.Text, this.txtPhone.Text, this.txtAddress.Text);
MessageBox.Show("成功修改联系人信息");
this.getInfo();
this.disableInfo();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
具体执行修改数据库中信息操作的是changeInfo方法,该方法接收4个参数,依次为联系人信息记录编号、联系人姓名、电话和地址。该方法执行时首先依据参数拼接SQL语句:
string sql = "update friend set Fname='" + _name + "',Fphone='" + _phone + "',Faddress='" + _address + "'";
sql += "where Fid=" + _id;
然后建立数据连接和数据命令对象,打开数据连接,执行更新操作后关闭数据连接。
SqlConnection ….
SqlCommand ….
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
程序中需要调用的方法:
(1)
private void enableInfo() //使相关控件启用
{
this.clearInfo();
this.txtAddress.Enabled = true;
this.txtName.Enabled = true;
this.txtPhone.Enabled = true;
this.btnOK.Enabled = true;
this.btnRE.Enabled = true;
this.txtName.Focus();
}
(2)
private void clearInfo() //文本框清空
{
……..
}
(3)
public void addInfo(string _name, string _phone, string _address) //添加新联系人
{
string sql = "insert into friend(Fname,Fphone,Faddress) values ('"; sql += _name + "','" + _phone + "','" + _address + "')";
SqlConnection conn=new SqlConnection(connStr);
SqlCommand cmd=new SqlCommand(sql,conn);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
(4)
public void changeInfo(int _id, string _name, string _phone, string _address) //修改联系人信息
{
string sql = "update friend set Fname='" + _name + "',Fphone='" + _phone + "',Faddress='" + _address + "'";
sql += "where Fid=" + _id;
SqlConnection conn = new SqlConnection(connStr);
SqlCommand cmd = new SqlCommand(sql, conn);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
(5)
private void disableInfo() //修改相关控件状态
{
this.clearInfo();
this.txtAddress.Enabled = false;
this.txtName.Enabled = false;
this.txtPhone.Enabled = false;
this.btnOK.Enabled = false;
this.btnRE.Enabled = false;
this.btnAdd.Enabled = true;
this.btnDel.Enabled = true;
this.btnEdit.Enabled = true;
}
5.删除联系人
当用户选中了需要删除的联系人后单击“删除选中联系人信息”按钮即可。
要删除联系人的信息,首先需要知道联系人的ID,因此当用户选中联系人后由getSelectID方法来获取对应联系人的ID,ID从哪里来的?事实上listView中的每一记录都保存了对应的联系人信息,只需要首先获取被选定的联系人记录,然后从中读取ID即可:
ListViewItem temp = this.listView.SelectedItems[this.listView.SelectedItems.Count - 1];
result = Convert.ToInt32(temp.SubItems[0].Text);
由于temp.SubItems[0].Text属性中保存的是string类型的联系人ID,因此需要使用Convert.ToInt32()方法将其转化为int类型。如果用户并没有选中任何记录,则该方法返回0:
if (this.listView.SelectedItems.Count == 0)
{
result = 0;
}
获取选定联系人的ID以后,在btnDel_Click事件处理程序中,应该依据该ID拼接访问数据库的SQL语句:
int infoID = this.getSelectID();
infoID = = 0表示未选中,应给出提示。
string sql = "delete friend where Fid=" + infoID; //依据该ID拼接访问数据库的SQL语句
接下来仍然是建立数据连接和数据命令,执行命令并关闭连接,至此,删除功能完成。
getSelectID方法:
private int getSelectID() //取得选中联系人的ID
{
int result;
if (this.listView.SelectedItems.Count == 0)
{
result = 0;
}
else
{
ListViewItem temp = this.listView.SelectedItems[this.listView.SelectedItems.Count - 1];
result = Convert.ToInt32(temp.SubItems[0].Text);
}
return result;
}
最后在关于本软件中通过弹出框写明制作人姓名