ListView:
使用ListView控件主要记两个属性columns和View(columns属性主要是显示你所添加的列项,view属性主要针对你添加的列项以不同的视图显示,我们现在所用的view属性都是以details来做显示的)
注意:使用ListView控件读取数据库的信息是需要先创建listviewItems的对象的
关键代码:
...//
...//
while(reader.Read())
{
ListViewItem info = new ListViewItem(reader[0].ToString()); //添加主项(主要以主键或唯一键做主项)info是listviewitems的对象,可自己随便定义
info.SubItems.Add(reader[1].ToString()); //添加的子项
info.SubItems.Add(reader[2].ToString());
info.SubItems.Add(reader[3].ToString());
info.SubItems.Add(reader[4].ToString());
this.ListView.Items.Add(info); //将数据存储在info对象里
}
这里很重要哦!,如果ListView有主键之类但不需要显示的话,则通过对象名.Tag=reader[3]; 括号里的数字为主键在SQL中所在的位置+1(因为索引从0开始的)----上次做试题我就栽在这里啊!!!
例:
string sql = string.Format("select stuID ,stuName ,stuSex,className,specialityname from stuInfo inner join specialityInfo on stuInfo.specialityID=specialityInfo.specialityID");
若stuID是主键则:
while(reader.Read())
{
....省略......
Info.Tag=reader[0]; //stuID在SQL语句的第一列(做删除和修改时可通过这个主键或唯一键而得到它对应的全部数据)
...省略......
}
例如通过鼠标点击得到stuID号,再通过SQL语句把stuID号对应的数据删除(有主外键约束则先把从表删除,后删除主表)
思路:在ListView的事件里找到click事件---双击进入---在里面写
If(this.listview.selectitems.count==1) //这里指在ListView区域首先要能找到一个实体
{
Int id=convert.toInt32(this.listview.selectItems[0].Tag); //这里指通过鼠标点击得到该行的主键(selectItems【0】是指某一列的主键)数据 然后赋给id号
}---
通过SQL语句的delete删除语句执行删除操作(..”.delete from 表 where 列名=’{0}’ “,id)
Datagridview:
Datagridview控件 columns属性中的添加选定的项中主要注意4个属性(name,datapropertyname,readonly,visible)。其中name和datapropertyname的区域框的数据填写最好与SQL中表的列名一样(不区分大小写),这样可避免很多不必要的麻烦(建议这样做) readonly---选择true;而关键还是visible(visible为true是,在datagridview能把数据显示不做隐藏;反之,不显示做隐藏,但该值是存在的。有时候要把主键或唯一键做隐藏把visible--选择false(不显示时),我们在做删除和修改时是通过得到隐藏的这个主键或唯一键来删除或修改的)这也是datagridview与ListView的区别 。
Datagridview的三大亲戚(dataset(数据集),sqldataAdapter(数据适配器)和dataview(数据筛选))
一般操作:
dataset dataset=new dataset(); //创建一个数据集用于存放数据
sqldataAdapter Da; //用sqldataAdapter数据适配器去执行
dataview Dv; //做数据筛选
(一般都把上面三者做为全局变量)
select 列名1,列名2 from 表 //.查询sql语句
da=new sqldataAdapter(sql,dbhelper.connection);//先连接数据库,后通过sqldataAdapter执行
da.fills(dataset,”表”); //指定位置填充数据集中的某个表
Dv=new dataview(dataset。Table[“表”]); //筛选要绑定的数据
This.datagridview.datasourse=Dv; //对筛选后的数据做绑定
下拉列表的绑定:
做下拉列表的绑定需要datasourse,displsymember,valuesmember(该值是隐藏的)
This.下拉表控件.datasourse=dataset.table[“表”]; //绑定该表
This.下拉表控件.valuesmenber=”列名1”; //该表的id号(隐藏的,但它是存在的)
This.下拉表控件.displaymenber=”列名2”; //显示该表的数据
注意你要绑定的列名1,列名2在SQL语句中必须是一一对应的;不然会报错(下拉列表的要求)
然而做datagridview列表的绑定只需写一个datasourse即可;
ListView和datagridview易混淆的:
清空:
Dataset.Table[“表”].clear; //datagridview做清空是针对数据集中的某个表来执行的
This.listview.Items.clear;//ListView是针对ListView控件区域的项(items)来做清空的
点击状态:
Int no=convert.toInt32(this.datagridview.selectRows[o].cell[“表”].value);
//鼠标点击得到当前这个区域(datagridview)的这行(selectRows[o])的这一列(cell[“表”])
Int no=convert.toInt32(this.listview.selectItems[0].text); //鼠标点击当前的项的这个列(selectItems[0]指第一列,因为索引从0开始)
附加:如何在一个窗体进行数据的删除和修改之后,关闭这个窗体后能在显示数据的窗体做到及时更新
步骤:
(假设)显示窗体为:A;删除..窗体为:B
//以下代码都是在A窗体中写入的
B Info=new B();
Info.showdialog(); //模式窗体
This.listview.Items.clear(); 或 dataset.Table[“表”].clear;
//先清空
重新加载(即之前所绑定的数据) //后加载(实现即时更新)