计算单列总值的解决方案
coolite, gridpanel本帖最后由 一脸坏笑 于 2009-11-19 07:44 编辑
<%@ Page Language="C#" %><?xml:namespace prefix = o ns =
"urn:schemas-microsoft-com:office:office" />
<%@ Register Assembly="Coolite.Ext.Web"
Namespace="Coolite.Ext.Web" TagPrefix="ext" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object
sender, EventArgs e)
{
if (!Ext.IsAjaxRequest)
{
this.Store1.DataSource = new object[]
{
new object[] {"3m Co", 71.72, 11.72},
new object[] {"Alcoa Inc", 29.01, 21.72},
new object[]
{"Altria Group Inc", 83.81, 31.72},
new object[] {"American
Express Company", 52.55, 41.72},
new object[] {"American
International Group, Inc.", 64.13, 51.72}
};
this.Store1.DataBind();
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head
id="Head1" runat="server">
<title></title>
<script type="text/javascript">
var
initSummaryRecord = function() {
var r =
this.addRecord().record;
r.isSummary = true;
calculate(this, ['price', 'price1']);
}
var calculate = function(store, field) {
if
(Ext.isArray(field)) {
for (var i = 0; i < field.length;
i++) {
calculate(store, field[i]);
}
return;
}
var sum =
0,
summaryRecord;
store.each(function(r)
{
if (r.isSummary) {
summaryRecord =
r;
return;
}
sum +=
r.get(field);
});
summaryRecord.set(field, sum);
summaryRecord.commit();
}
var priceRenderer = function(value, meta, r)
{
var s = Ext.util.Format.usMoney(value);
if
(r.isSummary) {
s = "<b>" + s +
"</b>";
}
return s;
}
</script>
</head>
<body>
<form id="form1"
runat="server">
<ext:ScriptManager ID="ScriptManager1"
runat="server" />
<ext:Store ID="Store1" runat="server">
<Reader>
<ext:ArrayReader>
<Fields>
<ext:RecordField Name="company"
/>
<ext:RecordField Name="price" Type="Float"
/>
<ext:RecordField Name="price1" Type="Float"
/>
</Fields>
</ext:ArrayReader>
</Reader>
<Listeners>
<Load
Fn="initSummaryRecord" />
</Listeners>
</ext:Store>
<ext:GridPanel
ID="GridPanel1"
runat="server"
StoreID="Store1"
Title="Grid"
Width="600"
Height="350"
AutoExpandColumn="Company">
<ColumnModel ID="ColumnModel1"
runat="server">
<Columns>
<ext:Column ColumnID="Company" Header="Company" Sortable="true"
DataIndex="company" />
<ext:Column Header="Price"
Sortable="true" DataIndex="price">
<Renderer
Fn="priceRenderer" />
<Editor>
<ext:NumberField
ID="NumberField1" runat="server" />
</Editor>
</ext:Column>
<ext:Column Header="Price1" Sortable="true"
DataIndex="price1">
<Renderer
Fn="priceRenderer" />
<Editor>
<ext:NumberField
ID="NumberField2" runat="server" />
</Editor>
</ext:Column>
</Columns>
</ColumnModel>
<SelectionModel>
<ext:RowSelectionModel
ID="RowSelectionModel1" runat="server" SingleSelect="true" />
</SelectionModel>
<Listeners>
<BeforeEdit
Handler="return e.record.isSummary !== true;" />
<AfterEdit Handler="if(['price','price1'].indexOf(e.field) !==
-1){calculate(this.store,e.field);}" />
</Listeners>
</ext:GridPanel>
</form>
</body>
</html>