使用 ASP+ DataGrid 控制項來建立主視圖/詳細資料視圖 (2)

來源:互聯網
上載者:User
asp+|datagrid|建立|控制項|視圖 Step6Page.cs:

namespace Samples {
...

public class Step6Page : Page {

// 更新當前選定的作者並重新載入與選定內容對應的書名
// 網格
protected void LoadTitlesGrid() {
UpdateSelection();
titlesGrid.DataBind();
}

// 處理書名網格中的 CancelCommand 事件,以
// 不施用更改就結束編輯
protected void OnCancelCommandTitlesGrid(object sender,
DataGridCommandEventArgs e) {
titlesGrid.EditItemIndex = -1;
LoadTitlesGrid();
}

// 處理書名網格中的 EditCommand 事件,以
// 開始編輯某一行
protected void OnEditCommandTitlesGrid(object sender,
DataGridCommandEventArgs e) {
titlesGrid.EditItemIndex = e.Item.ItemIndex;
LoadTitlesGrid();
}

// 處理書名網格中的 UpdateCommand 事件,以施用
// 所作的更改並結束編輯
protected void OnUpdateCommandTitlesGrid(object sender,
DataGridCommandEventArgs e) {
TextBox priceText =
(TextBox)e.Item.FindControl("Column3Control");
string newPrice = priceText.Text.Substring(1);

DataSet ds = GetSessionData();
DataTable titlesTable = ds.Tables["Title"];

string titleID =
(string)titlesGrid.DataKeys[e.Item.ItemIndex];
DataRow[] rows = titlesTable.Select("title_id = '" +
titleID + "'");
DataRow editRow = rows[0];

editRow.BeginEdit();
editRow["price"] = newPrice;
editRow.EndEdit();
editRow.AcceptChanges();
titlesGrid.EditItemIndex = -1;
LoadTitlesGrid();
}
}
}

EditCommand 事件是在單擊 Edit 按鈕時引發的。只需將 DataGrid 的 EditItemIndex 屬性設定為包含被單擊按鈕的項目的索引的屬性。要防止編輯某一個別行,不採取任何動作就返回。另外,要繼續進行編輯,就必須重新載入資料來源並調用 DataBind。這通過調用 LoadTitlesGrid 方法來完成。

您必須處理的第二個事件就是 CancelCommand 事件。這是單擊 Cancel 按鈕時引發的。實施十分類似於前一處理器。如想結束編輯,則只需將 EditItemIndex 屬性重設為 ?,並重新載入資料來源。如果需要維持行的編輯模式,則僅需不採取任何動作就從函數返回即可。

要處理的最後一個事件就是 UpdateCommand 事件,這是單擊 Update 按鈕時引發的。這裡是實際工作發生的地方。從存在於項目中的控制項抽取新的值,然後更新資料來源。一旦將新的值使用完畢,就將 EditItemIndex 重設為 ?,以返回到唯讀模式,並連同其資料來源一起重新載入控制項。對於前兩個事件,您可以不採取任何動作就從該函數返回,以保持該行的編輯模式狀態。

這一步又再次舉例說明控制項中實施的顯式資料繫結模型。在這一實施情形中,只在某行的狀態從唯讀模式更改為編輯模式或相反時才需要資料來源。注意, DataGrid 自身並不更新其資料來源。實質上,資料繫結是單向的。採用本模型的目的在於讓您擁有對資料來源更新的控制。在大多數典型的應用程式中,更新需要預先處理,並且是由業務對象或已儲存的過程來調用的。另外,單向資料繫結並不要求每個時間都有即時的資料來源。


--------------------------------------------------------------------------------


第 7 步: 使用模板

DataGrid 控制項通過使用 TemplateColumns,支援列內模板。可以完全自由地決定與這些列相關聯的儲存格的內容。這一步使用 TemplateColumn 來增強首先在前一步中實施的編輯支援。



圖 8. 完成第 7 步後的頁面

Titles DataGrid 來自:

Step7.aspx:

<asp:DataGrid id="titlesGrid" runat="server"
...>

<property name="Columns">
...
<asp:TemplateColumn HeaderText="Price">
<template name="ItemTemplate">
<asp:Label runat="server"
Text='<%# DataBinder.Eval(Container.DataItem, "price",
"{0:c}") %>'/>
</template>

<template name="EditItemTemplate">
<asp:RequiredFieldValidator runat="server"
ControlToValidate="priceText" Display="Dynamic">
<img src=http://www.163design.net/a/s/"Error.gif" height="16" width="16" title="Required"
align="absmiddle">
</asp:RequiredFieldValidator>
<asp:RegularExpressionValidator runat="server"
ControlToValidate="priceText" Display="Dynamic"
ValidationExpression="\$[0-9]+(\.[0-9][0-9]?)?">
<img src=http://www.163design.net/a/s/"Error.gif" height="16" width="16"
title="Invalid currency value"
align="absmiddle">
</asp:RegularExpressionValidator>
<asp:TextBox id="priceText" runat="server"
Text='<%# DataBinder.E



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.