關於DataGrid Web控件的熱門問題__連載之五 - 中國WEB開發者網絡 (http://www.webasp.net) -- 技術教程 (http://www.webasp.net/article/) --- 關於DataGrid Web控件的熱門問題__連載之五 (http://www.webasp.net/article/18/17424.htm) |
| -- 作者:未知 -- 發佈日期: 2005-04-11 |
| 使用DataGrid控件向數據源增加一條記錄 DataGrid控件允許用戶查看和編輯記錄,但內部不包含添加新記錄的便利,但是,可以採取不同的方法來添加這個功能。下面的方法包含了如下步驟: l 向DataGrid的數據源(DataSet or DataBase)增加一個新的、空的記錄,如果需要的話,還要為記錄指定一個ID並為每個不允許為空的列存入一個佔位的值。 l 重綁定DataGrid到數據源。 l 將DataGrid轉變為編輯模式,你需要能夠知道新記錄在DataGrid中顯示的位置。 l 使用普通的方式更新記錄——用戶單擊「Update」,然後將用戶提供的值作為新的記錄的值寫回到數據源。 下面是添加新記錄、綁定DataGrid,以及將其轉化為編輯模式的例子。該例中的數據 源是一個DataSet(dsBook1),它包含了一個Books表。 private void btnAddRow_Click(object sender, System.EventArgs e) { DataRow dr = this.dsBooks1.Books.NewRow(); dr["title"] = "(New)"; dr["instock"] = true; this.dsBooks1.Books.Rows.InsertAt(dr, 0); Session["DsBooks"] = dsBooks1; DataGrid1.EditItemIndex = 0; DataGrid1.DataBind(); } 需要注意的一些問題: l 當用戶點擊也面中的某個「Add」按鈕時,這些代碼就被執行。 l 新行通過NewRow()方法生成,然後通過InsertAt()方法插入到DataSet中的表,該方法允許將該行設定到一個具體的預先確定的位置——在這個例子中,它是表中的第一條記錄(也就是Rows集合中的第一行)。換種方式,你也可以通過設置行的數目值將其插入表尾。重要的是,要確切知道該行在表中的位置。 l 由於現在你已經知道該行在表中的第一個位置上,你可以通過將DataGrid的編輯項索引設為0,從而將新行設置為編輯模式(如果你在表中的其他位置創建了新行,你可以將編輯項索引設為那個位置的值)。 l 現在在數據集中已經有了一條新的記錄(但它還不是在數據庫中),如果你不想從數據庫重新填充DataGrid從而丟失新的記錄,就需要在提交—回傳的過程中保留一個該數據集的副本。例子中通過代碼將其保存在Session中,當頁加載時,需要重新從Session中加載數據集。下例是Page_Load()事件句柄的一種可能形式: private void Page_Load(object sender, System.EventArgs e) { if(this.IsPostBack) { dsBooks1 = (dsBooks) Session["DsBooks"]; } else { this.sqlDataAdapter1.Fill(this.dsBooks1); Session["DsBooks"] = dsBooks1; this.DataGrid1.DataBind(); } } (unfinished) |
| webasp.net |