放假回家了..闲的没事干,趁着家里暖和..自己做了一个小东西.宠物诊所..本来是jsp的东西.叫我给改成.net版本了.
嘿嘿.觉得不错.做起来比jsp简单多了.而且.net的IDE vs2005被评为现在最好的开发平台吗.呵呵.
本来设计的时候全部用DataGridView,数据库连接使用无连接.用户的增删改查全部在DataGridView里面进行,后来
想想觉得不实际.也不专业.应该把用户对数据的编辑和浏览分开比较好,后来我决定用户的编辑采用ListView.无非就是多了
几个窗体.多写几个类和方法.
首先把DataGridView的ReadOnly设置为true(只读).不允许更改.然后把SelectionMode设置为FullRowSelect(选择
一整行).这样DataGirdView的功能就只有看了.只弄一个放在主界面就可以了..当用户点相应的模块的编辑选项就会出现带有
ListView的窗体进行编辑了。ListView需要设置View属性,设置为Details(细节)要不没发正常显示.在把FullRowSelect设为
True.(选择一行).就可以了.下面讲如何进行编辑.
要编辑首先要把数据库的信息放到ListView里面.,最好写几个类似javaBean的属性方法,就是get(),set();比如我拿主人
表当例子,这个表有id,name,city,address,telephone这几个字段.先写一个得到所有主人信息的方法public owners[] getAllOwners();
public owners[] getAllOwners()
{
SqlConnection conn = new SqlConnection(.)//连接数据库
string sql = "select *from owners";
SqlDataAdapter sd = new SqlDataAdapter(sql,con);
conn .Open();
DataTable dt = new DataTable();
sd.Fill(dt);
owners[] ows= new owners[dt.Rows.Count];
for (int i = 0; i < dt.Rows.Count;i++ )
{
ows[i] = new OwnersBll();
ows[i].OwnerID=(int) dt.Rows[i]["id"];
ows[i].OwnerName = dt.Rows[i]["name"].ToString();
ows[i].OwnerAddress =dt.Rows[i]["address"].ToString();
ows[i].OwnerCity = dt.Rows[i]["city"].ToString();
ows[i].OwnwerTelephone = dt.Rows[i]["telephone"].ToString();
}
conn .Close();
return ows;
}
这个方法就可以从界面调用了.具体实现如下.
Code
private void getAllOwners()
{
list_ShowOwners.Clear();//list_ShowOwners就是listView控件了,最好每次先清空下.要不每次添加的时候还是全部添加.就不是一条信息了.
Owners[] ows = 类.getAllOwners();//调用你刚才写那个方法给一个新的属性方法;
list_ShowOwners.Columns.Add("ID",50);
list_ShowOwners.Columns.Add("主人姓名",100);
list_ShowOwners.Columns.Add("城市",100);
list_ShowOwners.Columns.Add("地址",100);
list_ShowOwners.Columns.Add("电话",100);
//以上是在界面Load的时候先设置好标题名和长度.
for(int i =0;i<ows.Length; i++)
{
ListViewItem lvi = list_ShowOwners.Items.Add(ows[i].ownerID.ToString());
lvi.SubItems.Add(ows[i].ownerName.ToString());
lvi.SubItems.Add(ows[i].ownerCity.ToString());
lvi.SubItems.Add(ows[i].ownerAddress.ToString());
lvi.SubItems.Add(ows[i].ownerTelephone.ToString());
}
//ListViewItem表示listView控件中的项.还是循环添加进去就行了.这个方法可以在load()调用.
}
这样就可以保证每次打开这个编辑窗口的时候都是数据库的最新内容了.
下面讲如何进行编辑
编辑还是要写方法.比如拿删除当例子吧.都知道要根据ID删除.那就写个这个public int deleteOwners(int id);
Code
public int deleteOwners(int id)
{
SqlConnection conn = new SqlConnection();//连接数据库
string sql = "delete from owners where id ="+id;
conn.Open();
SqlCommand cmd = new SqlCommand(sql,conn);
cmd.Parameters.Add(new SqlParameter("@id",SqlDbType.Int));
cmd.Parameters["@id"].Value=id;
int count = cmd.ExecuteNonQuery();
conn.Close();
return count;
}
写了这个还不行..所以还要写一个根据ID查询一行信息的方法.因为我是把值查出来放到文本框里的.这样编辑起来方便
Code
public Owners selectOwnersByID(int id)
{
SqlConnection conn = new SqlConnection(..);//连接数据库;
string sql = "select * from owners where id = "+id;
conn.Open();
SqlCommand cmd = new SqlCommand(sql,conn);
SqlDataReader sdr = cmd.ExecuteReader();
Owners ows= new Owners();
if(sdr.Read())
{
ows.OwneriID = Convert.ToInt32(sdr["id"]);
ows.OwnerName = sdr["name"].ToString();
ows.OwnerAddress = sdr["address"].ToString();
ows.OwnerCity = sdr["city"].ToString();
ows.OwnwerTelephone = sdr["telephone"].ToString();
}
conn.Close();
return ows;
}
写完上面那个方法就算基本完成了.只差写ListView的SelectIndexChanged的事件了.具体如下;
Code
private void list_ShowOwners_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.list_show.SelectedItems.Count == 0) return;//这个防止出异常.什么也没选种的情况下return;
int owners_id = Convert.ToInt32(this.list_show.SelectedItems[0].Text);//索引0的就是ID了.
Owners ows = 类.selectOwnersByID(owners_id);//掉用上面写的selectOwnersByID的方法.
getOwnersData(ows );//这个也是为了方便而写的.这个方法需要一个属性方法.作用是给值于文本框的.方法如下:
}
private getOwnersData(Owners ows)
{
this.owner_name.Text = ows.OwnerName;
this.owner_city.Text = ows.OwnerCity;
this.owner_add.Text = ows.OwnerAddress;
this.owner_tele.Text = ows.OwnwerTelephone;
this.showID.Text = Convert.ToString(ows.OwnerID);
}
//上面调用这个方法的时候,当你在listView选中一行数据的就会把相应的值放到文本框里了.
Type text here
Type text here
OK.这样每次进行增删改的时候直接取文本的值就可以了.非常方便.也很美观.DataGirdView其实可以完全取代这些功能,但是在vs2005里listView的分量绝对是比
DataGridView大的.