欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

网上购物系统(Task008)——FormView编辑更新商品详细信息

程序员文章站 2022-03-24 22:17:17
一、前期准备 编辑商品信息属于管理功能,管理功能的网页最好单独放在一个文件夹中,为此,做一些准备工作: 1、修改母版页中的路径为绝对路径 2、复制controls中的itemdetailscontr...

一、前期准备

编辑商品信息属于管理功能,管理功能的网页最好单独放在一个文件夹中,为此,做一些准备工作:

1、修改母版页中的路径为绝对路径

2、复制controls中的itemdetailscontrol.ascx,改名为itemmanagecontrol.ascx

3、在itemmanagecontrol.ascx中的formview的itemplate模板中添加三个linkbutton按钮,编辑、新建、删除。设置一下单元格右对齐,会美观一点。

4、临时在itemdetails.x中添加代码:

response.redirect("manager/itemmanage.aspx" + request.url.query);

5、web中新建文件夹manager,并添加itemmanage.aspx,引用母版页

二、编辑edititemtemplate模板,可直接将模板itemtemplate复制过来进行修改,添加必要的文本框、下拉列表框,模板代码如下:

(注意:<%@outputcacheduration="100000"varybyparam="page;categoryid"%>页面缓存要去掉,否则,嘿嘿嘿)

[html]  <edititemtemplate> 
    <table cellpadding="0" cellspacing="0"> 
        <tr> 
            <td height="18" width="18"> 
            </td> 
            <td height="18" width="96"> 
            </td> 
            <td height="18" width="18"> 
            </td> 
            <td height="18" width="96"> 
            </td> 
            <td height="18" width="180"> 
            </td> 
        </tr> 
        <tr> 
            <td style="height: 18px" width="18"> 
            </td> 
            <td rowspan="8" width="96"> 
                <asp:image id="imgitem" runat="server" alternatetext='<%# eval("name") %>' height="144" 
                    imageurl='<%# eval("image") %>' width="144" /></td> 
            <td style="height: 18px" width="18"> 
            </td> 
            <td colspan="2" style="height: 18px"> 
                <asp:fileupload id="fupimage" runat="server" width="80%" /> 
                <asp:button id="btnupload" runat="server" onclick="btnupload_click" text="上传" /></td> 
        </tr> 
        <tr> 
            <td width="18"> 
            </td> 
            <td width="18"> 
            </td> 
            <td width="96"> 
                商品类别:</td> 
            <td width="180"> 
                <asp:dropdownlist id="ddlcategories" runat="server"  
                autopostback="true"  
                onselectedindexchanged="ddlcategories_selectedindexchanged"> 
                </asp:dropdownlist> 
            </td> 
        </tr> 
        <tr> 
            <td width="18"> 
            </td> 
            <td width="18"> 
            </td> 
            <td width="96"> 
                商品名称:</td> 
            <td width="180"> 
                <asp:textbox id="txtname" runat="server" text='<%# bind("name") %>'></asp:textbox> 
            </td> 
        </tr> 
        <tr> 
            <td width="18"> 
            </td> 
            <td width="18"> 
            </td> 
            <td width="96"> 
                商品价格:</td> 
            <td width="180"> 
                <asp:textbox id="txtprice" runat="server" text='<%# bind("price") %>'></asp:textbox> 
            </td> 
        </tr> 
        <tr> 
            <td width="18"> 
            </td> 
            <td width="18"> 
            </td> 
            <td width="96"> 
                商品描述:</td> 
            <td width="180"> 
                <asp:textbox id="txtdescn" runat="server" text='<%# bind("descn") %>'></asp:textbox> 
            </td> 
        </tr> 
        <tr> 
            <td width="18"> 
            </td> 
            <td width="18"> 
            </td> 
            <td width="96"> 
                供应时间:</td> 
            <td width="180"> 
                <asp:textbox id="txtsupplytime" runat="server" text='<%# bind("supplytime") %>'></asp:textbox> 
            </td> 
        </tr> 
        <tr> 
            <td width="18"> 
            </td> 
            <td width="18"> 
            </td> 
            <td width="96"> 
                供应日期:</td> 
            <td width="180"> 
               <asp:textbox id="txtsupplydate" runat="server" text='<%# bind("supplydate") %>'></asp:textbox> 
            </td> 
        </tr> 
        <tr> 
            <td width="18"> 
            </td> 
            <td width="18"> 
            </td> 
            <td width="96"> 
                供应地区:</td> 
            <td width="180"> 
                <asp:textbox id="txtsupplyarea" runat="server" text='<%# bind("supplyarea") %>'></asp:textbox> 
            </td> 
        </tr> 
        <tr> 
            <td height="18" width="18"> 
            </td> 
            <td height="18" width="96"> 
            </td> 
            <td height="18" width="18"> 
            </td> 
            <td height="18" width="96"> 
            </td> 
            <td height="18" width="180" align="right"> 
                <asp:linkbutton id="lbtndelete" runat="server" commandname="update" text="更新" /> 
                <asp:linkbutton id="lbtnnew" runat="server" commandname="cancel" text="取消" /> 
            </td> 
        </tr> 
    </table> 
</edititemtemplate> 
    <edititemtemplate>
        <table cellpadding="0" cellspacing="0">
            <tr>
                <td height="18" width="18">
                </td>
                <td height="18" width="96">
                </td>
                <td height="18" width="18">
                </td>
                <td height="18" width="96">
                </td>
                <td height="18" width="180">
                </td>
            </tr>
            <tr>
                <td style="height: 18px" width="18">
                </td>
                <td rowspan="8" width="96">
                    <asp:image id="imgitem" runat="server" alternatetext='<%# eval("name") %>' height="144"
                        imageurl='<%# eval("image") %>' width="144" /></td>
                <td style="height: 18px" width="18">
                </td>
                <td colspan="2" style="height: 18px">
                    <asp:fileupload id="fupimage" runat="server" width="80%" />
                    <asp:button id="btnupload" runat="server" onclick="btnupload_click" text="上传" /></td>
            </tr>
            <tr>
                <td width="18">
                </td>
                <td width="18">
                </td>
                <td width="96">
                    商品类别:</td>
                <td width="180">
                    <asp:dropdownlist id="ddlcategories" runat="server"
                    autopostback="true"
                    onselectedindexchanged="ddlcategories_selectedindexchanged">
                    </asp:dropdownlist>
                </td>
            </tr>
            <tr>
                <td width="18">
                </td>
                <td width="18">
                </td>
                <td width="96">
                    商品名称:</td>
                <td width="180">
                    <asp:textbox id="txtname" runat="server" text='<%# bind("name") %>'></asp:textbox>
                </td>
            </tr>
            <tr>
                <td width="18">
                </td>
                <td width="18">
                </td>
                <td width="96">
                    商品价格:</td>
                <td width="180">
                    <asp:textbox id="txtprice" runat="server" text='<%# bind("price") %>'></asp:textbox>
                </td>
            </tr>
            <tr>
                <td width="18">
                </td>
                <td width="18">
                </td>
                <td width="96">
                    商品描述:</td>
                <td width="180">
                    <asp:textbox id="txtdescn" runat="server" text='<%# bind("descn") %>'></asp:textbox>
                </td>
            </tr>
            <tr>
                <td width="18">
                </td>
                <td width="18">
                </td>
                <td width="96">
                    供应时间:</td>
                <td width="180">
                    <asp:textbox id="txtsupplytime" runat="server" text='<%# bind("supplytime") %>'></asp:textbox>
                </td>
            </tr>
            <tr>
                <td width="18">
                </td>
                <td width="18">
                </td>
                <td width="96">
                    供应日期:</td>
                <td width="180">
                   <asp:textbox id="txtsupplydate" runat="server" text='<%# bind("supplydate") %>'></asp:textbox>
                </td>
            </tr>
            <tr>
                <td width="18">
                </td>
                <td width="18">
                </td>
                <td width="96">
                    供应地区:</td>
                <td width="180">
                    <asp:textbox id="txtsupplyarea" runat="server" text='<%# bind("supplyarea") %>'></asp:textbox>
                </td>
            </tr>
            <tr>
                <td height="18" width="18">
                </td>
                <td height="18" width="96">
                </td>
                <td height="18" width="18">
                </td>
                <td height="18" width="96">
                </td>
                <td height="18" width="180" align="right">
                    <asp:linkbutton id="lbtndelete" runat="server" commandname="update" text="更新" />
                    <asp:linkbutton id="lbtnnew" runat="server" commandname="cancel" text="取消" />
                </td>
            </tr>
        </table>
    </edititemtemplate>
 

三、itemmanagecontrol.ascx的后台代码:

代码页的主任是读取前台窗体的值,主要是fileupload控件和dropdownlist控件的值,两个值,分别使用了viewstate存储了信息。读取数据的时候,注意,如果用户没有做修改,刚使用原来的值,这个值放在了privatestaticilist<itemdetails> itemdetails =newlist<itemdetails>();中。

[csharp] using system; 
using system.web; 
using system.web.ui.webcontrols; 
using system.collections.generic; 
 
using westgarden.dal; 
using westgarden.model; 
 
namespace westgarden.web 

    public partial class itemmanagecontrol : system.web.ui.usercontrol 
    { 
        private static ilist<itemdetails> itemdetails = new list<itemdetails>(); 
 
        protected void page_load(object sender, eventargs e) 
        { 
            if (!ispostback) 
            { 
                bindformview(); 
                viewstate["imageurl"] = null; 
                viewstate["selectedcategoryid"] = null; 
            } 
        } 
 
        protected void fvwitemdetails_modechanging(object sender, formviewmodeeventargs e) 
        { 
            switch (e.newmode) 
            { 
                case formviewmode.edit: 
                    this.fvwitemdetails.changemode(formviewmode.edit); 
                    bindformview(); 
                    dropdownlist ddl = (dropdownlist)fvwitemdetails.findcontrol("ddlcategories"); 
                    binddropdownlist(ddl); 
                    break; 
                case formviewmode.readonly: 
                    this.fvwitemdetails.changemode(formviewmode.readonly); 
                    bindformview(); 
                    break; 
                default: 
                    break; 
            } 
        } 
        protected void fvwitemdetails_prerender(object sender, eventargs e) 
        { 
        } 
 
        protected void ddlcategories_selectedindexchanged(object sender, eventargs e) 
        { 
            dropdownlist ddl = (dropdownlist)fvwitemdetails.findcontrol("ddlcategories"); 
            viewstate["selectedcategoryid"] = ddl.selectedvalue; 
 
        } 
 
        protected void btnupload_click(object sender, eventargs e) 
        { 
            fileupload fup = (fileupload)fvwitemdetails.findcontrol("fupimage"); 
 
            if (fup.hasfile) 
            { 
                fup.saveas(server.mappath("~/images/items/") + fup.filename); 
 
                image img = (image)fvwitemdetails.findcontrol("imgitem"); 
                img.imageurl = "~/images/items/" + fup.filename.tostring(); 
                viewstate["imageurl"] = "~/images/items/" + fup.filename.tostring(); 
            } 
            else 
            { 
                response.write("<script>alert('请先浏览并选择图片')</script>"); 
            } 
        } 
 
        protected void fvwitemdetails_itemupdating(object sender, formviewupdateeventargs e) 
        { 
            if (viewstate["imageurl"] != null) 
            { 
                itemdetails[0].image = viewstate["imageurl"].tostring(); 
            } 
 
            if (viewstate["selectedcategoryid"] != null) 
            { 
 
                dropdownlist ddl = (dropdownlist)fvwitemdetails.findcontrol("ddlcategories"); 
                itemdetails[0].categoryid = viewstate["selectedcategoryid"].tostring(); 
            } 
 
            textbox txtname = (textbox)fvwitemdetails.findcontrol("txtname"); 
            itemdetails[0].name = txtname.text; 
 
            textbox txtprice = (textbox)fvwitemdetails.findcontrol("txtprice"); 
            itemdetails[0].price = decimal.parse(txtprice.text); 
 
            textbox txtdescn = (textbox)fvwitemdetails.findcontrol("txtdescn"); 
            itemdetails[0].descn = txtdescn.text; 
 
            textbox txtsupplytime = (textbox)fvwitemdetails.findcontrol("txtsupplytime"); 
            itemdetails[0].supplytime = txtsupplytime.text; 
 
            textbox txtsupplydate = (textbox)fvwitemdetails.findcontrol("txtsupplydate"); 
            itemdetails[0].supplydate = txtsupplydate.text; 
 
            textbox txtsupplyarea = (textbox)fvwitemdetails.findcontrol("txtsupplyarea"); 
            itemdetails[0].supplyarea = txtsupplyarea.text; 
 
 
            item item = new item(); 
            item.updateitem(itemdetails[0]); 
 
            fvwitemdetails.changemode(formviewmode.readonly); 
 
            bindformview(); 
            viewstate["imageurl"] = null; 
            viewstate["selectedcategoryid"] = null; 
        } 
 
 
        private void bindformview() 
        { 
            int itemkey = int.parse(request.querystring["itemid"]); 
            item item = new item(); 
            itemdetails = item.getitemdetailsbyitemid(itemkey); 
            fvwitemdetails.datasource = itemdetails; 
            fvwitemdetails.databind(); 
        } 
 
        private void binddropdownlist(dropdownlist ddl) 
        { 
            ddl.datasource = new category().getcategories(); 
            ddl.datatextfield = "name"; 
            ddl.datavaluefield = "categoryid"; 
            ddl.databind(); 
 
            string selectcategory = request.querystring["categoryid"].tostring(); 
            if (selectcategory != null) 
            { 
                listitem selecteditem = ddl.items.findbyvalue(selectcategory); 
                if (selecteditem != null) 
                    selecteditem.selected = true; 
            } 
        } 
    } 

using system;
using system.web;
using system.web.ui.webcontrols;
using system.collections.generic;

using westgarden.dal;
using westgarden.model;

namespace westgarden.web
{
    public partial class itemmanagecontrol : system.web.ui.usercontrol
    {
        private static ilist<itemdetails> itemdetails = new list<itemdetails>();

        protected void page_load(object sender, eventargs e)
        {
            if (!ispostback)
            {
                bindformview();
                viewstate["imageurl"] = null;
                viewstate["selectedcategoryid"] = null;
            }
        }

        protected void fvwitemdetails_modechanging(object sender, formviewmodeeventargs e)
        {
            switch (e.newmode)
            {
                case formviewmode.edit:
                    this.fvwitemdetails.changemode(formviewmode.edit);
                    bindformview();
                    dropdownlist ddl = (dropdownlist)fvwitemdetails.findcontrol("ddlcategories");
                    binddropdownlist(ddl);
                    break;
                case formviewmode.readonly:
                    this.fvwitemdetails.changemode(formviewmode.readonly);
                    bindformview();
                    break;
                default:
                    break;
            }
        }
        protected void fvwitemdetails_prerender(object sender, eventargs e)
        {
        }

        protected void ddlcategories_selectedindexchanged(object sender, eventargs e)
        {
            dropdownlist ddl = (dropdownlist)fvwitemdetails.findcontrol("ddlcategories");
            viewstate["selectedcategoryid"] = ddl.selectedvalue;

        }

        protected void btnupload_click(object sender, eventargs e)
        {
            fileupload fup = (fileupload)fvwitemdetails.findcontrol("fupimage");

            if (fup.hasfile)
            {
                fup.saveas(server.mappath("~/images/items/") + fup.filename);

                image img = (image)fvwitemdetails.findcontrol("imgitem");
                img.imageurl = "~/images/items/" + fup.filename.tostring();
                viewstate["imageurl"] = "~/images/items/" + fup.filename.tostring();
            }
            else
            {
                response.write("<script>alert('请先浏览并选择图片')</script>");
            }
        }

        protected void fvwitemdetails_itemupdating(object sender, formviewupdateeventargs e)
        {
            if (viewstate["imageurl"] != null)
            {
                itemdetails[0].image = viewstate["imageurl"].tostring();
            }

            if (viewstate["selectedcategoryid"] != null)
            {

                dropdownlist ddl = (dropdownlist)fvwitemdetails.findcontrol("ddlcategories");
                itemdetails[0].categoryid = viewstate["selectedcategoryid"].tostring();
            }

            textbox txtname = (textbox)fvwitemdetails.findcontrol("txtname");
            itemdetails[0].name = txtname.text;

            textbox txtprice = (textbox)fvwitemdetails.findcontrol("txtprice");
            itemdetails[0].price = decimal.parse(txtprice.text);

            textbox txtdescn = (textbox)fvwitemdetails.findcontrol("txtdescn");
            itemdetails[0].descn = txtdescn.text;

            textbox txtsupplytime = (textbox)fvwitemdetails.findcontrol("txtsupplytime");
            itemdetails[0].supplytime = txtsupplytime.text;

            textbox txtsupplydate = (textbox)fvwitemdetails.findcontrol("txtsupplydate");
            itemdetails[0].supplydate = txtsupplydate.text;

            textbox txtsupplyarea = (textbox)fvwitemdetails.findcontrol("txtsupplyarea");
            itemdetails[0].supplyarea = txtsupplyarea.text;


            item item = new item();
            item.updateitem(itemdetails[0]);

            fvwitemdetails.changemode(formviewmode.readonly);

            bindformview();
            viewstate["imageurl"] = null;
            viewstate["selectedcategoryid"] = null;
        }


        private void bindformview()
        {
            int itemkey = int.parse(request.querystring["itemid"]);
            item item = new item();
            itemdetails = item.getitemdetailsbyitemid(itemkey);
            fvwitemdetails.datasource = itemdetails;
            fvwitemdetails.databind();
        }

        private void binddropdownlist(dropdownlist ddl)
        {
            ddl.datasource = new category().getcategories();
            ddl.datatextfield = "name";
            ddl.datavaluefield = "categoryid";
            ddl.databind();

            string selectcategory = request.querystring["categoryid"].tostring();
            if (selectcategory != null)
            {
                listitem selecteditem = ddl.items.findbyvalue(selectcategory);
                if (selecteditem != null)
                    selecteditem.selected = true;
            }
        }
    }
}
 
四、数据访问层dal中的item.cs类中添加更新函数updateitem(),代码如下:

[csharp] public void updateitem(itemdetails item) 

    sqlparameter[] parms; 
    parms = new sqlparameter[] 
    { 
        new sqlparameter("@itemid",sqldbtype.int), 
        new sqlparameter("@categoryid",sqldbtype.varchar,20), 
        new sqlparameter("@name",sqldbtype.varchar,80), 
        new sqlparameter("@price",sqldbtype.decimal,10), 
        new sqlparameter("@image",sqldbtype.varchar,80), 
        new sqlparameter("@descn",sqldbtype.varchar,80), 
        new sqlparameter("@supplytime",sqldbtype.varchar,80), 
        new sqlparameter("@supplydate",sqldbtype.varchar,80), 
        new sqlparameter("@supplyarea",sqldbtype.varchar,80) 
    }; 
 
    parms[0].value = item.itemid; 
    parms[1].value = item.categoryid; 
    parms[2].value = item.name; 
    parms[3].value = item.price; 
    parms[4].value = item.image; 
    parms[5].value = item.descn; 
    parms[6].value = item.supplytime; 
    parms[7].value = item.supplydate; 
    parms[8].value = item.supplyarea; 
 
    sqlhelper.executenonquery(sqlhelper.connectionstringlocaltransaction, commandtype.text, sql_update_item, parms); 

 


作者 yousuosi