Wijmo 更優美的jQuery UI組件集:用戶端更改C1GridView資料來源

來源:互聯網
上載者:User

很多時候,我們在使用 GridView 展示資料時,希望終端使用者可以編輯資料並且同步到資料來源中。這是一項繁瑣的工作。我們需要自訂模板列,並且在後台手動擷取更新值,最後使用 SQL 陳述式同步到資料庫中。

 但是,現在我們有了 C1 Wijmo GridView ,這些繁瑣的工作都成為曆史。C1GridView 僅僅通過一個屬性-AllowClientEditing 便允使用者在用戶端編輯儲存格內容。

需要編輯時,我們可以通過雙擊儲存格使其進入編輯狀態即可。完成編輯後,選擇其它儲存格去儲存編輯值。

 這篇文章將敘述在不執行任何 PostBack 的情況下,如何輕而易舉更新資料庫。

 

1.定義資料庫連接字串並且綁定到 C1GridView

C1GridView 可以綁定 Oledb 資料來源或 SQL 資料來源。本文中,我們將使用 Oledb 資料來源。請根據下面的代碼設定 DataKeyNames 和 C1GridView 相關列。同時,我們需要設定 CallbackSettings 值為 editing ,這樣在我們儲存時,不會發生 Postback。

參考代碼:

 

 
  1. <wijmo:C1GridView ID="C1GridView1" runat="server" 
  2.  
  3. AutogenerateColumns="false" DataKeyNames="CustomerID" ClientSelectionMode="SingleRow" 
  4.  
  5. AllowClientEditing="true" ShowFilter="true" 
  6.  
  7. OnEndRowUpdated="C1GridView1_EndRowUpdated"> 
  8.  
  9. <CallbackSettings Action="Editing, Filtering" /> 
  10.  
  11. <Columns> 
  12.  
  13. <wijmo:C1BoundField DataField="CustomerID" HeaderText="CustomerID" SortExpression="CustomerID"> 
  14.  
  15. </wijmo:C1BoundField> 
  16.  
  17. <wijmo:C1BoundField DataField="CompanyName" HeaderText="Company Name" SortExpression="CompanyName"> 
  18.  
  19. </wijmo:C1BoundField> 
  20.  
  21. <wijmo:C1BoundField DataField="ContactName" HeaderText="Contact Name" SortExpression="ContactName"> 
  22.  
  23. </wijmo:C1BoundField> 
  24.  
  25. <wijmo:C1BoundField DataField="City" HeaderText="City" SortExpression="City"> 
  26.  
  27. </wijmo:C1BoundField> 
  28.  
  29. <wijmo:C1BoundField DataField="Country" HeaderText="Country" SortExpression="Country"> 
  30.  
  31. </wijmo:C1BoundField> 
  32.  
  33. </Columns> 
  34.  
  35. </wijmo:C1GridView> 

 

2.下面,我們定義 Oledb 資料庫連接字串。因為需要將更改同步到資料庫中,所以我們需要寫 SQL 陳述式去同步資料來源。

參考代碼:

 

 
  1. public DataTable GetDataTable() 
  2.  
  3.  
  4. DataTable dt = Page.Session["Customers"] as DataTable; 
  5.  
  6. OleDbConnection con = new OleDbConnection("provider=Microsoft.Jet.Oledb.4.0; Data Source=" + Server.MapPath("~/App_Data/C1NWind.mdb")); 
  7.  
  8. OleDbDataAdapter da = new OleDbDataAdapter(); 
  9.  
  10. da.SelectCommand = new OleDbCommand("SELECT * FROM [Customers] Order By [CustomerID]", con); 
  11.  
  12. da.UpdateCommand = new OleDbCommand("Update [Customers] set [CompanyName]=?, [ContactName]=?, [City]=?, [Country]=? where CustomerID = ?", con); 
  13.  
  14. da.UpdateCommand.Parameters.Add("@CompanyName", OleDbType.VarChar, 50, "CompanyName"); 
  15.  
  16. da.UpdateCommand.Parameters.Add("@ContactName", OleDbType.VarChar, 50, "ContactName"); 
  17.  
  18. da.UpdateCommand.Parameters.Add("@City", OleDbType.VarChar, 50, "City"); 
  19.  
  20. da.UpdateCommand.Parameters.Add("@Country", OleDbType.VarChar, 50, "Country"); 
  21.  
  22. da.UpdateCommand.Parameters.Add("@CustomerID", OleDbType.VarChar, 50, "CustomerID"); 
  23.  
  24. if (dt == null) 
  25.  
  26.  
  27. dt = new DataTable(); 
  28.  
  29. da.Fill(dt); 
  30.  
  31. dt.PrimaryKey = new DataColumn[] { dt.Columns["CustomerID"] }; 
  32.  
  33. Page.Session["Customers"] = dt; 
  34.  
  35.  
  36. da.Update(dt); 
  37.  
  38. return dt; 
  39.  

3.我們僅需在 RowUpdating 和 EndRowUpdated 事件中更新被編輯的行。在用戶端使用 C1 Wijmo GridView 修改資料來源。

 
  1. protected void C1GridView1_RowUpdating(object sender, C1.Web.Wijmo.Controls.C1GridView.C1GridViewUpdateEventArgs e) 
  2.  
  3.  
  4. DataTable customers = GetDataTable(); 
  5.  
  6. DataRow row = customers.Rows.Find(C1GridView1.DataKeys[e.RowIndex].Value); 
  7.  
  8. if (row != null) 
  9.  
  10.  
  11. foreach (DictionaryEntry entry in e.NewValues) 
  12.  
  13.  
  14. row[(string)entry.Key] = entry.Value; 
  15.  
  16.  
  17.  
  18. else 
  19.  
  20.  
  21. throw new RowNotInTableException(); 
  22.  
  23.  
  24. Page.Session["Customers"] = customers; 
  25.  

在 EndRowUpdated 事件中重新綁定 C1GridView 資料來源。

 

 
  1. protected void C1GridView1_EndRowUpdated(object sender, C1.Web.Wijmo.Controls.C1GridView.C1GridViewEndRowUpdatedEventArgs e) 
  2.  
  3.  
  4. C1GridView1.DataSource = GetDataTable(); 
  5.  
  6. C1GridView1.DataBind(); 
  7.  

650) this.width=650;" style="border-right- 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="1" border="0" alt="1" src="http://www.bkjia.com/uploads/allimg/131228/132220N63-0.png" width="296" height="164" />

 

不過,有時 C1GridView 中僅僅有一行資料例如:執行了過濾操作)。使用者編輯這一行,但是我們並沒有其他行可以點擊,從而無法儲存更改。不要著急!

我們只需要添加 button 去調用 C1GridView 的前台方法 Update即可。

 
  1. <asp:Button ID="btn1" runat="server" Text="Update C1GridView"OnClientClick="btn_ClientClick(); return false;" /> 

 

使用下面代碼調用 Update() 方法:

 

 
  1. function btn_ClientClick(sender, args) 
  2.  
  3.  
  4. var grid = $("#C1GridView1"); 
  5.  
  6. grid.c1gridview("endEdit"); 
  7.  
  8. grid.c1gridview("update"); 
  9.  

 

好了,現在我們可以運行程式查看效果了。

650) this.width=650;" style="border-right- 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2" border="0" alt="2" src="http://www.bkjia.com/uploads/allimg/131228/1322202956-1.png" width="595" height="325" />

Demo 下載:Sample_C1GridView_ClientSideUpdate.zip

Wijmo下載,請進入Studio for ASP.NET Wijmo 2012 v1正式發布2012.03.22更新)!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.