ASP.NET立即上手教程(10)_.Net教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:ASP.NET立即上手教程(9)
      服務器端數據介紹 數據訪問是現實世界中應用程序的核心內容。Asp.net提供了一套豐富的控件,他與CLR(通用語言運行庫)提供的用來管理數據訪問的APIs(應用程序接口)緊密結合。本章預排幾個

      在SQL數據庫中更新數據

      在web應用程序中更新數據庫常常是一件棘手的事情。DataGrid控件提供了一些內建的支持,使得更新數據庫變得容易。要想編輯行記錄,DataGrid支持一個整數類型的EditItemIndex屬性,他用來指明表格控件的哪一行是可編輯的。當設定該屬性之后,DataGrid中對應的行用輸入框來代替標簽。值-1表示沒有可編輯的行。Asp.net頁面可以在服務器端表單中包含DataGrid控件,通過DataGrid控件的對象模型來訪問可編輯的數據。

      為了判斷哪一行將被編輯,你需要接收一些用戶的輸入,以此來判斷他們將編輯哪一行。DataGrid可以包含EditCommandColumn屬性,它提供了一個連接,用以激活三個特定的事件:EditCommand、UpdateCommand、和CancelCommand。EditCommandColumn被加在DataGrid的列集合中,如下面的例子所示:

      以下為引用的內容:

      <ASP:DataGrid id="MyDataGrid" runat="server"
      ...
      OnEditCommand="MyDataGrid_Edit"
      OnCancelCommand="MyDataGrid_Cancel"
      OnUpdateCommand="MyDataGrid_Update"
      DataKeyField="au_id"
      >

      <Columns>
      <asp:EditCommandColumn EditText="Edit" CancelText="Cancel" UpdateText="Update" />
      </Columns>

      </ASP:DataGrid>

      在DataGrid標簽上,可以綁定每一個從EditCommandColumn激活的命令事件句柄。這些句柄的DataGridCommandEventArgs參數可以讓你直接訪問從客戶端選擇的可編輯行索引值。注意,為了使更改生效,你需要重新綁定DataGrid,像下面的例子這樣:

      以下為引用的內容:
      public void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs E) {
      MyDataGrid.EditItemIndex = (int)E.Item.ItemIndex;
      BindGrid();
      }

      當編輯DataGrid中的行的時候,EditCommandColumn提供了可供使用的兩個連接:Update 和 Cancel。如果客戶端選擇了cancel,你只需將EditItemIndex設置為-1。如果客戶端選擇了Update,你需要對數據庫執行你的更新命令。執行更新命令的時候,你需要知道被編輯行在數據庫中對應記錄的主鍵。為了支持這個功能,DataGrid提供了一個DataKeyField屬性,可以用來設置主鍵對應的字段。在綁定到UpdateCommand的事件句柄中,你可以從DataGrid的數據鍵集合取得鍵的名稱。你可以使用事件的ItemIndex來索引集合,像下面的例子:

      myCommand.Parameters["@Id"].Value = MyDataGrid.DataKeys[(int)E.Item.ItemIndex];


      在更新事件句柄結束以后,將EditItemIndex設置為-1。下面的例子演示了這種情況。

      前面的例子中有一個問題,那就是當編輯一行的時候,主鍵字段(au_id)也提供了一個文本輸入框。因為需要這個值來確定數據庫中的哪一行記錄被更新,所以你可能不希望客戶端改變這個值。幸運的是,你可以通過詳細指定每一個可編輯行的外觀,來禁止該列提供文本輸入框。具體方法是使用BoundColumn控件來分配每一列的數據字段,在DataGrid的列集合定義每一行。使用這種技術可以實現列的完全控制,當然也包括ReadOnly屬性。對于au_id列,你可以設置它的ReadOnly屬性為true。這樣,當一行處于編輯模式的時候,au_id列依然顯示為一個文本標簽,而不是文本輸入框。下面的例子演示了這種技術。

      BoundColumn控件并非DataGrid的列集合中可以設置屬性的唯一控件。你也可以指定TemplateColumn,它對列的內容提供了完全的控制。模板對內容的顯示更具有隨意性,你可以在DataGrid的列中提供你喜歡的任何控件,也包括服務器端控件。下面的例子演示了如何使用TemplateColumn,對"State"列使用下拉列表服務器控件,對"Contract"列使用復選框html控件。Asp.net數據綁定語法用于在模板中輸出數據字段的值。注意在編輯行中映射下拉列表和復選框到的state時候有一點小技巧。

      如同在TemplateColumn中放置下拉列表框或者復選框一樣,你也可以在其中放置其他控件。下面的例子中,添加了一個Validator驗證控件,在執行更新之前檢查客戶端的輸入。

      在SQL數據庫中刪除數據

      從數據庫中刪除記錄非常類似于更新或者插入命令,但是你依然需要確定表格中要刪除的特定行。可以添加到DataGrid列中的另一個控件是ButtonColumn,它僅僅提供了一個按鈕控件。ButtonColumn支持一個CommandName屬性,可以設置為“Delete”。在DataGrid上,當你執行刪除操作的時候,需要對DeleteCommand綁定一個事件句柄。此外,你需要使用數據鍵(DataKeys)集合來確定客戶端選定的行。下面的例子演示了這一過程:

      從SQL數據庫中排序

      對于任何表格來說,常常要求它對所包含的數據具有排序的能力。然而,DataGrid控件本身并不具有數據排序的功能。它通過用戶單擊要對數據排序的列標題,調用事件句柄。當DataGrid的 AllowSorting屬性被設置為true,DataGrid就為列標題提供了一個超鏈接,用以對表格激活Sort命令。你可以給DataGrid的OnSortCommand屬性設置句柄,來處理用戶的單擊。列的名字作為SortExpression 的屬性,傳遞給DataGridSortCommandEventArgs的參數。該參數可以用來設置綁定到表格的DataView的Sort屬性。請看下面的代碼和例子。

      以下為引用的內容:

      <script>
      protected void MyDataGrid_Sort(Object Src, DataGridSortCommandEventArgs E) {
      ...
      DataView Source = ds.Tables["Authors"].DefaultView;
      Source.Sort = E.SortExpression;
      MyDataGrid.DataBind();
      }
      </script>

      <form runat="server">
      <ASP:DataGrid id="MyDataGrid" OnSortCommand="MyDataGrid_Sort" AllowSorting="true" runat="server" />
      </form>

      當你使用BoundColumn控件的時候,可以明確地為每一列設置SortExpression屬性,就象下面的實例
      C# DataGrid12.aspx
      [運行] | [源代碼]
      運用主-從關系
      常常有這樣的情況:數據模型包含的關系不能僅僅通過一個表格來表現。很多時候,在基于web的界面中,用戶選擇數據中的某一行(通常是標題),然后重新定位到“細節”頁面(通常是內容),顯示用戶所選行的詳細信息。為了使用DataGrid來完成這個工作,需要添加HyperLinkColumn到列集合。HyperLinkColumn指定當用戶單擊超連接的時候將要重新定向的細節頁面。你可以在這個超鏈接中使用格式化字符串語法提交字段值,字段值作為get方式提交字符串的參數。下面的例子演示了這一過程。

      以下為引用的內容:
      <ASP:DataGrid id="MyDataGrid" runat="server">
      <Columns>
      <asp:HyperLinkColumn
      DataNavigateUrlField="au_id"
      DataNavigateUrlFormatString="datagrid13_details.aspx?id={0}"
      Text="Get Details"
      />
      </Columns>
      </ASP:DataGrid>

      在細節頁面中,可以取得提交字符串的參數,并且執行一個聯合(join)查詢語句,從數據庫中獲取詳細信息。參閱下面的例子:

      書寫和使用存儲過程

      一般來說,執行特定的查詢可以取得不同的執行性能。使用存儲過程可以降低應用程序中數據庫的負荷。存儲過程很容易創建,甚至可以使用SQL語句來創建。下面的代碼建立了一個簡單的返回一個表的存儲過程:

      以下為引用的內容:
      CREATE Procedure GetAuthors AS
      SELECT * FROM Authors
      return
      GO

      你也可以建立一個可以接受參數的存儲過程,例如:

      以下為引用的內容:
      CREATE Procedure LoadPersonalizationSettings (@UserId varchar(50)) AS
      SELECT * FROM Personalization WHERE UserID=@UserId
      return
      GO

      從ASP.NET頁面中使用存儲過程不過是SqlCommand對象的擴展。CommandText是用來代替特定查詢文本的存儲過程的名字。你可以通過設定CommandType的屬性來指定SqlCommand的CommandText為存儲過程。

      myCommand.SelectCommand.CommandType = CommandType.StoredProcedure;

      下面的例子演示了調用存儲過程來填充DataSet。

      分享:ASP.NET立即上手教程(7)
      Web Forms 用戶控件 用戶控件介紹 除了ASP.NET提供的內建的服務器控件外,你還可以使用已經掌握的制作WEB FORMS 頁面的技術,輕松的定義自己的控件。實際上,只需要稍微改動一下,幾乎任何W

      來源:模板無憂//所屬分類:.Net教程/更新時間:2008-08-22
      相關.Net教程