Spiga

一步步Ext.NET(二) Ext.NET实际应用

2011-12-01 00:38 by 龙宜坡, 1940 visits, 收藏, 编辑

自从上次发博以来已好长时间了,在这期间也认识了好多使用Ext.NET(extjs)的朋友,很多收获,今年大半时间在外,久违。

本文内容亦未详细整理,歉意,代码就是最好的内容。

这次直接来个以前项目中的实际页面给大家,相对此页面涉及的是Ext.NET日常用的最多的那些方面,还算是较为完整。

本文主要涉及有:

GridPanel相关各方面、Store、Window、FromPanel、ComboBox、RemoteValidation(后台验证)、Listeners、DirectEvents…

运行环境

.NET3.5Sp1、Ext.NET1.0

先看前端Default.aspx代码

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="ContractManager_Default" %>

<%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>合同管理</title>
    <script language="javascript" type="text/javascript" src="Default.js"></script>
    <style type="text/css">
        .x-grid3-cell-inner
        {
            font-family: "segoe ui" ,tahoma, arial, sans-serif;
        }
        .x-grid-group-hd div
        {
            font-family: "segoe ui" ,tahoma, arial, sans-serif;
        }
        .x-grid3-hd-inner
        {
            font-family: "segoe ui" ,tahoma, arial, sans-serif;
        }
        .x-grid3-body .x-grid3-td-Cost
        {
            background-color: #f1f2f4;
        }
        .x-grid3-summary-row .x-grid3-td-Cost
        {
            background-color: #e1e2e4;
        }
    </style>
</head>
<body>
    <form runat="server">
    <ext:ResourceManager ID="ResourceManager1" runat="server" ScriptMode="Debug" />
    <ext:Hidden runat="server" ID="hdnOldContractNo" />
    <ext:Hidden runat="server" ID="hdnOldId" />
    <ext:Store runat="server" AutoLoad="true" ID="storeMain" OnRefreshData="storeMainRefreshData"
        GroupField="Company">
        <Reader>
            <ext:JsonReader IDProperty="Id">
                <Fields>
                    <ext:RecordField Name="Id" Type="Int" />
                    <ext:RecordField Name="ContractNo" Type="String" />
                    <ext:RecordField Name="Goods" Type="String" />
                    <ext:RecordField Name="Flag" Type="String" />
                    <ext:RecordField Name="DealWeight" Type="Float" />
                    <ext:RecordField Name="Weight" Type="Float" />
                    <ext:RecordField Name="LastWeight" Type="Float" />
                    <ext:RecordField Name="UsableWeight" Type="Float" />
                    <ext:RecordField Name="Company" Type="String" />
                    <ext:RecordField Name="OperatTime" Type="Date" SortDir="DESC" />
                    <ext:RecordField Name="Operator" Type="String" />
                    <ext:RecordField Name="OperatSite" Type="String" />
                    <ext:RecordField Name="Operat" Type="String" />
                    <ext:RecordField Name="Flag" Type="String" />
                </Fields>
            </ext:JsonReader>
        </Reader>
        <SortInfo Direction="DESC" Field="OperatTime" />
        <Proxy>
            <ext:PageProxy />
        </Proxy>
    </ext:Store>
    <ext:Viewport ID="Viewport1" runat="server" Layout="Fit">
        <Items>
            <ext:GridPanel runat="server" Layout="Fit" Header="false" Frame="true" StoreID="storeMain"
                AutoExpandColumn="Company" AutoScroll="true" StripeRows="true" ID="gpMain" TrackMouseOver="true">
                <ColumnModel runat="server">
                    <Columns>
                        <ext:RowNumbererColumn Width="50" />
                        <ext:CommandColumn Width="48" Align="Center" Fixed="true">
                            <Commands>
                                <ext:GridCommand Icon="ApplicationEdit" ToolTip-Text="编辑" CommandName="Edit">
                                </ext:GridCommand>
                            </Commands>
                            <%--<PrepareToolbar Fn="prepareToolbar" />--%>
                        </ext:CommandColumn>
                        <ext:GroupingSummaryColumn ColumnID="ContractNo" DataIndex="ContractNo" Header="合同编号"
                            Hideable="false" Groupable="false" SummaryType="Count">
                            <SummaryRenderer Handler="return ((value === 0 || value > 1) ? '(' + value +' 项)' : '(1 项)');" />
                        </ext:GroupingSummaryColumn>
                        <ext:Column ColumnID="Goods" DataIndex="Goods" Header="货物名称" />
                        <%--<ext:Column ColumnID="Flag" DataIndex="Flag" Header="标记" />--%>
                        <ext:Column ColumnID="Company" DataIndex="Company" Header="收货单位" />
                        <ext:GroupingSummaryColumn ColumnID="Weight" DataIndex="Weight" Header="合同量" SummaryType="Sum" />
                        <ext:GroupingSummaryColumn ColumnID="UsableWeight" DataIndex="UsableWeight" Header="本期余量"
                            Groupable="false" SummaryType="Sum" />
                        <ext:Column ColumnID="DealWeight" DataIndex="DealWeight" Header="累积" Groupable="false" />
                        <ext:Column ColumnID="LastWeight" DataIndex="LastWeight" Header="上期余量" Groupable="false" />
                        <ext:Column ColumnID="Operator" DataIndex="Operator" Header="操作人" />
                        <ext:DateColumn ColumnID="OperatTime" DataIndex="OperatTime" Header="录入时间" Format="yyyy-MM-dd"
                            Groupable="true" />
                        <ext:Column ColumnID="OperatSite" DataIndex="OperatSite" Header="录入地址" />
                    </Columns>
                </ColumnModel>
                <DirectEvents>
                    <Command OnEvent="gpMainCommand">
                        <EventMask Msg="正在请求处理..." ShowMask="true" />
                        <ExtraParams>
                            <ext:Parameter Mode="Raw" Name="Id" Value="record.data.Id" />
                            <ext:Parameter Mode="Raw" Name="ContractNo" Value="record.data.ContractNo" />
                        </ExtraParams>
                    </Command>
                </DirectEvents>
                <BottomBar>
                    <ext:PagingToolbar runat="server" ID="pager" StoreID="storeMain" PageSize="15">
                        <Items>
                            <ext:ToolbarSeparator />
                            <ext:Button runat="server" ID="btnAdd" Icon="Add" Text="录入" ToolTip="新增合同">
                                <Listeners>
                                    <Click Handler="#{winAdd}.show();" />
                                </Listeners>
                            </ext:Button>
                            <ext:Button Hidden="true" runat="server" ID="btnDelete" Icon="Delete" Text="删除" ToolTip="删除合同信息"
                                Disabled="true">
                            </ext:Button>
                        </Items>
                    </ext:PagingToolbar>
                </BottomBar>
                <SelectionModel>
                    <ext:RowSelectionModel runat="server" SingleSelect="true" />
                </SelectionModel>
                <Plugins>
                    <ext:GridPanelMaintainScrollPositionOnRefresh runat="server" />
                    <ext:GroupingSummary runat="server">
                    </ext:GroupingSummary>
                    <ext:GridFilters runat="server" ID="gpMainFilter" Local="false" FiltersText="筛选条件">
                        <Filters>
                            <ext:StringFilter DataIndex="ContractNo" />
                            <ext:StringFilter DataIndex="Goods" />
                            <%--<ext:StringFilter DataIndex="Flag" />--%>
                            <ext:NumericFilter DataIndex="DealWeight" />
                            <ext:NumericFilter DataIndex="Weight" />
                            <ext:NumericFilter DataIndex="LastWeight" />
                            <ext:NumericFilter DataIndex="UsableWeight" />
                            <ext:StringFilter DataIndex="Company" />
                            <ext:DateFilter DataIndex="OperatTime" AfterText="后" BeforeText="前" OnText="指定" />
                            <ext:StringFilter DataIndex="Operator" />
                            <ext:StringFilter DataIndex="OperatSite" />
                            <ext:StringFilter DataIndex="Operat" />
                        </Filters>
                    </ext:GridFilters>
                </Plugins>
                <View>
                    <ext:GroupingView ID="GroupingView1" GroupByText="以此分组" ShowGroupsText="分组显示" runat="server"
                        ForceFit="true" MarkDirty="false" ShowGroupName="true" EnableNoGroups="true"
                        HideGroupedColumn="false" />
                </View>
            </ext:GridPanel>
        </Items>
    </ext:Viewport>
    <ext:Store runat="server" AutoLoad="true" ID="storeGoods" OnRefreshData="storeGoodsRefreshData"
        ShowWarningOnFailure="false">
        <Reader>
            <ext:JsonReader>
                <Fields>
                    <ext:RecordField Name="Goods" />
                </Fields>
            </ext:JsonReader>
        </Reader>
        <Proxy>
            <ext:PageProxy />
        </Proxy>
    </ext:Store>
    <ext:Store runat="server" AutoLoad="true" ID="storeCompany" OnRefreshData="storeCompanyRefreshData"
        ShowWarningOnFailure="false">
        <Reader>
            <ext:JsonReader>
                <Fields>
                    <ext:RecordField Name="Company" />
                </Fields>
            </ext:JsonReader>
        </Reader>
        <Proxy>
            <ext:PageProxy />
        </Proxy>
    </ext:Store>
    <ext:Window runat="server" AutoScroll="true" AnimateTarget="btnAdd" CloseAction="Hide"
        Hidden="true" Icon="Add" ID="winAdd" InitCenter="true" Modal="true" Title="录入合同信息"
        Width="400" Height="280" Layout="Form" MinWidth="400" MinHeight="280" Resizable="false"
        Frame="false" Collapsible="true">
        <Content>
            <ext:FormPanel runat="server" ID="frmAdd" Header="false" Frame="false" LabelWidth="60"
                MonitorValid="true" DefaultAnchor="-20" Border="false" BodyBorder="false" BodyStyle="background-color:#dfe8f6;"
                PaddingSummary="10">
                <Items>
                    <ext:TextField runat="server" FieldLabel="合同编号" ID="txtContractNo" AnchorHorizontal="95%"
                        AllowBlank="false" IsRemoteValidation="true">
                        <RemoteValidation OnValidation="txtContractNoValidation" BusyTip="验证中..." />
                    </ext:TextField>
                    <ext:ComboBox runat="server" ValueField="Company" DisplayField="Company" FieldLabel="收货单位"
                        ID="cmbCompany" AnchorHorizontal="95%" AllowBlank="false" MinChars="1" ForceSelection="false"
                        StoreID="storeCompany">
                        <Triggers>
                            <ext:FieldTrigger Icon="Clear" Qtip="清空" HideTrigger="true" />
                        </Triggers>
                        <Listeners>
                            <Change Fn="cmbCompanyChange" />
                            <Select Handler="this.triggers[0].show();" />
                            <BeforeQuery Handler="this.triggers[0][ this.getRawValue().toString().length == 0 ? 'hide' : 'show']();" />
                            <TriggerClick Handler="if (index == 0) { this.clearValue(); this.triggers[0].hide(); }" />
                        </Listeners>
                    </ext:ComboBox>
                    <ext:ComboBox runat="server" FieldLabel="货物名称" ID="cmbGoods" AnchorHorizontal="95%"
                        AllowBlank="false" ForceSelection="false" MinChars="1" DisplayField="Goods" ValueField="Goods"
                        StoreID="storeGoods">
                        <Triggers>
                            <ext:FieldTrigger Icon="Clear" Qtip="清空" HideTrigger="true" />
                        </Triggers>
                        <Listeners>
                            <Change Fn="cmbGoodsChange" />
                            <Select Handler="this.triggers[0].show();" />
                            <BeforeQuery Handler="this.triggers[0][ this.getRawValue().toString().length == 0 ? 'hide' : 'show']();" />
                            <TriggerClick Handler="if (index == 0) { this.clearValue(); this.triggers[0].hide(); }" />
                        </Listeners>
                    </ext:ComboBox>
                    <ext:NumberField runat="server" FieldLabel="合同量(Kg)" ID="numWeight" AnchorHorizontal="95%"
                        AllowNegative="false" MinValue="1" AllowBlank="false" AllowDecimals="false">
                    </ext:NumberField>
                    <%--<ext:RadioGroup runat="server" ID="chkFlag" FieldLabel="标记" AllowBlank="false">
                        <Items>
                            <ext:Radio runat="server" BoxLabel="南门" />
                            <ext:Radio runat="server" BoxLabel="北门" />
                        </Items>
                        <Listeners>
                            <Change Fn="chkFlagChange" />
                        </Listeners>
                    </ext:RadioGroup>--%>
                    <ext:Label runat="server" FieldLabel="上期累积" ID="lblDealWeight" AnchorHorizontal="100%" />
                    <ext:Label runat="server" FieldLabel="上期余量" ID="lblUsableWeight" AnchorHorizontal="100%" />
                </Items>
                <Listeners>
                    <ClientValidation Handler="#{btnAddOk}.setDisabled(!valid);" />
                </Listeners>
            </ext:FormPanel>
        </Content>
        <Buttons>
            <ext:Button runat="server" ID="btnAddOk" Text="确定" Disabled="true">
                <DirectEvents>
                    <Click OnEvent="btnAddOk_Click">
                        <Confirmation ConfirmRequest="true" Title="提示" Message="确认数据无误并保存吗?" />
                        <EventMask ShowMask="true" Msg="合同数据保存中..." />
                        <%--<ExtraParams>
                            <ext:Parameter Mode="Raw" Name="flag" Value="editRdoFlag.getValue().boxLabel" />
                        </ExtraParams>--%>
                    </Click>
                </DirectEvents>
            </ext:Button>
            <ext:Button runat="server" ID="btnAddCancel" Text="取消">
                <Listeners>
                    <Click Handler="#{winAdd}.hide();" />
                </Listeners>
            </ext:Button>
        </Buttons>
    </ext:Window>
    <ext:Window runat="server" AutoScroll="true" CloseAction="Hide" Hidden="true" Icon="ApplicationEdit"
        ID="winEdit" InitCenter="true" Modal="true" Title="编辑合同信息" Width="500" Height="320"
        Layout="Form" MinWidth="500" MinHeight="320" Resizable="true" Frame="false" Collapsible="true">
        <Content>
            <ext:FormPanel runat="server" ID="frmEdit" Header="false" Frame="false" LabelWidth="70"
                MonitorValid="true" DefaultAnchor="-20" Border="false" BodyBorder="false" BodyStyle="background-color:#dfe8f6;"
                PaddingSummary="10">
                <Items>
                    <ext:TextField runat="server" FieldLabel="合同编号" ID="editTxtContractNo" AnchorHorizontal="95%"
                        AllowBlank="false" IsRemoteValidation="true">
                        <RemoteValidation OnValidation="editTxtContractNoValidation" BusyTip="验证中...">
                            <ExtraParams>
                                <ext:Parameter Mode="Raw" Name="oldContractNo" Value="hdnOldContractNo.value" />
                            </ExtraParams>
                        </RemoteValidation>
                    </ext:TextField>
                    <ext:ComboBox runat="server" ValueField="Company" DisplayField="Company" FieldLabel="收货单位"
                        ID="editCmbCompany" AnchorHorizontal="95%" AllowBlank="false" MinChars="1" ForceSelection="false"
                        StoreID="storeCompany">
                        <Triggers>
                            <ext:FieldTrigger Icon="Clear" Qtip="清空" HideTrigger="true" />
                        </Triggers>
                        <Listeners>
                            <Select Handler="this.triggers[0].show();" />
                            <BeforeQuery Handler="this.triggers[0][ this.getRawValue().toString().length == 0 ? 'hide' : 'show']();" />
                            <TriggerClick Handler="if (index == 0) { this.clearValue(); this.triggers[0].hide(); }" />
                        </Listeners>
                    </ext:ComboBox>
                    <ext:ComboBox runat="server" FieldLabel="货物名称" ID="editCmbGoods" AnchorHorizontal="95%"
                        AllowBlank="false" ForceSelection="false" MinChars="1" DisplayField="Goods" ValueField="Goods"
                        StoreID="storeGoods">
                        <Triggers>
                            <ext:FieldTrigger Icon="Clear" Qtip="清空" HideTrigger="true" />
                        </Triggers>
                        <Listeners>
                            <Select Handler="this.triggers[0].show();" />
                            <BeforeQuery Handler="this.triggers[0][ this.getRawValue().toString().length == 0 ? 'hide' : 'show']();" />
                            <TriggerClick Handler="if (index == 0) { this.clearValue(); this.triggers[0].hide(); }" />
                        </Listeners>
                    </ext:ComboBox>
                    <ext:NumberField runat="server" FieldLabel="合同量(Kg)" ID="editNumWeight" AnchorHorizontal="95%"
                        AllowNegative="false" MinValue="0" AllowBlank="false" AllowDecimals="false">
                    </ext:NumberField>
                    <ext:NumberField runat="server" FieldLabel="本期余量" ID="editNumUsableWeight" AnchorHorizontal="95%"
                        AllowNegative="false" MinValue="0" AllowBlank="false" AllowDecimals="false">
                    </ext:NumberField>
                    <ext:NumberField runat="server" FieldLabel="累积" ID="editNumDealWeight" AnchorHorizontal="95%"
                        AllowNegative="false" MinValue="0" AllowBlank="false" AllowDecimals="false">
                    </ext:NumberField>
                    <ext:NumberField runat="server" FieldLabel="上期余量" ID="editNumLastWeight" AnchorHorizontal="95%"
                        AllowNegative="false" MinValue="0" AllowBlank="false" AllowDecimals="false">
                    </ext:NumberField>
                    <%--<ext:RadioGroup runat="server" ID="editRdoFlag" FieldLabel="标记" AllowBlank="false" AnchorHorizontal="95%">
                        <Items>
                            <ext:Radio ID="Radio1" runat="server" BoxLabel="南门" />
                            <ext:Radio ID="Radio2" runat="server" BoxLabel="北门" />
                        </Items>
                    </ext:RadioGroup>--%>
                </Items>
                <Listeners>
                    <ClientValidation Handler="#{btnEdit}.setDisabled(!valid);" />
                </Listeners>
            </ext:FormPanel>
        </Content>
        <Listeners>
            <Show Handler="#{editTxtContractNo}.remoteValidate();" />
        </Listeners>
        <Buttons>
            <ext:Button runat="server" ID="btnEdit" Text="保存修改" Disabled="false">
                <DirectEvents>
                    <Click OnEvent="btnEditOk_Click">
                        <Confirmation ConfirmRequest="true" Title="提示" Message="确认数据无误并保存吗?" />
                        <EventMask ShowMask="true" Msg="合同数据保存中..." />
                        <ExtraParams>
                            <ext:Parameter Mode="Raw" Name="oldId" Value="hdnOldId.getValue()" />
                            <ext:Parameter Mode="Raw" Name="oldContractNo" Value="hdnOldContractNo.value" />
                            <%--<ext:Parameter Mode="Raw" Name="flag" Value="editRdoFlag.getValue().boxLabel" />--%>
                        </ExtraParams>
                    </Click>
                </DirectEvents>
            </ext:Button>
            <ext:Button runat="server" ID="btnEditCancel" Text="取消">
                <Listeners>
                    <Click Handler="#{winEdit}.hide();" />
                </Listeners>
            </ext:Button>
        </Buttons>
    </ext:Window>
    </form>
</body>
</html>

前端Default.js代码部分

/// <reference name="Ext.Net.Build.Ext.Net.extjs.adapter.ext.ext-base.js" assembly="Ext.Net" />
/// <reference name="Ext.Net.Build.Ext.Net.extjs.adapter.ext.ext-base-debug.js" assembly="Ext.Net" />
/// <reference name="Ext.Net.Build.Ext.Net.extjs.ext-all-debug.js" assembly="Ext.Net" />
/// <reference name="Ext.Net.Build.Ext.Net.extjs.ext-all.js" assembly="Ext.Net" />

function cmbGoodsChange(sender, newValue, oldValue) {
    var goods = newValue;
    var company = cmbCompany.value;
    //var flag = chkFlag.getValue().boxLabel;
    if (goods && company && goods.trim().length > 0 && company.trim().length > 0) {
        Ext.net.DirectMethods.GetLastContract(goods, company, {
            success: function (model) {
                if (model != null && (model.DealWeight || model.UsableWeight)) {
                    lblDealWeight.setText(String(model.DealWeight));
                    lblUsableWeight.setText(String(model.UsableWeight));
                }
                else {
                    lblDealWeight.setText('0');
                    lblUsableWeight.setText('0');
                }
            }
        });
    }
}

function cmbCompanyChange(sender, newValue, oldValue) {
    var goods = cmbGoods.value;
    var company = newValue;
    //var flag = chkFlag.getValue().boxLabel;
    if (goods && company && goods.trim().length > 0 && company.trim().length > 0) {
        Ext.net.DirectMethods.GetLastContract(goods, company, {
            success: function (model) {
                if (model != null && (model.DealWeight || model.UsableWeight)) {
                    lblDealWeight.setText(String(model.DealWeight));
                    lblUsableWeight.setText(String(model.UsableWeight));
                }
                else {
                    lblDealWeight.setText('0');
                    lblUsableWeight.setText('0');
                }
            }
        });
    }
}

function chkFlagChange(sender, checkedRdo) {
    var goods = cmbGoods.value;
    var company = newValue;
    //var flag = chkFlag.getValue().boxLabel;
    if (goods && company && goods.trim().length > 0 && company.trim().length > 0) {
        Ext.net.DirectMethods.GetLastContract(goods, company, {
            success: function (model) {
                if (model != null && (model.DealWeight || model.UsableWeight)) {
                    lblDealWeight.setText(String(model.DealWeight));
                    lblUsableWeight.setText(String(model.UsableWeight));
                }
                else {
                    lblDealWeight.setText('0');
                    lblUsableWeight.setText('0');
                }
            }
        });
    }
}
function winEditShow() {
    btnEdit.setDisabled(!frmEdit.isValid());
}
//未调用
function prepareToolbar(grid, toolbar, rowIndex, record) {
    // for example hide 'Edit' button if price < 50
    if (record.get("UsableWeight") <= 0) {
        //hide separator
        toolbar.items.itemAt(0).hide();
        //hide edit button
        //toolbar.items.itemAt(2).hide();
    } else {
        //otherwise add another button
        toolbar.add(new Ext.Button({
            iconCls: "icon-accept",
            command: "accept"
        }));
    }
}
 

后端Default.aspx.cs代码

using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Text;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Ext.Net;
using Hollysys.Devices.BusinessEntities.Ping;
using Hollysys.Devices.BusinessLogic.Ping;
using ScaleWeight.Model;

public partial class ContractManager_Default : System.Web.UI.Page
{
    private string m_cookieName = ConfigurationManager.AppSettings["CookieUserName"];
    private string m_userName = String.Empty;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!String.IsNullOrEmpty(m_cookieName) && Request.Cookies[m_cookieName] != null)
        {
            m_userName = Request.Cookies[m_cookieName].Value;
        }
        else
        {
            m_userName = Request.UserHostName;
        }
    }

    protected void storeMainRefreshData(object sender, StoreRefreshDataEventArgs e)
    {
        int _pageSize = this.pager.PageSize;
        int _curPageIndex = e.Start / _pageSize + 1;

        string _where = String.Empty;
        string _orderBy = String.Empty;
        #region 查询条件
        StringBuilder _sbFilter = new StringBuilder();
        string _filters = e.Parameters[this.gpMainFilter.ParamPrefix];
        if (!String.IsNullOrEmpty(_filters))
        {
            FilterConditions fc = new FilterConditions(_filters);
            foreach (FilterCondition condition in fc.Conditions)
            {
                string field = condition.Name;

                switch (field)
                {
                    case "ContractNo":
                        _sbFilter.AppendFormat(" AND ContractNo LIKE '%{0}%' ", condition.Value);
                        break;
                    case "Goods":
                        _sbFilter.AppendFormat(" AND Goods LIKE '%{0}%' ", condition.Value);
                        break;
                    case "Company":
                        _sbFilter.AppendFormat(" AND Company LIKE '%{0}%' ", condition.Value);
                        break;
                    case "OperatSite":
                        _sbFilter.AppendFormat(" AND OperatSite LIKE '%{0}%' ", condition.Value);
                        break;
                    case "Operat":
                        _sbFilter.AppendFormat(" AND Operat LIKE '%{0}%' ", condition.Value);
                        break;
                    case "DealWeight":
                        double _delWeight = condition.ValueAsDouble;
                        switch (condition.Comparison)
                        {
                            case Comparison.Eq:
                                _sbFilter.AppendFormat(" AND DealWeight={0} ", _delWeight);
                                break;
                            case Comparison.Gt:
                                _sbFilter.AppendFormat(" AND DealWeight>{0} ", _delWeight);
                                break;
                            case Comparison.Lt:
                                _sbFilter.AppendFormat(" AND DealWeight<{0} ", _delWeight);
                                break;
                            default:
                                break;
                        }
                        break;
                    case "Weight":
                        double _weight = condition.ValueAsDouble;
                        switch (condition.Comparison)
                        {
                            case Comparison.Eq:
                                _sbFilter.AppendFormat(" AND Weight={0} ", _weight);
                                break;
                            case Comparison.Gt:
                                _sbFilter.AppendFormat(" AND Weight>{0} ", _weight);
                                break;
                            case Comparison.Lt:
                                _sbFilter.AppendFormat(" AND Weight<{0} ", _weight);
                                break;
                            default:
                                break;
                        }
                        break;
                    case "LastWeight":
                        double _lastWeight = condition.ValueAsDouble;
                        switch (condition.Comparison)
                        {
                            case Comparison.Eq:
                                _sbFilter.AppendFormat(" AND LastWeight={0} ", _lastWeight);
                                break;
                            case Comparison.Gt:
                                _sbFilter.AppendFormat(" AND LastWeight>{0} ", _lastWeight);
                                break;
                            case Comparison.Lt:
                                _sbFilter.AppendFormat(" AND LastWeight<{0} ", _lastWeight);
                                break;
                            default:
                                break;
                        }
                        break;
                    case "UsableWeight":
                        double _usableWeight = condition.ValueAsDouble;
                        switch (condition.Comparison)
                        {
                            case Comparison.Eq:
                                _sbFilter.AppendFormat(" AND UsableWeight={0} ", _usableWeight);
                                break;
                            case Comparison.Gt:
                                _sbFilter.AppendFormat(" AND UsableWeight>{0} ", _usableWeight);
                                break;
                            case Comparison.Lt:
                                _sbFilter.AppendFormat(" AND UsableWeight<{0} ", _usableWeight);
                                break;
                            default:
                                break;
                        }
                        break;
                    case "Operator":
                        _sbFilter.AppendFormat(" AND Operator LIKE '%{0}%' ", condition.Value);
                        break;
                    case "OperatTime":
                        DateTime _operatTime = condition.ValueAsDate;
                        switch (condition.Comparison)
                        {
                            case Comparison.Eq:
                                _sbFilter.AppendFormat(" AND (OperatTime BETWEEN '{0}' AND '{1}') ", _operatTime.ToString("yyyy-MM-dd 00:00:00"), _operatTime.ToString("yyyy-MM-dd 23:59:59"));
                                break;
                            case Comparison.Gt:
                                _sbFilter.AppendFormat(" AND (OperatTime>'{0}' OR OperaTime='{0}') ", _operatTime.ToString("yyyy-MM-dd"));
                                break;
                            case Comparison.Lt:
                                _sbFilter.AppendFormat(" AND (OperatTime<'{0}' OR OperaTime='{0}') ", _operatTime.ToString("yyyy-MM-dd"));
                                break;
                            default:
                                break;
                        }
                        break;
                    
                    default:
                        break;
                }
                if (_sbFilter.Length > 0)
                {
                    _where = String.Format(" (UsableWeight>-1 {0})", _sbFilter.ToString());
                }
            }
        }
        #endregion 查询条件
        #region 排序
        _orderBy = String.Format(" {0} {1} ", e.Sort, e.Dir == Ext.Net.SortDirection.ASC ? "ASC" : "DESC");
        #endregion 排序

        MM_ContractLogic _logic = new MM_ContractLogic();
        List<ModelContract> _list = new List<ModelContract>();
        if (_logic != null)
        {
            _list = _logic.GetModelPageList(_pageSize, _curPageIndex, _where);
            e.Total = _logic.GetRecordCount(_where);
            
        }
        storeMain.DataSource = _list;
        storeMain.DataBind();
    }

    protected void storeCompanyRefreshData(object sender, StoreRefreshDataEventArgs e)
    {
        MM_ContractLogic _logic = new MM_ContractLogic();
        storeCompany.DataSource = _logic.Distinct("Company");
        storeCompany.DataBind();
    }

    protected void storeGoodsRefreshData(object sender, StoreRefreshDataEventArgs e)
    {
        MM_ContractLogic _logic = new MM_ContractLogic();
        storeGoods.DataSource = _logic.Distinct("Goods");
        storeGoods.DataBind();
    }

    protected void btnAddOk_Click(object sender, DirectEventArgs e)
    {
        ModelContract _model = new ModelContract();
        _model.ContractNo = txtContractNo.Text.Trim();
        _model.Company = cmbCompany.Text;
        _model.Goods = cmbGoods.Text;
        _model.Weight = (decimal)numWeight.Number;
        _model.OperatTime = DateTime.Now;
        _model.Operat = "新增";
        _model.Operator = m_userName;
        _model.OperatSite = Request.UserHostAddress;
        //_model.Flag = _model.Flag = e.ExtraParams["flag"];

        MM_ContractLogic _logic = new MM_ContractLogic();
        //再次对合同号验证
        if (_logic.ExistsContractNo(_model.ContractNo))
        {
            gpMain.Reload();
            X.MessageBox.Alert("提示", String.Format("合同号 {0} 已经存在,请重新输入.", _model.ContractNo)).Show();
            return;
        }

        if (_logic.Add(_model) > 0)
        {
            X.MessageBox.Alert("提示", "保存合同 成功.").Show();
            txtContractNo.Reset();
            cmbGoods.Reset();
            cmbCompany.Reset();
            numWeight.Reset();
            lblDealWeight.Text = "0";
            lblUsableWeight.Text = "0";
            gpMain.Reload();
        }
        else
        {
            X.MessageBox.Alert("提示", "保存合同失败.请稍后再试或与系统管理员联系.").Show();
        }
    }

    protected void btnEditOk_Click(object sender, DirectEventArgs e)
    {
        ModelContract _model = new ModelContract();
        _model.Id = Int32.Parse(e.ExtraParams["oldId"]);
        _model.ContractNo = editTxtContractNo.Text.Trim();
        _model.Company = editCmbCompany.Text;
        _model.Goods = editCmbGoods.Text;
        _model.Weight = (decimal)editNumWeight.Number;
        _model.DealWeight = (decimal)editNumDealWeight.Number;
        _model.LastWeight = (decimal)editNumLastWeight.Number;
        _model.UsableWeight = (decimal)editNumUsableWeight.Number;
        _model.OperatTime = DateTime.Now;
        _model.Operat = "修改";
        _model.Operator = m_userName;
        _model.OperatSite = Request.UserHostAddress;
        //_model.Flag = e.ExtraParams["flag"];

        MM_ContractLogic _logic = new MM_ContractLogic();
        //再次验证合同号
        string _oldContractNo = e.ExtraParams["oldContractNo"];
        if (String.IsNullOrEmpty(_oldContractNo) || _logic.ExistsContractNo(_model.ContractNo, _oldContractNo))
        {
            gpMain.Reload();
            X.MessageBox.Alert("提示", String.Format("合同号 {0} 已经存在,请重新输入.", _model.ContractNo)).Show();
        }


        try
        {
            _logic.Update(_model);
            gpMain.Reload();
            winEdit.Hide();
            X.MessageBox.Alert("提示", "保存合同 成功.").Show();
        }
        catch(Exception ex)
        {
            X.MessageBox.Alert("提示", "保存合同失败.请稍后再试或与系统管理员联系.<br />详细信息:"+ex.Message).Show();
        }
    }

    protected void gpMainCommand(object sender, DirectEventArgs e)
    {
        hdnOldContractNo.SetRawValue("");
        hdnOldId.SetRawValue("");

        string Id = e.ExtraParams["Id"];
        string oldContractNo = e.ExtraParams["ContractNo"];
        ModelContract _model = null;
        MM_ContractLogic _logic = new MM_ContractLogic();
        _model = _logic.GetModel(Int32.Parse(Id));

        hdnOldContractNo.SetRawValue(oldContractNo);
        hdnOldId.SetRawValue(Id);
        winEdit.Title = "编辑合同" + oldContractNo;
        editTxtContractNo.Value = _model.ContractNo;
        editCmbCompany.SetValue(_model.Company);
        editCmbGoods.SetValue(_model.Goods);
        editNumDealWeight.Number = (double)_model.DealWeight;
        editNumLastWeight.Number = (double)_model.LastWeight;
        editNumUsableWeight.Number = (double)_model.UsableWeight;
        editNumWeight.Number = (double)_model.Weight;
        //foreach (Radio rdo in editRdoFlag.Items)
        //{
        //    if (rdo.BoxLabel == _model.Flag)
        //    {
        //        rdo.Checked = true;
        //    }
        //}

        
        winEdit.Show();
    }

    protected void editTxtContractNoValidation(object sender, RemoteValidationEventArgs e)
    {
        string _oldContractNo = e.ExtraParams["oldContractNo"];
        TextField txtContractNo = sender as TextField;
        if (txtContractNo != null)
        {
            string contractNo = txtContractNo.Text;
            if (String.IsNullOrEmpty(contractNo) || contractNo.Trim().Length == 0)
            {
                e.Success = false;
                e.ErrorMessage = "请输入合同号.";
                return;
            }

            MM_ContractLogic _logic = new MM_ContractLogic();
            if (!_logic.ExistsContractNo(contractNo,_oldContractNo))
            { 
                e.Success = true;
            }
            else
            {
                e.Success = false;
                e.ErrorMessage = "此合同号已存在,请重新输入.";
            }
        }
    }

    protected void txtContractNoValidation(object sender, RemoteValidationEventArgs e)
    {
        TextField txtContractNo = sender as TextField;
        if (txtContractNo != null)
        {
            string contractNo = txtContractNo.Text;
            if (String.IsNullOrEmpty(contractNo) || contractNo.Trim().Length == 0)
            {
                e.Success = false;
                e.ErrorMessage = "请输入合同号.";
                return;
            }

            MM_ContractLogic _logic = new MM_ContractLogic();
            if (!_logic.ExistsContractNo(contractNo))
            {
                e.Success = true;
            }
            else
            {
                e.Success = false;
                e.ErrorMessage = "此合同号已存在,请重新输入.";
            }
        }
    }
    
    /// <summary>
    /// 获取最近一份合同
    /// </summary>
    /// <param name="goods"></param>
    /// <param name="company"></param>
    /// <returns></returns>
    [DirectMethod]
    public static ModelContract GetLastContract(string goods, string company)
    {
        MM_ContractLogic _logic = new MM_ContractLogic();
        return _logic.GetLastContract(goods, company);
    }

}

再次送上Web.config

<?xml version="1.0"?>
<!-- 
    注意: 除了手动编辑此文件以外,您还可以使用 
    Web 管理工具来配置应用程序的设置。可以使用 Visual Studio 中的
     “网站”->“Asp.Net 配置”选项。
    设置和注释的完整列表在 
    machine.config.comments 中,该文件通常位于 
    \Windows\Microsoft.Net\Framework\v2.x\Config 中
-->
<configuration>
  <configSections>
    <section name="extnet" type="Ext.Net.GlobalConfig" requirePermission="false" />
    <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
        <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
          <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
          <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
          <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
          <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
        </sectionGroup>
      </sectionGroup>
    </sectionGroup>
  </configSections>
  <appSettings>
    <add key="CookieUserName" value="mesmain_name"/>
    <add key="DefaultValidationRuleSet" value="RuleSetDefault"/>
    <!--默认校验规则-->
    <!--需要合同的物料(或产品),多个用分号(;)分割-->
    <add key="NeedContractGoods" value="水渣;渣土;"/>
      
  </appSettings>
  <connectionStrings>
    <add name="ConnectionString1" connectionString="Data Source=.;Initial Catalog=MyDb;User ID=sa;Password=sa" providerName="System.Data.SqlClient"/>
  </connectionStrings>
  <system.web>
    <!-- 
            设置 compilation debug="true" 将调试符号插入
            已编译的页面中。但由于这会 
            影响性能,因此只在开发过程中将此值 
            设置为 true。
        -->
    <compilation debug="true">
      <assemblies>
        <add assembly="System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add assembly="System.Management, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
        <add assembly="System.Configuration.Install, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
        <add assembly="System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add assembly="System.Messaging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
        <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
      </assemblies>
    </compilation>
    <!--
            通过 <authentication> 节可以配置 ASP.NET 使用的 
            安全身份验证模式,
            以标识传入的用户。 
        -->
    <authentication mode="Windows"/>
    <pages>
      <controls>
        <add tagPrefix="elValidation" assembly="Microsoft.Practices.EnterpriseLibrary.Validation.Integration.AspNet" namespace="Microsoft.Practices.EnterpriseLibrary.Validation.Integration.AspNet"/>
        <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      </controls>
    </pages>
    <!--
            如果在执行请求的过程中出现未处理的错误,
            则通过 <customErrors> 节可以配置相应的处理步骤。具体说来,
            开发人员通过该节可以配置
            要显示的 html 错误页
            以代替错误堆栈跟踪。

        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
            <error statusCode="403" redirect="NoAccess.htm" />
            <error statusCode="404" redirect="FileNotFound.htm" />
        </customErrors>
        -->
    <httpHandlers>
      <remove verb="*" path="*.asmx"/>
      <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add verb="GET,HEAD" path="ScriptResource.axd" validate="false" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add path="*/ext.axd" verb="*" type="Ext.Net.ResourceHandler" validate="false" />
    </httpHandlers>
    <httpModules>
      <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add name="DirectRequestModule" type="Ext.Net.DirectRequestModule, Ext.Net" />
    </httpModules>
  </system.web>
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
        <providerOption name="CompilerVersion" value="v3.5"/>
        <providerOption name="WarnAsError" value="false"/>
      </compiler>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
        <providerOption name="CompilerVersion" value="v3.5"/>
        <providerOption name="OptionInfer" value="true"/>
        <providerOption name="WarnAsError" value="false"/>
      </compiler>
    </compilers>
  </system.codedom>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules>
      <remove name="ScriptModule"/>
      <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add name="DirectRequestModule" preCondition="managedHandler" type="Ext.Net.DirectRequestModule, Ext.Net" />
    </modules>
    <handlers>
      <remove name="WebServiceHandlerFactory-Integrated"/>
      <remove name="ScriptHandlerFactory"/>
      <remove name="ScriptHandlerFactoryAppServices"/>
      <remove name="ScriptResource"/>
      <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add name="ScriptResource" verb="GET,HEAD" path="ScriptResource.axd" preCondition="integratedMode" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add name="DirectRequestHandler" verb="*" path="*/ext.axd" preCondition="integratedMode" type="Ext.Net.ResourceHandler" />
    </handlers>
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
 
 
欢迎大家提问题及建议。
Q群:120521984(人满,每日清理中…)
Add your comment

9 条回复

  1. #1楼 liyf      2011-12-01 08:41
    兄弟你该贴个图,让大家看一下实际效果,上了这么多代码,谁看呀?
     回复 引用 查看   
  2. #2楼 海洋之 心      2011-12-01 09:23
    水平太高了,简直是不得了啊
     回复 引用 查看   
  3. #3楼 冰品羽扇      2011-12-01 09:52
    支持Ext原生态技术,加个AjaxPro跑起来代码非常精简明了,这种混合饲料把复杂慢慢累积,表面上好像开发快了,实际上需要更的我学习成本和框架维护成本
     回复 引用 查看   
  4. #4楼[楼主] 龙宜坡      2011-12-01 10:28
    @冰品羽扇
    说的极是,这玩意本身就是为快速开发而准备。
     回复 引用 查看   
  5. #5楼 黎小荣      2011-12-01 12:46
    这么多的代码,怎么看啊,没听过有图有真相吗
     回复 引用 查看   
  6. #6楼[楼主] 龙宜坡      2011-12-01 13:11
    @liyf
    @黎小荣

    时间仓促,抱歉的紧!
     回复 引用 查看   
  7. #7楼 Bēniaǒ      2011-12-01 13:49
    看不懂,代码太多。
     回复 引用 查看   
  8. #8楼 GuoYong.Che      2011-12-01 17:51
    满篇代码就是没个界面图片
     回复 引用 查看   
  9. #9楼 茗流      2011-12-02 10:12
    难看死了 ...
     回复 引用 查看