在这篇文章中,我会告诉你如何强化管理界面,并提供给你一个更好使用图像的方法。
图像维护
把图像插入数据表中只是管理数据库的一个方面。另外,用户需要删除或编辑数据,甚至寻找图像的位置。所以,我们通过asp.net来建立一个管理界面,允许用户编辑图像数据,删除图像,添加新的图像,以及通过用户输入的字符串来查找图像。在这个界面里,我们会使用datagrid控件来显示每一条数据。 datagrid的每一行都将包括以下内容:
· id: 数据表中为每个图像指定的唯一整数。
· name: 插入图像时,需要为图像指定名称。这一项通过上传控件得到,所以它的内容是图像的文件名,以及插入时的完整路径。
· type: 图像所对应的图像类型。
· size: 图像的大小,单位是字节。
· description: 由用户输入的图像说明。
· image: 实际图像将以一个比较小的比例显示在datagrid中(比例由图像本身决定)。也可以把它看作缩略图(宽50像素,高40像素)。
· buttons: 每一条数据中都有编辑和删除的按钮。当用户点击编辑按钮时,更新和取消按钮将显示在编辑按钮的位置。更新按钮将所作修改写入数据库并退出编辑模式。取消按钮忽略一切修改,直接退出编辑模式。
另外,datagrid顶端的添加新图像按钮可以让用户向数据库中添加新的图像。还有一个文本框和搜索按钮让用户可以在数据库中进行搜索。当用户点击搜索按钮时,将在数据库中搜索名称或说明中包含搜索字符串的数据条目。搜索结果将显示在datagrid中。还有一个清除按钮,用于清除搜索文本框,并将所有数据重新载入datagrid。
列表a列出了页面的vb.net代码。
列表a
========const connstring as string = "data source=localhost;initial
catalog=northwind;user id=username;password=password;"
sub page_load(sender as object, e as eventargs)
if (not page.ispostback) thenbinddataset(string.empty)
end if
end sub
sub binddataset(searchstring as string)
dim conn as sqlconnection
dim comm as sqlcommand
dim sql as string
if (searchstring = string.empty) thensql = "select id, name,
contenttype, filesize, picture, description " + _
"from imagedata order by name"
elsesql = "select id, name, contenttype, filesize, picture, description
" + _
"from imagedata where name like '%" + searchstring + _
"%' or description like '%" + searchstring + "%' order by name"
end if
tryconn = new sqlconnection(connstring)comm = new sqlcommand(sql,
conn)conn.open()dgimages.datasource =
comm.executereader()dgimages.databind()
catch sqlexc as sqlexceptionresponse.write("data error occurred: "
amp; sqlexc.tostring())
end try
end sub
function imagelink(strargument) as string
return ("displayimagevb.aspx?id=" & strargument)
end function
sub dgimages_edit(sender as object, e as
datagridcommandeventargs)dgimages.edititemindex =
e.item.itemindexbinddataset(string.empty)
end sub
sub dgimages_cancel(sender as object, e as
datagridcommandeventargs)dgimages.edititemindex =
-1binddataset(string.empty)
end sub
sub dgimages_update(sender as object, e as datagridcommandeventargs)
dim strname as string = ctype(e.item.cells(1).controls(0),
textbox).text
dim strdesc as string = ctype(e.item.cells(4).controls(0),
textbox).text
dim strsql as string = "update [imagedata] set [name] = '" + strname +
_
"', [description] = '" + strdesc + "' where [id] = " +
e.item.cells(0).text
dim conn as new sqlconnection(connstring)conn.open()
dim comm as sqlcommand = new sqlcommand(strsql, conn)comm.commandtype =
commandtype.textcomm.executenonquery()conn.close()dgimages.edititemindex
= -1binddataset(string.empty)
end sub
sub dgimages_delete(sender as object, e as datagridcommandeventargs)
dim sql as string sql = "delete from [imagedata] where [id] = " +
e.item.cells(0).text
dim conn as new sqlconnection(connstring)conn.open()
dim comm as sqlcommand = new sqlcommand(sql, conn)comm.commandtype =
commandtype.textcomm.executenonquery()conn.close()dgimages.edititemindex
= -1binddataset(string.empty)
end sub
sub addimage(sender as object, e as
eventargs)response.redirect("addimage.aspx")
end sub
sub dosearch(sender as object, e as
eventargs)binddataset(txtsearch.text)
end sub
sub clearsearch(sender as object, e as eventargs)
if not (txtsearch.text = "")
thenbinddataset(string.empty)txtsearch.text = ""
end if
end sub
'
runat=server />
列表b 列出了等价的c#代码。
列表b
===============const string connstring = "data source=pentium4;initial
catalog=northwind;user id=sa;password=;";
rivate void page_load(object sender, system.eventargs e) {
if (!page.ispostback) {binddataset(string.empty);
} }
ublic void binddataset(string searchstring)
{sqlconnectionconn;sqlcommandcomm;
tring sql;
if (searchstring == string.empty)sql = "select id, name, contenttype,
filesize, picture, description from imagedata order by name";
elsesql = "select id, name, contenttype, filesize, picture, description
from imagedata where name like '%" + searchstring + "%' or description
like '%" + searchstring + "%' order by name";
try {conn = new sqlconnection(connstring);comm = new sqlcommand(sql,
conn);conn.open();dgimages.datasource =
comm.executereader();dgimages.databind();
} catch (sqlexception ex) {response.write("data error: " +
ex.tostring());
} }
ublic string imagelink(object strargument) {
return ("displayimagevb.aspx?id=" + strargument.tostring());
}
ublic void dgimages_edit(object sender, datagridcommandeventargs e)
{dgimages.edititemindex = e.item.itemindex;binddataset(string.empty);
}
ublic void dgimages_cancel(object sender, datagridcommandeventargs e)
{dgimages.edititemindex = -1;binddataset(string.empty);
}
ublic void dgimages_update(object sender, datagridcommandeventargs e)
{
tring strname;
tring strdesc;
tring strsql;sqlconnectionconn;sqlcommandcomm;strname =
((textbox)(e.item.cells[1].controls[0])).text;strdesc =
((textbox)(e.item.cells[4].controls[0])).text;strsql = "update
[imagedata] set [name] = '" + strname + "', [description] = '" +
trdesc + "' where [id] = " + e.item.cells[0].text;conn = new
sqlconnection(connstring);conn.open();comm = new sqlcommand(strsql,
conn);comm.commandtype =
commandtype.text;comm.executenonquery();conn.close();dgimages.edititemindex
= -1;binddataset(string.empty);
}
ublic void dgimages_delete(object sender, datagridcommandeventargs e)
{
tring sql;sql = "delete from [imagedata] where [id] = " +
e.item.cells[0].text;sqlconnectionconn;sqlcommandcomm;conn = new
sqlconnection(connstring);conn.open();comm = new sqlcommand(sql,
conn);comm.commandtype =
commandtype.text;comm.executenonquery();conn.close();dgimages.edititemindex
= -1;binddataset(string.empty);
}
ublic void addimage(object sender, eventargs e)
{response.redirect("sqlimagesexample1vb.aspx");
}
ublic void dosearch(object sender, eventargs e)
{binddataset(txtsearch.text);
}
ublic void clearsearch(object sender, eventargs e) {
if (txtsearch.text != "") {binddataset(string.empty);txtsearch.text =
"";
} }
'
runat="server" />
以下是对代码的一些解释:
· datagrid的oneditcommand属性将edit命令 (editcommandcolumn)指定到特定的子程序。对取消编辑的oncancelcommand,保存修改的onupdatecommand,以及删除数据项的ondeletecommand也是一样。
· asp:boundcolumn元素在对应的数据集中将datagrid的列与指定的列连接。datafield属性指定对应的列。
· asp.net的按钮控件使搜索和添加新项目更加轻松。它们的onclick属性可以让你指定一个子程序,当按钮被按下时执行。
· dosearch子程序在数据表中所有数据项的description和name中对搜索字符串进行搜索。搜索结果的各行将在datagrid中显示。
· clearsearch方法将所有数据重新载入datagrid,并清除搜索文本框。
· binddataset方法负责将数据载入datagrid并接受搜索字符串。如果搜索字符串为空,则执行的t-sql语句中将设定为显示数据表中所有数据。否则,将使用搜索字符串来创建t-sql语句来取出所有符合搜索字符串的记录,显示在datagrid中。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器