在前面的文章里,讲了些方法,如果大家仔细体会的其实都还是老的一套方法,根本没有体现面向对象过程编程的思想。并且前面2篇文章的那种方法,代码的重复利用率不高。
我们可以把ddlitem表给对象化,把表里的字段当作其属性,我先创建个对象类,类名为ddliteminfo,代码如下所示:
using system;
namespace binddropdownlist
{
/// <summary>
/// 主要是把ddlitem表对象化,
/// 把表的字段变为属性,可以任意的
/// 获取或设置该属性的值。
/// </summary>
public class ddliteminfo
{
//定义内部变量
private int _id;
private string _itemname;
//定义2重构造函数
public ddliteminfo(){}
public ddliteminfo( int id, string itemname )
{
_id = id;
_itemname = itemname;
}
//定义成员的方法
public int id
{
get
{
return _id;
}
set
{
_id = value;
}
}
public string itemname
{
get
{
return _itemname;
}
set
{
_itemname = value;
}
}
}
}
然后创建为该表使用的方法的类库,类名ddlitem.cs,代码如下所示:
using system;
using system.collections;
using system.data;
using system.data.sqlclient;
namespace binddropdownlist
{
/// <summary>
/// 对ddlitem 表的各种sql操作。
/// </summary>
public class ddlitem
{
public ddlitem(){}
//定义数据库连接字串
private const string sql_conn_string = system.configuration.configurationsettings.appsettings["connectionstring"];
//定义sql语句
private const string sql_select_ddliiems = "select id, itemname from ddlitem order by id desc";
//构造一个方法来读取所有的ddlitem表里的记录
public ilist get_ddlitems()
{
//实例化一个可动态增加长度的数组
ilist itemlist = new arraylist();
//定义数据库连接
sqlconnection myconn = new sqlconnection( sql_conn_string );
//定义sql命令
sqlcommand mycommand = new sqlcommand( sql_select_ddliiems, myconn );
//打开数据库
mycommand.connection.open();
//定义一个sqldatareader
sqldatareader rdr = mycommand.executereader();
//开始循环读取记录
while( rdr.read() )
{
//构造一个实例化的ddlitem表对象
ddliteminfo iteminfo = new ddliteminfo(
rdr.isdbnull( 0 ) ? 0 : rdr.getint32( 0 ),
rdr.isdbnull( 1 ) ? string.empty : rdr.getstring( 1 )
);
itemlist.add( iteminfo );
}
//关闭sqldatareader和sqlconnection
rdr.close();
mycommand.connection.close();
return itemlist;
}
}
}
上面就把我们要操作的方法都定义好了,下面就是怎么调用的问题了,再创建一个aspx的页面,代码如下所示:
using system;
using system.collections;
using system.componentmodel;
using system.data;
using system.drawing;
using system.web;
using system.web.sessionstate;
using system.web.ui;
using system.web.ui.webcontrols;
using system.web.ui.htmlcontrols;
namespace binddropdownlist
{
/// <summary>
/// example3 的摘要说明。
/// </summary>
public class example3 : system.web.ui.page
{
protected system.web.ui.webcontrols.dropdownlist dropdownlist1;
protected system.web.ui.webcontrols.button button1;
private void page_load(object sender, system.eventargs e)
{
// 在此处放置用户代码以初始化页面
}
#region web form designer generated code
override protected void oninit(eventargs e)
{
//
// codegen:该调用是 asp.net web 窗体设计器所必需的。
//
initializecomponent();
base.oninit(e);
}
/// <summary>
/// 设计器支持所需的方法 – 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void initializecomponent()
{
this.button1.click += new system.eventhandler(this.button1_click);
this.load += new system.eventhandler(this.page_load);
}
#endregion
private void button1_click(object sender, system.eventargs e)
{
//使用ddlitem类的get_ddlitems方法,取得记录
ilist list = new ddlitem().get_ddlitems();
//判断有没有记录
if( list.count != 0 )
{
//把记录加到dropdownlist1上
for( int i = 0 ; i < list.count; i++ )
{
ddliteminfo iteminfo = ( ddliteminfo )list[i];
dropdownlist1.items.add( new listitem( iteminfo.itemname, iteminfo.id ) );
}
}
}
}
}
这个话,我们在以后管理ddlitem内容时,直接调用get_ddlitems这个方法就可以列出所有的ddlitem信息,并且一次开发完毕后,对于ddlitem表的结构,通过ddliteminfo类的属性就能一清二楚的知道,这样也提高效率。
