版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章模塊4?——
商品信息管理5.1【任務(wù)10】商品信息查詢5.2【任務(wù)11】商品信息的添加、修改和刪除
【本章提要】
商品的查看、添加、刪除和修改操作是校園在線超市系統(tǒng)中的主要功能。本章通過介紹數(shù)據(jù)源控件SqlDataSource、數(shù)據(jù)綁定控件GridView、FormView和文件上傳控件FileUpLoad的使用,結(jié)合DataSet和DataAdapter對(duì)象,詳細(xì)介紹了商品信息管理各項(xiàng)功能的實(shí)現(xiàn)。
【學(xué)習(xí)目標(biāo)】
·掌握SqlDataSource控件。
·掌握GridView、FormView控件的使用。
·掌握文件上傳控件FileUpLoad。
·掌握DataSet對(duì)象和DataAdapter對(duì)象的使用。
任務(wù)描述
任何用戶在訪問電子商務(wù)類的網(wǎng)站時(shí),通常會(huì)對(duì)感興趣的商品進(jìn)行查找。因此在校園在線超市中,進(jìn)行商品信息查詢是非常必要的。查詢時(shí),應(yīng)能根據(jù)商品名稱、商品類型等信息進(jìn)行查詢。5.1【任務(wù)10】商品信息查詢
必備知識(shí)
知識(shí)1SqlDataSource控件
1.SqlDataSource控件
在ASP.NET2.0中,數(shù)據(jù)訪問系統(tǒng)的核心是數(shù)據(jù)源控件。一個(gè)數(shù)據(jù)源控件代表數(shù)據(jù)(數(shù)據(jù)庫(kù)、對(duì)象、XML、消息隊(duì)列等)在系統(tǒng)內(nèi)存中的映像,能夠在Web頁(yè)面上通過數(shù)據(jù)綁定控件展示出來。為了適應(yīng)對(duì)不同數(shù)據(jù)源的訪問,ASP.NET2.0提供了五個(gè)內(nèi)置數(shù)據(jù)源控件:SqlDataSource、AccessDataSource、ObjectDataSource、XmlDataSource和SiteMapDataSource。ASP.NET2.0新的數(shù)據(jù)源控件提供了新的聲明方式來處理數(shù)據(jù),使用這些控件,只需很少的代碼或無(wú)需任何代碼就可從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù)。本節(jié)以SqlDataSource控件為例,體驗(yàn)ASP.NET2.0強(qiáng)大的數(shù)據(jù)訪問能力。
SqlDataSource可用于任何具有關(guān)聯(lián)ADO.NET提供程序的數(shù)據(jù)庫(kù),包括MicrosoftSQLServer、OLEDB、ODBC和Oracle數(shù)據(jù)庫(kù)。在配置時(shí),SqlDataSource使用的SQL語(yǔ)法以及是否可使用更高級(jí)的數(shù)據(jù)庫(kù)功能均由所用的數(shù)據(jù)庫(kù)決定。數(shù)據(jù)源控件對(duì)于所有數(shù)據(jù)庫(kù)的操作都是相同的。
下面通過一個(gè)實(shí)例演示SqlDataSource控件實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)訪問。
【例5-1】查詢商品類型表T_WareType中商品類別的名稱,并將查詢結(jié)果置于下拉列表控件DropDownList1中。
首先,新建名為Test.aspx的Web頁(yè),在設(shè)計(jì)視圖下雙擊數(shù)據(jù)分類項(xiàng)中的SqlDataSource控件就會(huì)添加一個(gè)SqlDataSource到當(dāng)前頁(yè)面。鼠標(biāo)單擊SqlDataSouce時(shí)會(huì)出現(xiàn)一個(gè)小三角箭頭(即“智能標(biāo)記”按鈕),如圖5-1所示。
圖5-1配置SqlDataSource數(shù)據(jù)源
SqlDataSource控件的HTML標(biāo)簽:
<asp:SqlDataSourceID="SqlDataSource1"runat="server">
</asp:SqlDataSource>
單擊配置數(shù)據(jù)源,出現(xiàn)如圖5-2所示的頁(yè)面。
圖5-2創(chuàng)建數(shù)據(jù)庫(kù)連接單擊新建連接,彈出如圖5-3所示的對(duì)話框,進(jìn)行數(shù)據(jù)源的配置。默認(rèn)情況下連接到SQLServer數(shù)據(jù)庫(kù),通過單擊“更改”可對(duì)Access數(shù)據(jù)庫(kù)文件、ODBC數(shù)據(jù)源、SQLServer數(shù)據(jù)庫(kù)、SQLServer手機(jī)版數(shù)據(jù)庫(kù)、SQLServer數(shù)據(jù)庫(kù)文件、Oracle數(shù)據(jù)庫(kù)文件等進(jìn)行配置。
圖5-3設(shè)置數(shù)據(jù)庫(kù)連接在圖5-3對(duì)話框中,設(shè)置服務(wù)器名及服務(wù)器登錄方式,并選擇要連接的數(shù)據(jù)庫(kù),如圖5-3所示。
值得注意的是,如果要連接的數(shù)據(jù)庫(kù)服務(wù)器與開發(fā)者的機(jī)器在同一個(gè)局域網(wǎng)里,可以使用局域網(wǎng)IP地址或者局域網(wǎng)中的電腦主機(jī)名;如果要連接的數(shù)據(jù)庫(kù)服務(wù)器與開發(fā)者的機(jī)器不在同一個(gè)局域網(wǎng)內(nèi),那么就要求數(shù)據(jù)庫(kù)服務(wù)器必須有一個(gè)公網(wǎng)IP;如果要連接的數(shù)據(jù)庫(kù)服務(wù)器與開發(fā)者所使用的機(jī)器是同一臺(tái)機(jī)器,則可以使用“(local)”、“.”或者“”來標(biāo)識(shí)。單擊“測(cè)試連接”按鈕,如果彈出連接成功的提示消息,就表示這個(gè)數(shù)據(jù)庫(kù)連接是可用的。單擊“確定”按鈕,回到“配置數(shù)據(jù)源”界面,這時(shí)點(diǎn)擊連接字符串旁邊的“+”按鈕就可以看到數(shù)據(jù)庫(kù)的連接字符串信息,如圖5-4所示。
圖5-4選擇數(shù)據(jù)庫(kù)連接單擊“下一步”按鈕,出現(xiàn)如圖5-5所示的頁(yè)面,可以將連接字符串保存到應(yīng)用程序配置文件(Web.Config)中,這樣,原來多數(shù)讀者為之苦惱的連接字符串就輕松地創(chuàng)建好了。
圖5-5保存數(shù)據(jù)連接字符串到Web.config接下來就要配置SQL語(yǔ)句了,讀者可以根據(jù)兩種方式從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù):一種是自定義SQL語(yǔ)句或存儲(chǔ)過程;另一種是指定來自表或視圖的列,如圖5-6所示。
圖5-6配置數(shù)據(jù)庫(kù)查詢這里,選擇查詢商品類別表T_WareType中的所有列,讀者也可以根據(jù)需求,對(duì)數(shù)據(jù)進(jìn)行篩選、排序等。單擊“下一步”按鈕,最后點(diǎn)擊“完成”按鈕。
通過上述步驟,完成了對(duì)SqlDataSource數(shù)據(jù)源的配置。那么,怎樣將配置好的數(shù)據(jù)源綁定到指定的數(shù)據(jù)控件呢?
在頁(yè)面中,添加一個(gè)DropDownList控件,單擊該控件右邊的“智能標(biāo)記”按鈕,單擊“選擇數(shù)據(jù)源”,出現(xiàn)如圖5-7所示的對(duì)話框。
圖5-7選擇數(shù)據(jù)源選擇數(shù)據(jù)源為“SqlDataSource1”;選擇要在DropDownList中顯示的數(shù)據(jù)字段為“splb_TypeName(商品類別名稱)”;為DropDownList的值選擇數(shù)據(jù)字段為“splb_TypeID”,單擊“確定”按鈕。
切換Test.aspx頁(yè)至源視圖,.NET生成的頁(yè)面代碼如下:
<asp:SqlDataSourceID="SqlDataSource1"runat="server"
ConnectionString="<%$ConnectionStrings:SuperMarketDBConnetionString%>"
SelectCommand="SELECT*FROM[T_WareType]">
</asp:SqlDataSource>
<asp:LabelID="Label1"runat="server"Text="商品類別:"></asp:Label>
<asp:DropDownListID="DropDownList1"runat="server"
DataSourceID="SqlDataSource1"
DataTextField="splb_TypeName"DataValueField="splb_TypeID">
</asp:DropDownList>
從頁(yè)面代碼可以知道,SqlDataSource控件的兩個(gè)重要屬性如下:①ConnectionString:設(shè)置為用于特定數(shù)據(jù)庫(kù)的連接字符串。為使Web應(yīng)用程序更易于維護(hù),并且安全性更高,通常將連接字符串存儲(chǔ)在應(yīng)用程序配置文件的connectionStrings元素中,如上述代碼所示。
②SelectCommand:指定該控件要執(zhí)行的SQL查詢。
在瀏覽器中查看Test.aspx頁(yè)面效果,如圖5-8所示。
圖5-8SqlDataSource數(shù)據(jù)源控件篩選數(shù)據(jù)從上例可以看出,通過SqlDataSource數(shù)據(jù)源控件,不用書寫一行代碼,就可完成對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的檢索,大大地提高了應(yīng)用程序的開發(fā)效率。
2.?dāng)?shù)據(jù)綁定控件
像DropDownList一樣,可以配置數(shù)據(jù)源的控件,稱為數(shù)據(jù)綁定控件。常用的數(shù)據(jù)綁定控件有DropDownList、ListBox、GridView、DataList、FormView、Repeater等。在ASP.NET2.0中,所有的數(shù)據(jù)庫(kù)綁定控件都是從BaseDataBoundControl這個(gè)抽象類派生的,它定義了幾個(gè)重要屬性和一個(gè)重要方法:
·DataSource屬性:指定數(shù)據(jù)綁定控件的數(shù)據(jù)來源,顯示的時(shí)候程序?qū)?huì)從這個(gè)數(shù)據(jù)源中獲取數(shù)據(jù)并顯示。
·DataSourceID屬性:指定數(shù)據(jù)綁定控件的數(shù)據(jù)源控件的ID,顯示的時(shí)候程序?qū)?huì)根據(jù)這個(gè)ID找到相應(yīng)的數(shù)據(jù)源控件,并利用這個(gè)數(shù)據(jù)源控件中指定方法獲取數(shù)據(jù)并顯示。
·DataBind()方法:當(dāng)指定了數(shù)據(jù)綁定控件的DataSource屬性或者DataSourceID屬性之后,再調(diào)用DataBind()方法才會(huì)顯示綁定的數(shù)據(jù)。
在使用數(shù)據(jù)源時(shí),會(huì)先嘗試使用DataSourceID屬性標(biāo)識(shí)的數(shù)據(jù)源,只在沒有設(shè)置DataSourceID時(shí)才會(huì)用到DataSource屬性標(biāo)識(shí)的數(shù)據(jù)源。也就是說,DataSource和DataSourceID兩個(gè)屬性不能同時(shí)使用。
知識(shí)2GridView控件
1.GridView控件概述
在使用ASP.NET開發(fā)Web應(yīng)用程序的過程中,GridView是一個(gè)非常重要的控件,幾乎任何與數(shù)據(jù)相關(guān)的顯示都要用到該控件。所以熟練掌握GridView控件的應(yīng)用技巧是每個(gè)Web開發(fā)人員所必備的基本能力。
GridView控件是ASP.NET1.1下DataGrid控件的替代品,它以表格的形式顯示數(shù)據(jù)源的值,每列表示一個(gè)字段,每行表示一條記錄。該控件提供了諸如內(nèi)置排序功能、內(nèi)置更新和刪除功能、內(nèi)置分頁(yè)功能、內(nèi)置行選擇功能、以編程方式訪問GridView對(duì)象模型、動(dòng)態(tài)設(shè)置屬性、處理事件等功能。同時(shí),它還可以通過主題和樣式自定義外觀,實(shí)現(xiàn)多種樣式的數(shù)據(jù)展示。表5-1列舉了GridView控件的常見屬性。本節(jié)我們將介紹GridView控件常用的應(yīng)用技巧。表5-1GridView控件常見屬性
2.格式化GridView
在軟件項(xiàng)目開發(fā)時(shí),功能的實(shí)現(xiàn)固然重要,但界面的呈現(xiàn)風(fēng)格也是不容忽視的,友好、和諧的界面風(fēng)格能為軟件增色不少。
有兩種方式可對(duì)GridView控件的樣式進(jìn)行調(diào)整。一種方式是通過“智能標(biāo)記”下的“自動(dòng)套用格式”菜單,這種方式簡(jiǎn)單、直觀,可以直接在窗口上看到最終格式化的效果,如圖5-9所示。設(shè)置步驟如下:
①添加SqlDataSource控件,并配置數(shù)據(jù)源。②添加GridView控件,單擊“智能標(biāo)記”菜單,選擇數(shù)據(jù)源為SqlDataSource1。單擊自動(dòng)套用格式對(duì)話框中的“選擇方案”列表中合適的樣式,可以通過“預(yù)覽”部分查看所選擇格式的效果。
圖5-9設(shè)置GridView控件另一種方式是通過設(shè)置GridView控件不同部分的樣式屬性來自定義該控件的外觀。這些樣式包括一些基本的樣式,如BackColor、BorderStyle等。
3.自定義列
如果需對(duì)Gridview控件中每一列自定義格式,則需單擊“智能標(biāo)記”中的“編輯列”,彈出如圖5-10所示的對(duì)話框,這樣就可以對(duì)每列進(jìn)行詳細(xì)的設(shè)置了。
圖5-10GridView控件中自定義列表5-2GridView控件中的列
·綁定列:用于顯示數(shù)據(jù)源中一列的信息。對(duì)于要顯示的每個(gè)數(shù)據(jù)列,通常都對(duì)應(yīng)于一個(gè)綁定列,需要顯示幾個(gè)字段,就加入幾個(gè)綁定列。使用綁定列還可以設(shè)置相關(guān)屬性。例如,列標(biāo)頭和列腳注的文本、字體、顏色、列寬、數(shù)據(jù)格式以及列是否為只讀(當(dāng)行編輯模式時(shí),它是否會(huì)顯示可編輯控件)等。當(dāng)字段數(shù)固定時(shí)可選用綁定列。添加綁定列界面如圖5-11所示。
圖5-11自定義列屬性設(shè)置添加綁定列后,其HTML標(biāo)簽代碼如下:
<asp:BoundFieldDataField="sp_WareID"HeaderText="商品編號(hào)"
InsertVisible="False"ReadOnly="True"SortExpression="sp_WareID"/>
·復(fù)選框列:用于顯示布爾型數(shù)據(jù)字段的值。由于復(fù)選框只能顯示選定的或未選定的狀態(tài),因此,復(fù)選框列只能綁定到具有布爾型數(shù)據(jù)類型的字段。通過設(shè)置DataField屬性完成列的綁定,還可通過設(shè)置Text屬性為復(fù)選框添加標(biāo)題。添加復(fù)選框列后,其列標(biāo)簽代碼如下:
<asp:CheckBoxFieldDataField="sp_Checked"HeaderText="審核"
SortExpression="sp_Checked"/>
·超鏈接列:用于顯示各行中的鏈接。超鏈接的文本可以指定,也可以從數(shù)據(jù)列中導(dǎo)出鏈接文本。同樣,超鏈接的URL可以指定或者從數(shù)據(jù)源中獲取。例如,當(dāng)用GridView顯示商品列表時(shí),加超鏈接后,通過傳遞主鍵參數(shù),就可以在另外一個(gè)頁(yè)面上顯示商品的詳細(xì)信息。其HTML標(biāo)簽代碼如下:
<asp:HyperLinkFieldDataNavigateUrlFields="sp_WareID"
DataNavigateUrlFormatString="Details.aspx?spID={0}"
HeaderText="查看"Text="查看"/>
此超鏈接利用查詢字符串將sp_WareID的值傳遞到Details.aspx頁(yè)。
·圖像列:可以為所顯示的每個(gè)記錄顯示圖像。只需將圖像列綁定到包含圖像URL的數(shù)據(jù)源中的字段上,這可通過設(shè)置DataImageUrlField屬性完成??梢酝ㄟ^使用DataImageUrlFormatString屬性來設(shè)置URL值的格式。當(dāng)添加圖像列后,其對(duì)應(yīng)的HTML標(biāo)簽代碼如下:
<asp:ImageFieldDataImageUrlField="tp_ImagePath"HeaderText="商品圖片">
</asp:ImageField>
每個(gè)圖像還可以具有與之相關(guān)聯(lián)的備用文本,當(dāng)無(wú)法加載圖像或圖像不可用時(shí),將顯示此文本。
可以使用以下方法之一為所顯示的圖像指定備用文本:
①使用AlternateText屬性指定圖像的備用文本。
②使用DataAlternateTextField屬性可將數(shù)據(jù)源中的字段綁定到每個(gè)圖像的AlternateText屬性。這可用于為每個(gè)顯示的圖像選擇不同的備用文本。綁定數(shù)據(jù)時(shí),還可以使用DataAlternateTextFormatString屬性格式化備用文本。
·按鈕列:可以創(chuàng)建“編輯”、“更新”、“取消”和“刪除”功能的按鈕。當(dāng)GridView處于編輯模式時(shí),“編輯”按鈕被替換為兩個(gè)按鈕:“更新”按鈕和“取消”按鈕。此功能適用于字段內(nèi)容不長(zhǎng)的數(shù)據(jù)維護(hù)。當(dāng)添加按鈕列后,其對(duì)應(yīng)的HTML標(biāo)簽代碼如下:
<asp:ButtonFieldButtonType="Link"CommandName="Update"
HeaderText="編輯"ShowHeader="True"Text="更新"/>
<asp:CommandFieldButtonType="Button"HeaderText="操作"
ShowDeleteButton="True"ShowEditButton="True"
ShowHeader="True"ShowSelectButton="True"/>
·模板列:在使用GridView顯示數(shù)據(jù)時(shí),對(duì)每列進(jìn)行單獨(dú)控制。例如,在校園在線超市系統(tǒng)中,當(dāng)顯示商品列表時(shí),除顯示商品的基本信息外,還需顯示商品所屬的分類,而分類數(shù)據(jù)存放于另外一張數(shù)據(jù)表中,這時(shí),希望通過TextBox控件來顯示每個(gè)商品的分類信息。使用GridView的模板列可以很方便地實(shí)現(xiàn)自定義列。下面闡述圖形界面對(duì)模板列進(jìn)行設(shè)計(jì)的過程:
①新增模板列。選擇GridView控件智能標(biāo)簽菜單的“編輯列”,系統(tǒng)顯示如圖5-10所示界面。在可用字段中,將出現(xiàn)TemplateField字段,單擊“添加”按鈕,在“選定的字段”列表中,將出現(xiàn)“TemplateField”字段,這時(shí)可在其對(duì)應(yīng)的屬性欄中設(shè)置相應(yīng)的屬性。
②對(duì)模板列進(jìn)行編輯和設(shè)計(jì)。在設(shè)計(jì)視圖中,選擇GridView的智能標(biāo)記菜單中的“編輯模板”項(xiàng),在系統(tǒng)顯示的“GridView”任務(wù)窗口中,選擇新增的模板列,系統(tǒng)將顯示如圖5-12所示的界面。
圖5-12GridView模板編輯表5-3GridView控件中的模板類型根據(jù)不同的模板,可以在模板容器中選擇不同的控件,然后進(jìn)行數(shù)據(jù)綁定設(shè)置。下面的代碼在ItemTemplate模板項(xiàng)中添加標(biāo)簽控件Label1,并將其綁定到商品類別的ID上:
<asp:TemplateFieldHeaderText="商品類別">
<ItemTemplate>
<asp:LabelID="Label1"runat="server"
Text='<%#Eval("splb_TypeID")%>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateField>上述代碼中,Eval方法可將控件綁定到數(shù)據(jù),當(dāng)用戶修改數(shù)據(jù)值時(shí),可以用Bind方法進(jìn)行數(shù)據(jù)綁定。
下面討論采用GridView控件顯示兩個(gè)數(shù)據(jù)表信息的方法。
【例5-2】使用GridView控件顯示商品記錄列表,并在GridView中添加一個(gè)模板列,用來顯示商品類別的名稱,如圖5-13所示。
圖5-13使用模板列在界面文件中綁定列和模板列的代碼如下:
<asp:GridViewID="GridView1"runat="server"AutoGenerateColumns="False"
DataSourceID="SqlDataSource1"BackColor="White"BorderColor="White"
BorderStyle="Ridge"BorderWidth="2px"CellPadding="3"CellSpacing="1"
GridLines="None"OnRowDataBound="GridView1_RowDataBound"Width="493px"
AllowPaging="True"PageSize="5">
<Columns>
<asp:BoundFieldDataField="sp_WareID"HeaderText="商品編號(hào)"
InsertVisible="False"ReadOnly="True"
SortExpression="sp_WareID"/>
<asp:BoundFieldDataField="sp_WareName"HeaderText="商品名稱"
SortExpression="sp_WareName"/>
<asp:BoundFieldDataField="sp_Price"HeaderText="單價(jià)"
SortExpression="sp_Price"/>
<asp:CheckBoxFieldDataField="sp_Checked"HeaderText="審核"
SortExpression="sp_Checked"/>
<asp:TemplateFieldHeaderText="商品類別">
<ItemTemplate>
<asp:LabelID="Label1"runat="server"Width="102px"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:SqlDataSourceID="SqlDataSource1"runat="server"ConnectionString=
"<%$ConnectionStrings:SMDBConnStr%>"
SelectCommand="SELECT[sp_WareID],[sp_WareName],[sp_Price],
[splb_TypeID],[sp_Checked]FROM[T_Ware]">
</asp:SqlDataSource>需要注意的是,GridView中記錄的每一行都有商品類別,這就要求通過商品類別編號(hào)(splb_TypeID)作為參數(shù),以獲取商品類別的名稱,并賦給模板列中的Label1。這需要對(duì)GridView控件的RowDataBound事件編寫代碼,該事件是在數(shù)據(jù)綁定時(shí)觸發(fā)的。代碼如下:
protectedvoidGridView1_RowDataBound(objectsender,GridViewRowEventArgse)
{if(e.Row.RowType==DataControlRowType.DataRow){
//獲取每一行的商品類別的ID
inttypeID=Convert.ToInt32(DataBinder.Eval(e.Row.DataItem,
"splb_TypeID"));
//獲取某商品類別ID的名稱
stringstr=TypeName(typeID);
//在GridView的行中查找名為“Label1”的控件
Labellbl=(Label)e.Row.FindControl("Label1");
lbl.Text=str;
}}下面的TypeName方法用來讀出指定商品類別編號(hào)(splb_TypeID)的商品所對(duì)應(yīng)的商品名稱:
protectedstringTypeName(inttypeID){
strings="";
stringstr="selectsplb_TypeNamefromT_WareTypewhere
splb_typeid="+typeID;
SqlConnectionstringstrconn=
ConfigurationManager.ConnectionStrings["SMDBConnStr"].ConnectionString;
conn=newSqlConnection(strconn);
conn.Open();
SqlCommandcmd=newSqlCommand(str,conn);
SqlDataReadersdr=cmd.ExecuteReader();
if(sdr.Read()){
s=sdr["splb_TypeName"].ToString();
}conn.Close();
returns;
}
4.分頁(yè)
ASP.NET2.0中的GridView控件內(nèi)置分頁(yè),可以使用默認(rèn)分頁(yè)用戶界面和創(chuàng)建自定義的分頁(yè)界面。
使用GridView控件的界面方式可以很方便地實(shí)現(xiàn)分頁(yè)。在VS2005中的設(shè)計(jì)視圖中,單擊GridView的“智能標(biāo)記”菜單的“啟用分頁(yè)”項(xiàng),就可以實(shí)現(xiàn)自動(dòng)分頁(yè),如圖5-14所示。
圖5-14啟用GridView控件分頁(yè)也可以通過編程方式將GridView控件的AllowPaging屬性設(shè)置為True,并通過PageSize屬性來設(shè)置頁(yè)的大小,還可通過設(shè)置PageIndex屬性設(shè)置GridView控件的當(dāng)前頁(yè)。使用PagerSettings屬性進(jìn)行分頁(yè)的UI設(shè)計(jì),常用的模式如表5-4所示。表5-4GridView控件的分頁(yè)模式界面方式設(shè)置控件的PagerSettings屬性對(duì)應(yīng)的HTML標(biāo)簽代碼如下:
<PagerSettingsFirstPageText="首頁(yè)"LastPageText="末頁(yè)"Mode=
"NextPreviousFirstLast"NextPageText="下一頁(yè)"PreviousPageText="上一頁(yè)"/>
用戶也可以通過程序代碼設(shè)置PagerSettings的Mode屬性來自定義分頁(yè)模式,如:
GridView1.PagerSettings.Mode=PagerButtons.NextPrevious;
GridView1.PagerSettings.NextPageText="下一頁(yè)";
GridView1.PagerSettings.PreviousPageText="上一頁(yè)";
5.排序
像分頁(yè)一樣,可以像啟用分頁(yè)功能一樣啟用GridView控件的排序功能,也可以通過編程的方式將AllowSorting屬性設(shè)置為true來啟用排序。
啟用排序功能后,GridView控件將LinkButton控件呈現(xiàn)在列標(biāo)題中。同時(shí),該控件還將每一列的SortExpression屬性隱式設(shè)置為它所綁定的數(shù)據(jù)字段的名稱。例如,例5-2中GridView顯示的第一列為“商品編號(hào)”列,則該列的SortExpression屬性將被自動(dòng)設(shè)置為sp_WareID。當(dāng)在瀏覽器中查看時(shí),用戶可以單擊列標(biāo)題中的LinkButton控件,使之按該列排序。任務(wù)實(shí)現(xiàn)
步驟1新建名為WareList.aspx的頁(yè)面,并為該頁(yè)面選擇名為MasterPage.master的母版頁(yè)。在Content項(xiàng)內(nèi)添加所需控件,如圖5-15所示;設(shè)置各控件相應(yīng)的屬性,如表5-5所示。
圖5-15商品信息查詢界面設(shè)計(jì)表5-5界面控件設(shè)置步驟2為SqlDataSource1數(shù)據(jù)源控件配置鏈接字符串,代碼如下:
<asp:SqlDataSourceID="SqlDataSource1"runat="server"ConnectionString="<%$
ConnectionStrings:SMDBConnStr%>">
</asp:SqlDataSource>步驟3為頁(yè)面裝載事件Page_Load添加如下代碼,將商品類別的名稱綁定到ddlWareType下拉列表控件,并設(shè)定grdWareList控件的數(shù)據(jù)源:
protectedvoidPage_Load(objectsender,EventArgse){
if(!IsPostBack){
stringconnstr=
ConfigurationManager.ConnectionStrings["SMDBConnStr"].ConnectionString;
SqlConnectionsqlConn=newSqlConnection(connstr);
sqlConn.Open();
stringstr="selectsplb_TypeNamefromT_WareType";
SqlCommandcmd=newSqlCommand(str,sqlConn);
SqlDataReaderdr=cmd.ExecuteReader();
while(dr.Read()){
ddlWareType.Items.Add(dr["splb_TypeName"].ToString());
}
grdWareList.DataSourceID="SqlDataSource1";
}}步驟4為btnSelect按鈕添加單擊事件,實(shí)現(xiàn)查詢指定的商品名稱或商品類別的功能,查詢得到的數(shù)據(jù)動(dòng)態(tài)地綁定到grdWareList控件。由于界面設(shè)計(jì)中已將grdWareList控件與數(shù)據(jù)源SqlDataSource1控件綁定,因此要將查詢結(jié)果綁定到grdWareList控件上,則先要將其綁定設(shè)置清空,再重新綁定。
protectedvoidbtnSelect_Click(objectsender,EventArgse){
stringconnstr=
ConfigurationManager.ConnectionStrings["SMDBConnStr"].ConnectionString;
SqlConnectionsqlConn=newSqlConnection(connstr);
sqlConn.Open();
stringstr="SELECTsp_WareName,sp_AllSum,sp_SellSum,
sp_Price,sp_Information,splb_TypeName";
str=str+"FROMT_WareaJOINT_WareTypeb
ONa.splb_TypeID=b.splb_TypeIDwhere";
str=str+"b.splb_TypeName='"
+ddlWareType.SelectedValue.ToString().Trim()+"'";
if(txtWareName.Text!=""){
str=str+"anda.sp_WareNamelike'"+"%"
+txtWareName.Text.Trim()+"%'";
}
//清除grdWareList控件的數(shù)據(jù)綁定
this.grdWareList.DataSourceID=null;
//設(shè)置SqlDataSource1控件的查詢字符串
SqlDataSource1.SelectCommand=str;
//重新綁定grdWareList控件的數(shù)據(jù)源
grdWareList.DataSourceID="SqlDataSource1";
}
步驟5瀏覽“WareList.aspx”頁(yè)面,查看其運(yùn)行效果。
任務(wù)描述
校園在線超市作為信息交易平臺(tái),每一位注冊(cè)會(huì)員都可以發(fā)布商品信息,并能對(duì)所發(fā)布的商品進(jìn)行管理,因此,要求為會(huì)員提供商品添加、刪除、修改等功能,并將相應(yīng)信息保存到數(shù)據(jù)庫(kù)中。5.2【任務(wù)11】商品信息的添加、修改和刪除
必備知識(shí)
知識(shí)1DataSet對(duì)象和DataAdapter對(duì)象
1.DataSet對(duì)象
DataSet對(duì)象即數(shù)據(jù)集對(duì)象。.NET的數(shù)據(jù)提供程序提供數(shù)據(jù)源和DataSet之間的連接,由于DataSet不依賴于數(shù)據(jù)源,因此這種數(shù)據(jù)訪問模式也稱為斷開連接模式。在ADO.NET中,DataSet用于在斷開式連接環(huán)境中存儲(chǔ)從數(shù)據(jù)源中收集的數(shù)據(jù)。DataSet對(duì)象是數(shù)據(jù)的一種內(nèi)存駐留表示形式,無(wú)論包含的數(shù)據(jù)來自什么數(shù)據(jù)源,它都會(huì)提供一致的關(guān)系編程模型。
DataSet對(duì)象把數(shù)據(jù)存儲(chǔ)在一個(gè)或多個(gè)DataTable中。每個(gè)DataTable可由來自惟一數(shù)據(jù)源中的數(shù)據(jù)組成。DataSet具備存儲(chǔ)多個(gè)表數(shù)據(jù)以及表間關(guān)系的能力,而每一個(gè)DataTable又包含了DataRow和DataColumn,分別存放表中行和列的數(shù)據(jù)信息,因此對(duì)數(shù)據(jù)集的操作主要是對(duì)DataSet包含的表中的行或列的操作,與直接對(duì)數(shù)據(jù)庫(kù)的操作一致。此外,DataSet對(duì)象中數(shù)據(jù)完全采用XML格式,因此,XML文檔可以導(dǎo)入DataSet對(duì)象,而DataSet對(duì)象中的數(shù)據(jù)也可以導(dǎo)出為XML文檔。也就是說,DataSet對(duì)象和XML文檔是可以互換的,這樣就使得跨平臺(tái)的數(shù)據(jù)訪問成為可能,也使得DataSet對(duì)象可以作為Web服務(wù)或者是其他類型遠(yuǎn)程調(diào)用的返回值。圖5-16所示給出了與DataSet類相關(guān)的主要類及它們間的關(guān)系。
圖5-16與DataSet類相關(guān)聯(lián)的主要類
2.DataAdapter對(duì)象
DataAdapter對(duì)象是DataSet和ADO.NET對(duì)象模型中斷開式連接對(duì)象之間的橋梁。該對(duì)象使用Connection對(duì)象與數(shù)據(jù)庫(kù)連接,然后使用Command和DataReader對(duì)象來獲取數(shù)據(jù)和處理數(shù)據(jù)庫(kù)的變化。
DataAdapter對(duì)象有很多屬性,這些屬性是包含SQL語(yǔ)句的SqlCommand和OleDbCommand對(duì)象。
DataAdapter對(duì)象有如下四個(gè)Command-type屬性:
·SelectCommand:這個(gè)屬性發(fā)布一個(gè)SQLSelect語(yǔ)句。
·UpdateCommand:這個(gè)屬性發(fā)布一個(gè)SQLUpdate語(yǔ)句。
·InsertCommand:這個(gè)屬性發(fā)布一個(gè)SQLInsert語(yǔ)句。
·DeleteCommand:這個(gè)屬性發(fā)布一個(gè)SQLDelete語(yǔ)句。
如果數(shù)據(jù)來自于單一的表,則可以使用CommandBuilder對(duì)象自動(dòng)生成DataAdapter的UpdateCommand、InsertCommand和DeleteCommand屬性,使用此對(duì)象可以節(jié)省開發(fā)
時(shí)間。另外,DataAdapter對(duì)象的Fill方法用于填充數(shù)據(jù)集,而Update方法用于更新數(shù)據(jù)庫(kù)。
3.填充數(shù)據(jù)集
填充DataSet時(shí),DataAdapter將查詢的結(jié)果存儲(chǔ)在DataSet的DataTable對(duì)象中,當(dāng)執(zhí)行這一過程時(shí),DataAdapter使用一個(gè)SelectCommand來與數(shù)據(jù)庫(kù)通信,并在內(nèi)部使用DataReader來獲取查詢結(jié)果,最后才將結(jié)果復(fù)制到DataSet中的表中,這就是數(shù)據(jù)填充的過程。具體操作時(shí),只要調(diào)用其Fill方法即可。
從上述可知,DataAdapter填充DataSet的過程主要分為兩個(gè)步驟:
·通過DataAdapter的SelectCommand屬性從數(shù)據(jù)庫(kù)中檢索出所需數(shù)據(jù)。
·調(diào)用DataAdapter的Fill方法把檢索出的數(shù)據(jù)填充到DataSet中。
填充數(shù)據(jù)集代碼如下:
stringconnstr=
ConfigurationManager.ConnectionStrings["SMDBConnStr"].ConnectionString;
SqlConnectionsqlConn=newSqlConnection(connstr);
sqlConn.Open();
stringstr="SELECT*FROMT_WareType"
SqlDataAdapterda=newSqlDataAdapter(str,sqlConn);
DataSetds=newDataSet();
da.Fill(ds,"splb");這時(shí),DataSet中的表可以直接作為數(shù)據(jù)控件的數(shù)據(jù)源,只需設(shè)置數(shù)據(jù)源控件的DataSource屬性,再調(diào)用DataBind方法就可以將控件與數(shù)據(jù)聯(lián)系起來。例如,將商品信息用上節(jié)講到的GridView控件關(guān)聯(lián)起來,實(shí)現(xiàn)的代碼如下:
GridView1.DataSource=ds.Tables["splb"].DefaultView;
GridView1.DataBind();
4.使用DataSet對(duì)數(shù)據(jù)源中的記錄進(jìn)行編輯
利用DataSet對(duì)數(shù)據(jù)源中的記錄進(jìn)行編輯的主要步驟是:將數(shù)據(jù)源中的有關(guān)內(nèi)容寫入內(nèi)存數(shù)據(jù)庫(kù);更改內(nèi)存數(shù)據(jù)庫(kù)中的內(nèi)容;更改完成后,調(diào)用DataAdapter對(duì)象的Update方法,并根據(jù)DataSet內(nèi)的數(shù)據(jù)更新情況,分別應(yīng)用于InsertCommand、UpdateCommadn、DeleteCommand屬性的Command命令,以將數(shù)據(jù)寫回?cái)?shù)據(jù)庫(kù)。怎樣設(shè)置用于更新數(shù)據(jù)源的SQL語(yǔ)句及參數(shù)呢?我們可以使用CommandBuilder對(duì)象,系統(tǒng)可根據(jù)內(nèi)存數(shù)據(jù)表自建立以來的變化情況,自動(dòng)生成UpdateCommand、DeleteCommand和InsertCommand屬性,并提供相應(yīng)的單一命令的方法,它會(huì)自動(dòng)協(xié)調(diào)DataSet,通過DataAdapter對(duì)象對(duì)后臺(tái)數(shù)據(jù)庫(kù)更新。只需添加如下代碼行:
SqlCommandBuilderscmd=newSqlCommandBuilder(da);
1)添加記錄
添加新記錄需要?jiǎng)?chuàng)建數(shù)據(jù)表中的新行,再使用添加行的方法。
DataTabledt=ds.Tables["splb"];
DataRowrow=dt.NewRow();
row["splb_TypeName"]=TextBox1.Text;
dt.Rows.Add(row);
da.Update(ds,"splb");
2)更新記錄
更新記錄前首先應(yīng)取得更新行。在創(chuàng)建DataRow對(duì)象的實(shí)例時(shí),與添加新記錄是不一樣的。
stringstr="SELECT*FROMT_WareTypewheresplb_TypeID="+spID;
DataTabledt=ds.Tables["splb"];
DataRowrow=dt.Rows[0];
row["splb_TypeName"]=TextBox1.Text;
da.Update(ds,"splb");
3)刪除記錄
刪除記錄同樣要先獲取刪除行的記錄,再調(diào)用行的Delete方法。
stringstr="SELECT*FROMT_WareTypewheresplb_TypeID="+spID;
DataTabledt=ds.Tables["splb"];
DataRowrow=dt.Rows[0];
row.Delete();
da.Update(ds,"splb");從上面可知,使用DataSet和CommandBuilder對(duì)象對(duì)數(shù)據(jù)庫(kù)操作的代碼非常簡(jiǎn)潔,只需通過row[″字段名″]即可讀取或設(shè)置字段值,沒有了冗長(zhǎng)的SQL語(yǔ)句和復(fù)雜的標(biāo)點(diǎn)符號(hào)。要注意的事,不論是更新、刪除還是添加操作,最后都必須調(diào)用Update方法,否則,DataSet中更新的數(shù)據(jù)不會(huì)寫回?cái)?shù)據(jù)庫(kù)中。此外,使用CommandBuilder對(duì)象時(shí),被更新的表中要有主鍵,否則會(huì)出現(xiàn)“對(duì)于不返回任何鍵列信息的SelectCommand不支持UpdateCommand的動(dòng)態(tài)SQL生成”的錯(cuò)誤信息。
知識(shí)2FileUpLoad控件和FormView控件
1.FileUpLoad控件
FileUpLoad控件是ASP.NET2.0新增控件,該控件使用戶更容易地瀏覽和選擇用于上傳的文件。它包含一個(gè)瀏覽按鈕和用于輸入文件名的文本框,用戶可以在文本框中輸入完整的文件路徑,或者通過按鈕瀏覽并選擇需要上傳的文件。其HTML標(biāo)簽代碼如下:
<asp:FileUploadID="FileUpload1"runat="server"/>
除從WebControl類繼承的標(biāo)準(zhǔn)成員外,F(xiàn)ileUpload控件還公開了幾個(gè)只讀的屬性,如表5-6所示。表5-6FileUpload控件的屬性其中HttpPostedFile類的屬性如表5-7所示。
表5-7HttpPostedFile類的屬性
FileUpload控件不會(huì)自動(dòng)上傳文件,必須設(shè)置相關(guān)的事件處理程序,并在程序中實(shí)現(xiàn)文件上傳。
FileUpload控件的SaveAs方法用于將上傳的文件保存到服務(wù)器上。一般來說,使用FileUpload控件上傳文件一般有如下幾個(gè)步驟:
·利用HasFile屬性判斷是否上傳了文件。
·在服務(wù)器上指定一個(gè)物理路徑,并檢查這個(gè)物理路徑是否存在,如果不存在則先創(chuàng)建。
·指定上傳文件在服務(wù)器上的上傳路徑,利用SaveAs()保存上傳的文件。這一步還可以做一些其他檢查工作,如檢查上傳的文件格式是否符合要求或文件內(nèi)容大小是否符合
要求。
·將相對(duì)路徑或者URL地址保存起來,以便客戶訪問或者下載。
【例5-3】FileUpLoad控件的使用。
在校園在線超市系統(tǒng)中,商品發(fā)布時(shí)都要上傳商品所對(duì)應(yīng)的圖片。本例實(shí)現(xiàn)的功能是通過FileUpLoad控件實(shí)現(xiàn)商品圖片的上傳,通過點(diǎn)擊上傳按鈕將指定的圖片保存在應(yīng)用程序的images目錄下,并在頁(yè)面中顯示上傳的圖片及相關(guān)信息,如圖5-17所示。
圖5-17FileUpLoad的使用實(shí)現(xiàn)代碼如下:
protectedvoidUpLoad_Click(objectsender,EventArgse){
boolfileValid=false;
//設(shè)置標(biāo)簽和圖像顯示控件的可見性
Label1.Visible=true;
Image1.Visible=true;
if(this.FileUpload1.HasFile){
//獲取指定路徑字符串的擴(kuò)展名
StringfileExtension=
Path.GetExtension(this.FileUpload1.FileName).ToLower();
//設(shè)置上傳文件的類型
String[]allowExtension={".gif",".jpg",".bmp",".png"};
for(inti=0;i<allowExtension.Length;i++){
if(fileExtension==allowExtension[i]){
fileValid=true;
}}
if(fileValid==true){
try{
//將上傳的文件保存到指定的路徑下
this.FileUpload1.SaveAs(Server.MapPath("~/Images/")
+FileUpload1.FileName);
this.Image1.ImageUrl="~/Images/"+FileUpload1.FileName;
this.Label1.Text="上傳文件成功";
this.Label1.Text+="<br/>";
//獲取上傳文件的相關(guān)信息
this.Label1.Text+="<li>"+"原文件路徑:"
+this.FileUpload1.PostedFile.FileName;
this.Label1.Text+="<br/>";
this.Label1.Text+="<li>"+"文件大?。?
+this.FileUpload1.PostedFile.ContentLength+"字節(jié)";
this.Label1.Text+="<br/>";
this.Label1.Text+="<li>"+"文件類型:"
+this.FileUpload1.PostedFile.ContentType;
}catch{
this.Label1.Text="文件上傳不成功";
}}
else{
this.Label1.Text="請(qǐng)上傳后綴為.gif,.jpg,.bmp,.png的文件";
}}}
2.FormView控件
可以使用FormView控件訪問和操作數(shù)據(jù)源的單個(gè)記錄,通常用于對(duì)記錄更新和插入。FormView控件不指定用于顯示記錄的預(yù)定義布局。實(shí)際上,可以創(chuàng)建一個(gè)包含控件的模板,以顯示記錄中的各個(gè)字段。該模板包含用于創(chuàng)建窗體的格式、控件和綁定表達(dá)式。
FormView控件的用法和GridView控件的用法非常類似,它支持的模板類型有EditItemTemplate、EmptyDataTemplate、FooterTemplate、HeaderTemplate、ItemTemplate、InsertItemTemplate和PagerTemplate。應(yīng)注意,這里沒有AlternatingItemTemplate模板(一條記錄自然就不會(huì)有什么奇偶行效果了)。
FormView控件支持以下功能:
·綁定到數(shù)據(jù)源控件,如SqlDataSource和ObjectDataSource。
·內(nèi)置插入功能。
·內(nèi)置更新和刪除功能。
·內(nèi)置分頁(yè)功能。
·動(dòng)態(tài)設(shè)置屬性、事件處理等。
·可通過用戶定義的模板、主題和樣式自定義外觀。
FormView控件一次只能顯示一條數(shù)據(jù),但是如果綁定的數(shù)據(jù)源有多條記錄,則默認(rèn)顯示第一條記錄;支持像GridView那樣分頁(yè)顯示數(shù)據(jù)源中的每條記錄。
<!--定義FormView控件,并允許分頁(yè)-->
<asp:FormViewID="FormView1"runat="server"DataKeyNames="sp_WareID"
DataSourceID="SqlDataSource1"Height="150px"Width="198px"
BackColor="Linen"AllowPaging="True">
<!--定義FormView的數(shù)據(jù)編輯模板-->
<EditItemTemplate>
sp_WareID:
<asp:LabelID="sp_WareIDLabel1"runat="server"Text='<%#
Eval("sp_WareID")%>'></asp:Label><br/>
sp_Information:
<asp:TextBoxID="sp_InformationTextBox"runat="server"Text='<%#
Bind("sp_Information")%>'>
</asp:TextBox><br/>
sp_Time:
<asp:TextBoxID="sp_TimeTextBox"runat="server"Text='<%#
Bind("sp_Time")%>'>
</asp:TextBox><br/>
sp_Price:
<asp:TextBoxID="sp_PriceTextBox"runat="server"Text='<%#
Bind("sp_Price")%>'>
</asp:TextBox><br/>
sp_WareName:
<asp:TextBoxID="sp_WareNameTextBox"runat="server"Text='<%#
Bind("sp_WareName")%>'>
</asp:TextBox><br/>
<!--定義命令按鈕-->
<asp:LinkButtonID="UpdateButton"runat="server"
CausesValidation="True"CommandName="Update"
Text="更新">
</asp:LinkButton>
<asp:LinkButtonID="UpdateCancelButton"runat="server"
CausesValidation="False"CommandName="Cancel"
Text="取消">
</asp:LinkButton>
</EditItemTemplate>
<!--定義FormView的數(shù)據(jù)插入模板-->
<InsertItemTemplate>
sp_Information:
<asp:TextBoxID="sp_InformationTextBox"runat="server"Text='<%#
Bind("sp_Information")%>'>
</asp:TextBox><br/>
sp_Time:
<asp:TextBoxID="sp_TimeTextBox"runat="server"Text='<%#
Bind("sp_Time")%>'>
</asp:TextBox><br/>
sp_Price:
<asp:TextBoxID="sp_PriceTextBox"runat="server"Text='<%#
Bind("sp_Price")%>'>
</asp:TextBox><br/>
sp_WareName:
<asp:TextBoxID="sp_WareNameTextBox"runat="server"Text='<%#
Bind("sp_WareName")%>'>
</asp:TextBox><br/>
<!--定義命令按鈕-->
<asp:LinkButtonID="InsertButton"runat="server"CausesValidation="True"
CommandName="Insert"
Text="插入">
</asp:LinkButton>
<asp:LinkButtonID="InsertCancelButton"runat="server"
CausesValidation="False"CommandName="Cancel"
Text="取消">
</asp:LinkButton>
</InsertItemTemplate>
<!--定義FormView的數(shù)據(jù)顯示模板-->
<ItemTemplate>
sp_WareID:
<asp:LabelID="sp_WareIDLabel"runat="server"Text='<%#
Eval("sp_WareID")%>'></asp:Label><br/>
sp_Information:
<asp:LabelID="sp_InformationLabel"runat="server"Text='<%#
Bind("sp_Information")%>'>
</asp:Label><br/>
sp_Time:
<asp:LabelID="sp_TimeLabel"runat="server"Text='<%#Bind("sp_Time")%>'>
</asp:Label><br/>
sp_Price:
<asp:LabelID="sp_PriceLabel"runat="server"Text='<%#Bind("sp_Price")%>'>
</asp:Label><br/>
sp_WareName:
<asp:LabelID="sp_WareNameLabel"runat="server"Text='<%#
Bind("sp_WareName")%>'>
</asp:Label><br/>
<!--定義命令按鈕-->
<asp:LinkButtonID="EditButton"runat="server"CausesValidation="False"
CommandName="Edit"
Text="編輯">
</asp:LinkButton>
<asp:LinkButtonID="DeleteButton"runat="server"
CausesValidation="False"CommandName="Delete"
Text="刪除">
</asp:LinkButton>
<asp:LinkButtonID="NewButton"runat="server"CausesValidation="False"
CommandName="New"
Text="新建">
</asp:LinkButton>
</ItemTemplate>
</asp:FormView>
<!--定義數(shù)據(jù)源控件-->
<asp:SqlDataSourceID="SqlDataSource1"runat="server"
ConflictDetection="CompareAllValues"
ConnectionString="<%$ConnectionStrings:SMDBConnStr%>"
DeleteCommand="DELETEFROM[T_Ware]WHERE[sp_WareID]=@original_sp_WareID
AND[sp_Price]=@original_sp_PriceAND[sp_WareName]=
@original_sp_WareNameAND[sp_Information]=@original_sp_Information"
InsertCommand="INSERTINTO[T_Ware]([sp_Price],[sp_WareName],[sp_Information])
VALUES(@sp_Price,@sp_WareName,@sp_Information)"
OldValuesParameterFormatString="original_{0}"
SelectCommand="SELECT[sp_WareID],[sp_Price],[sp_WareName],[sp_Information]FROM
[T_Ware]"
UpdateCommand="UPDATE[T_Ware]SET[sp_Price]=@sp_Price,[sp_WareName]=
@sp_WareName,[sp_Information]=@sp_InformationWHERE[sp_WareID]=
@original_sp_WareIDAND[sp_Price]=@original_sp_PriceAND
[sp_WareName]=@original_sp_WareNameAND[sp_Information]=
@original_sp_Information">
<DeleteParameters>
<asp:ParameterName="original_sp_WareID"Type="Int32"/>
<asp:ParameterName="original_sp_Price"Type="Double"/>
<asp:ParameterName="original_sp_WareName"Type="String"/>
<asp:ParameterName="original_sp_Information"Type="String"/>
</DeleteParameters>
<UpdateParameters>
<asp:ParameterName="sp_Pric
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度頂級(jí)舞蹈教練專業(yè)聘用合同3篇
- 2024年度汽車零部件代加工及銷售服務(wù)合同2篇
- 2024年度市場(chǎng)推廣續(xù)簽合同申請(qǐng)3篇
- 2024年度智慧城市水資源管理合同2篇
- 2024即開票展示柜銷售與服務(wù)合同
- 2024年度物業(yè)管理公司財(cái)務(wù)分析合同3篇
- 2024年交通規(guī)劃專家顧問服務(wù)協(xié)議范本3篇
- 2024版地下室場(chǎng)地租賃合同附租賃押金及退還規(guī)定3篇
- 2024年個(gè)人借款給公司合同包括借款用途及還款期限規(guī)定3篇
- 2024年標(biāo)準(zhǔn)物流服務(wù)合作合同范本版B版
- 《皇帝的新裝》課件
- 國(guó)家開放大學(xué)電大《基礎(chǔ)寫作》期末題庫(kù)及答案
- 勞動(dòng)教育五年級(jí)上冊(cè)北師大版 衣服破了我會(huì)補(bǔ)(教案)
- DB3502∕T 139-2024“無(wú)陪護(hù)”醫(yī)院服務(wù)規(guī)范通 用要求
- 期中模擬練習(xí)(試題)-2024-2025學(xué)年統(tǒng)編版語(yǔ)文二年級(jí)上冊(cè)
- 高職旅游專業(yè)《旅游心理學(xué)》說課稿
- 人教版九年級(jí)歷史下冊(cè)第10課-《凡爾賽條約》和《九國(guó)公約》(共31張課件)
- 2023年法律職業(yè)資格《客觀題卷一》真題及答案
- 教科版 三年級(jí)上冊(cè)科學(xué)知識(shí)點(diǎn)歸納梳理
- 2024年初級(jí)經(jīng)濟(jì)師考試經(jīng)濟(jì)基礎(chǔ)知識(shí)真題及答案
- 2024年人教版七年級(jí)英語(yǔ)(上冊(cè))期末考卷及答案(各版本)
評(píng)論
0/150
提交評(píng)論