C# 剑道网格单元编辑
我想手动编辑一个单元格,并根据输入的数据自动显示另一个单元格上的内容 例如: 如果数量发生变化,则应计算总量(价格*数量),并在“总量”列上显示结果C# 剑道网格单元编辑,c#,asp.net-mvc,kendo-ui,telerik,C#,Asp.net Mvc,Kendo Ui,Telerik,我想手动编辑一个单元格,并根据输入的数据自动显示另一个单元格上的内容 例如: 如果数量发生变化,则应计算总量(价格*数量),并在“总量”列上显示结果 可以使用剑道格网吗?感谢您的帮助。是的,这是可能的。如果你搜索“肯杜伊网格计算字段”,你可以在网上找到一些信息 解决方案取决于您选择的编辑模式类型(“内联”、“插入”或“弹出”)。由于我在您的网格中没有看到任何带有触发编辑按钮的列,因此我知道您正在编辑incell。然后,解决方案是截取save事件并以此计算字段 让您的数据源定义为: var ds
可以使用剑道格网吗?感谢您的帮助。是的,这是可能的。如果你搜索“肯杜伊网格计算字段”,你可以在网上找到一些信息 解决方案取决于您选择的编辑模式类型(“内联”、“插入”或“弹出”)。由于我在您的网格中没有看到任何带有触发编辑按钮的列,因此我知道您正在编辑
incell
。然后,解决方案是截取save
事件并以此计算字段
让您的数据源定义为:
var ds = {
data : [
{ Id: 1, ItemName: "Galaxy", Price: "25000", Qty: 2, Total: 50000 },
{ Id: 1, ItemName: "Lumia", Price: "18000", Qty: 1, Total: 18000 },
{ Id: 1, ItemName: "Experia", Price: "10000", Qty: 3, Total: 30000 }
],
schema : {
model: {
id : "Id",
fields: {
Id : { type: 'number' },
ItemName : { type: 'string' },
Price : { type: 'number' },
Qty : { type: 'number' },
Total : { type: 'number', editable: false }
}
}
}
};
那么你的网格应该是这样的:
var grid = $("#grid").kendoGrid({
dataSource: ds,
editable : "incell",
pageable : false,
columns :
[
{ field: "ItemName", title: "Item Name" },
{ field: "Price", title: "Price" },
{ field: "Qty", title: "Qty" },
{ field: "Total", title: "Total" }
]
}).data("kendoGrid");
您需要添加到网格
定义中的是save
事件处理程序,该处理程序使用e.values
(其中e
是save
接收的事件信息)检查哪个字段已更改,并计算新的总计
,然后使用模型上的set
方法进行设置
save : function (e) {
if (e.values && (e.values.Qty || e.values.Price)) {
var qty = e.values.Qty || e.model.Qty;
var price = e.values.Price || e.model.Price;
e.model.set("Total", price * qty);
}
}
这里的示例:如果您使用剑道MVC,则与使用剑道MVC的方式相同:
@(Html.Kendo().Grid<Model>()
.Columns(columns =>
{
columns.Bound(p => p.ItemName);
columns.Bound(p => p.Qty);
columns.Bound(p => p.Price);
columns.Bound(p => p.Total);
columns.Command(command =>
{
command.Edit();
})
})
.Editable(editable => editable.Mode(GridEditMode.InLine))
.DataSource(dataSource => dataSource
.Ajax()
.Model(model =>
{
model.Id(x => x.ExchangeRateId);
model.Field(x => x.Total).Editable(false);
})
.Read(read => read.Action("Read", "Products"))
.Update(update => update.Action("Update", "Products"))
)
)
@(Html.Kendo().Grid())
.列(列=>
{
columns.Bound(p=>p.ItemName);
绑定列(p=>p.Qty);
绑定列(p=>p.Price);
columns.Bound(p=>p.Total);
columns.Command(Command=>
{
command.Edit();
})
})
.Editable(可编辑=>Editable.Mode(GridEditMode.InLine))
.DataSource(DataSource=>DataSource
.Ajax()
.Model(Model=>
{
model.Id(x=>x.ExchangeRateId);
model.Field(x=>x.Total).可编辑(false);
})
.Read(Read=>Read.Action(“Read”,“Products”))
.Update(Update=>Update.Action(“更新”、“产品”))
)
)
在您的控制器中,如下所示:
public class Productscontroller {
public ActionResult Read([DataSourceRequest]DataSourceRequest request)
{
var products = proxy.GetProducts();
DataSourceResult result = products.ToDataSourceResult(request, ProductsModel => new ProductsModel()
{
id = products.id,
ItemName= products.ItemName,
Qty= products.Qty,
Price = products.Price,
total = products.Qty * products.Price
});
return Json(result, JsonRequestBehavior.AllowGet);
}
public ActionResult Update([DataSourceRequest]DataSourceRequest request, ProductsModel product)
{
var products = proxy.GetProductById(product.Id);
Proxy<Products>.Update(products);
}
}
公共类产品控制器{
公共操作结果读取([DataSourceRequest]DataSourceRequest请求)
{
var products=proxy.GetProducts();
DataSourceResult result=products.ToDataSourceResult(请求,ProductsModel=>newproductsModel()
{
id=products.id,
ItemName=products.ItemName,
数量=产品数量,
价格=产品。价格,
总计=产品数量*产品价格
});
返回Json(结果,JsonRequestBehavior.AllowGet);
}
公共操作结果更新([DataSourceRequest]DataSourceRequest请求,ProductsModel产品)
{
var products=proxy.GetProductById(product.Id);
代理更新(产品);
}
}
希望这有帮助