Wijmo 更优美的jQuery UI部件集:客户端更改C1GridView数据源

简介: 很多时候,我们在使用 GridView 展示数据时,希望最终用户可以编辑数据并且同步到数据源中。这是一项繁琐的工作。我们需要自定义模板列,并且在后台手动获取更新值,最后使用 SQL 语句同步到数据库中。

很多时候,我们在使用 GridView 展示数据时,希望最终用户可以编辑数据并且同步到数据源中。这是一项繁琐的工作。我们需要自定义模板列,并且在后台手动获取更新值,最后使用 SQL 语句同步到数据库中。 

但是,现在我们有了 C1 Wijmo GridView ,这些繁琐的工作都成为历史。C1GridView 仅仅通过一个属性-AllowClientEditing 便允用户在客户端编辑单元格内容。

需要编辑时,我们可以通过双击单元格使其进入编辑状态即可。完成编辑后,选择其它单元格去保存编辑值。 

这篇文章将叙述在不执行任何 PostBack 的情况下,如何轻而易举的更新数据库。 

1.定义数据库连接字符串并且绑定到 C1GridView

C1GridView 可以绑定 Oledb 数据源或 SQL 数据源。本文中,我们将使用 Oledb 数据源。请根据下面的代码设置 DataKeyNames 和 C1GridView 相关列。同时,我们需要设定 CallbackSettings 值为 editing ,这样在我们保存时,不会发生 Postback。

参考代码:

<wijmo:C1GridView ID="C1GridView1" runat="server"

AutogenerateColumns="false" DataKeyNames="CustomerID" ClientSelectionMode="SingleRow"

AllowClientEditing="true" ShowFilter="true"

OnEndRowUpdated="C1GridView1_EndRowUpdated">

<CallbackSettings Action="Editing, Filtering" />

<Columns>

<wijmo:C1BoundField DataField="CustomerID" HeaderText="CustomerID" SortExpression="CustomerID">

</wijmo:C1BoundField>

<wijmo:C1BoundField DataField="CompanyName" HeaderText="Company Name" SortExpression="CompanyName">

</wijmo:C1BoundField>

<wijmo:C1BoundField DataField="ContactName" HeaderText="Contact Name" SortExpression="ContactName">

</wijmo:C1BoundField>

<wijmo:C1BoundField DataField="City" HeaderText="City" SortExpression="City">

</wijmo:C1BoundField>

<wijmo:C1BoundField DataField="Country" HeaderText="Country" SortExpression="Country">

</wijmo:C1BoundField>

</Columns>

</wijmo:C1GridView>

 

2.下面,我们定义 Oledb 数据库连接字符串。因为需要将更改同步到数据库中,所以我们需要写 SQL 语句去同步数据源。

参考代码:

public DataTable GetDataTable()

{

DataTable dt = Page.Session["Customers"] as DataTable;

OleDbConnection con = new OleDbConnection("provider=Microsoft.Jet.Oledb.4.0; Data Source=" + Server.MapPath("~/App_Data/C1NWind.mdb"));

OleDbDataAdapter da = new OleDbDataAdapter();

da.SelectCommand = new OleDbCommand("SELECT * FROM [Customers] Order By [CustomerID]", con);

da.UpdateCommand = new OleDbCommand("Update [Customers] set [CompanyName]=?, [ContactName]=?, [City]=?, [Country]=? where CustomerID = ?", con);

da.UpdateCommand.Parameters.Add("@CompanyName", OleDbType.VarChar, 50, "CompanyName");

da.UpdateCommand.Parameters.Add("@ContactName", OleDbType.VarChar, 50, "ContactName");

da.UpdateCommand.Parameters.Add("@City", OleDbType.VarChar, 50, "City");

da.UpdateCommand.Parameters.Add("@Country", OleDbType.VarChar, 50, "Country");

da.UpdateCommand.Parameters.Add("@CustomerID", OleDbType.VarChar, 50, "CustomerID");

if (dt == null)

{

dt = new DataTable();

da.Fill(dt);

dt.PrimaryKey = new DataColumn[] { dt.Columns["CustomerID"] };

Page.Session["Customers"] = dt;

}

da.Update(dt);

return dt;

}

 

3.我们仅需在 RowUpdating 和 EndRowUpdated 事件中更新被编辑的行。在客户端使用 C1 Wijmo GridView 修改数据源。

protected void C1GridView1_RowUpdating(object sender, C1.Web.Wijmo.Controls.C1GridView.C1GridViewUpdateEventArgs e)

{

DataTable customers = GetDataTable();

DataRow row = customers.Rows.Find(C1GridView1.DataKeys[e.RowIndex].Value);

if (row != null)

{

foreach (DictionaryEntry entry in e.NewValues)

{

row[(string)entry.Key] = entry.Value;

}

}

else

{

throw new RowNotInTableException();

}

Page.Session["Customers"] = customers;

}

 

 在 EndRowUpdated 事件中重新绑定 C1GridView 数据源。

protected void C1GridView1_EndRowUpdated(object sender, C1.Web.Wijmo.Controls.C1GridView.C1GridViewEndRowUpdatedEventArgs e)

{

C1GridView1.DataSource = GetDataTable();

C1GridView1.DataBind();

}

1

 

不过,有时 C1GridView 中仅仅有一行数据(例如:执行了过滤操作)。用户编辑这一行,但是我们并没有其他行可以点击,从而无法保存更改。不要着急!

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

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

 

使用下面代码调用 Update() 方法:

function btn_ClientClick(sender, args)

{

var grid = $("#C1GridView1");

grid.c1gridview("endEdit");

grid.c1gridview("update");

}

 

 

好了,现在我们可以运行程序查看效果了。

2

Demo 下载:Sample_C1GridView_ClientSideUpdate.zip

Wijmo下载,请进入Studio for ASP.NET Wijmo 2012 v1正式发布(2012.03.22更新)!

相关文章
|
弹性计算 Kubernetes 开发者
利用容器化服务实现游戏服务器的动态资源配置
【8月更文第12天】在游戏行业中,用户基数的变化往往呈现出明显的波动性,特别是在推广活动期间,用户基数会显著增加,而在非推广期则会有所下降。为了应对这种变化,游戏开发者需要一种能够根据用户基数动态调整服务器资源的解决方案,以确保用户体验的同时最大限度地节省成本。容器化服务因其灵活的资源管理和成本控制能力,成为了理想的解决方案。
211 2
|
JavaScript 算法 API
Vue 3有哪些新特性
【8月更文挑战第16天】Vue 3有哪些新特性
882 1
|
安全 Java 数据安全/隐私保护
- 代码加密混淆工具-Java 编程安全性
在Java编程领域,保护代码安全与知识产权至关重要。本文探讨了代码加密混淆工具的重要性,并介绍了五款流行工具:ProGuard、DexGuard、Jscrambler、DashO 和 Ipa Guard。这些工具通过压缩、优化、混淆和加密等手段,提升代码安全性,保护知识产权。ProGuard 是开源工具,用于压缩和混淆Java代码;DexGuard 专为Android应用程序设计,提供强大加密功能;Jscrambler 基于云,保护Web和移动应用的JavaScript及HTML5代码;DashO 支持多种Java平台和
482 1
|
SQL Java 关系型数据库
JPA 之 QueryDSL-JPA 使用指南2
JPA 之 QueryDSL-JPA 使用指南2
1354 1
|
算法 Linux 开发工具
LabVIEW编程开发NI-USRP
LabVIEW编程开发NI-USRP
208 0
|
12月前
|
设计模式 JavaScript 前端开发
浅谈JavaScript 框架在现代 Web 开发中的作用
浅谈JavaScript 框架在现代 Web 开发中的作用
118 12
|
前端开发 UED 开发者
无障碍设计的魔法:JSF让每个用户都能畅游数字世界!
【8月更文挑战第31天】本文介绍如何使用JavaServer Faces (JSF)构建无障碍Web应用,确保所有用户都能访问和使用。文章通过实际代码示例展示了如何利用ARIA属性增强组件、实现键盘导航、提供文本替代以及使用语义化标签等技术。无障碍设计不仅是道德责任,也是提升用户体验的关键。通过这些方法,JSF可以帮助开发者创建更加公平和包容的应用。
114 0
|
前端开发 开发者
TS7031: Binding element ‘role‘ implicitly has an ‘any‘ type.
TS7031: Binding element ‘role‘ implicitly has an ‘any‘ type.
151 1
|
测试技术 API
API接口的测试步骤和返回数据展示
接口测试是软件测试中的一个重要环节,主要是为了验证软件的接口是否符合需求规范,是否能够正常地被调用。
213 0
|
SQL Java 数据库连接
MyBatis中使用#和$书写占位符有什么区别?
将传入的数据都当成一个字符串,会对传入的数据自动加上引号;将传入的数据直接显示生成在SQL中。注意:使用占位符可能会导致SQL注射攻击,能用#的地方就不要使用,写order by子句的时候应该用而不是#。
1383 0