<%@ Page Language="C#" %>
<!DOCTYPE html>
<html>
<head runat="server">
<title>客户资料收集</title>
<link href="/resources/css/examples.css" rel="stylesheet" />
<script type="text/javascript">
var ActionFormDestroy = function () {
if (App.GridPanel1.getStore().getCount() > 0) {
App.btnInquiry.fireEvent("click");
}
};
//时间控件From-To的实现
var onKeyUp = function () {
var me = this,
v = me.getValue(),
field;
if (me.startDateField) {
field = Ext.getCmp(me.startDateField);
field.setMaxValue(v);
me.dateRangeMax = v;
} else if (me.endDateField) {
field = Ext.getCmp(me.endDateField);
field.setMinValue(v);
me.dateRangeMin = v;
}
field.validate();
};
</script>
<script>
var onSelectionChange = function (grid, selection) {
var status = App.Status,
message = '??',
firstRowIndex,
firstColumnIndex,
lastRowIndex,
lastColumnIndex;
if (!selection) {
message = 'No selection';
} else if (selection.isCells) {
firstRowIndex = selection.getFirstRowIndex();
firstColumnIndex = selection.getFirstColumnIndex();
lastRowIndex = selection.getLastRowIndex();
lastColumnIndex = selection.getLastColumnIndex();
message = 'Selected cells: ' + (lastColumnIndex - firstColumnIndex + 1) + 'x' + (lastRowIndex - firstRowIndex + 1) +
' at (' + firstColumnIndex + ',' + firstRowIndex + ')';
} else if (selection.isRows) {
message = 'Selected rows: ' + selection.getCount();
} else if (selection.isColumns) {
message = 'Selected columns: ' + selection.getCount();
}
status.update(message);
};
var toggleRowSelect = function (button, pressed) {
App.SpreadsheetSelectionModel1.setRowSelect(pressed);
};
var toggleCellSelect = function (button, pressed) {
App.SpreadsheetSelectionModel1.setCellSelect(pressed);
};
var toggleColumnSelect = function (button, pressed) {
App.SpreadsheetSelectionModel1.setColumnSelect(pressed);
};
</script>
</head>
<body>
<form runat="server">
<ext:ResourceManager runat="server" />
<ext:Viewport runat="server" Layout="fit">
<Items>
<%-- <h1>Spreadsheet Selection Model</h1>
<p>Supported features:</p>
<ul>
<li>Single / Range / Multiple individual row selection.</li>
<li>Single / Range cell selection.</li>
<li>Column selection by click selecting column headers.</li>
<li>Select / deselect all by clicking in the top-left, header.</li>
<li>Adds row number column to enable row selection.</li>
<li>Selection extensibility using a drag gesture. Configured in this case to be up or down.</li>
<li>Copy/paste to system clipboard using CTRL+C, CTRL+X and CTRL+V.</li> //EnableColumnHide="false"
</ul>--%>
<ext:GridPanel ID="ExcelSave"
runat="server"
ColumnLines="true"
Height="400"
Width="775"
Title="Forwader资料收集"
Frame="true" EmptyText="没有数据">
<Store>
<ext:Store ID="Store1" runat="server" AutoLoad="false">
<Proxy>
<ext:AjaxProxy Url="/Forwader/UpdateForwader/GetData/" Json="true" NoCache="true">
<Reader>
<ext:JsonReader RootProperty="data" TotalProperty="count" IDProperty="ID" ModelName="新增行数" />
</Reader>
</ext:AjaxProxy>
</Proxy>
<Model>
<ext:Model Name="新增行数" runat="server" IDProperty="ID">
<Fields>
<ext:ModelField Name="ID" />
<ext:ModelField Name="BOOKINGNO" />
<ext:ModelField Name="PLANCONTAINERNOS" />
<ext:ModelField Name="ACTUALACTUALCONTAINERNOS" />
<ext:ModelField Name="FE" />
<ext:ModelField Name="SHIPCOMPANY" />
<ext:ModelField Name="SHIPPERCONSIGNEE" />
<ext:ModelField Name="POD" />
<ext:ModelField Name="FORWADER" />
<ext:ModelField Name="CREATOR" />
<ext:ModelField Name="CREATETIME" />
<ext:ModelField Name="CONTAINERSIZE" />
</Fields>
</ext:Model>
</Model>
<%-- <Reader>
<ext:ArrayReader />
</Reader>--%>
</ext:Store>
</Store>
<SelectionModel>
<ext:SpreadsheetSelectionModel
ID="SpreadsheetSelectionModel1"
runat="server"
ColumnSelect="true"
CheckboxSelect="true"
PruneRemoved="false"
Extensible="Y" />
</SelectionModel>
<ColumnModel>
<Columns>
<ext:RowNumbererColumn runat="server" Width="35" />
<ext:Column runat="server" Text="ID" DataIndex="ID" Width="100" Hidden="true" />
<ext:Column runat="server" Text="BOOKINGNO" DataIndex="BOOKINGNO" Width="150">
<Editor>
<ext:TextField runat="server">
</ext:TextField>
</Editor>
</ext:Column>
<ext:Column runat="server" Text="Container Qty" DataIndex="PLANCONTAINERNOS" Width="90">
<Editor>
<ext:NumberField runat="server">
</ext:NumberField>
</Editor>
</ext:Column>
<ext:Column runat="server" Text="实际柜数" DataIndex="ACTUALACTUALCONTAINERNOS" Width="70" Hidden="true">
</ext:Column>
<ext:Column runat="server" Text="SIZE" DataIndex="CONTAINERSIZE" Width="70">
<Editor>
<ext:ComboBox runat="server" Editable="false">
<Items>
<ext:ListItem Text="20" Value="20" Mode="Value" />
<ext:ListItem Text="40" Value="40" Mode="Value" />
<ext:ListItem Text="20" Value="20" Mode="Value" />
<ext:ListItem Text="40" Value="40" Mode="Value" />
</Items>
</ext:ComboBox>
</Editor>
</ext:Column>
<%-- <ext:Column runat="server" Text="FE" DataIndex="FE" Width="150" >
<Editor>
<ext:TextField runat="server">
</ext:TextField>
</Editor>
</ext:Column>--%>
<ext:Column runat="server" Text="FE" DataIndex="FE" Width="60" ToolTip="双击选择">
<Editor>
<ext:ComboBox runat="server" Editable="false">
<Items>
<ext:ListItem Text="F" Value="F" Mode="Value" />
<ext:ListItem Text="E" Value="E" Mode="Value" />
</Items>
</ext:ComboBox>
</Editor>
</ext:Column>
<ext:Column runat="server" Text="SHIP COMPANY" DataIndex="SHIPCOMPANY" Width="150">
<Editor>
<ext:TextField runat="server">
</ext:TextField>
</Editor>
</ext:Column>
<%-- <ext:Column ID="Column1" runat="server" Text="SHIPPERCONSIGNEE" DataIndex="SHIPPERCONSIGNEE" Width="150" >
</ext:Column>--%>
<ext:Column runat="server" Text="POD" DataIndex="POD" Width="130" ToolTip="双击选择">
<Editor>
<ext:ComboBox runat="server" Editable="false">
<Items>
<ext:ListItem Text="HK001" Value="HK001" Mode="Value" />
<ext:ListItem Text="HK002" Value="HK002" Mode="Value" />
<ext:ListItem Text="HK003" Value="HK003" Mode="Value" />
<ext:ListItem Text="HK004" Value="HK004" Mode="Value" />
<ext:ListItem Text="HK005" Value="HK005" Mode="Value" />
<ext:ListItem Text="HK006" Value="HK006" Mode="Value" />
<ext:ListItem Text="HK007" Value="HK007" Mode="Value" />
<ext:ListItem Text="HK008" Value="HK008" Mode="Value" />
<ext:ListItem Text="HK009" Value="HK009" Mode="Value" />
<ext:ListItem Text="HK010" Value="HK010" Mode="Value" />
<ext:ListItem Text="HK011" Value="HK011" Mode="Value" />
<ext:ListItem Text="HK012" Value="HK012" Mode="Value" />
<ext:ListItem Text="HK013" Value="HK013" Mode="Value" />
<ext:ListItem Text="HK014" Value="HK014" Mode="Value" />
<ext:ListItem Text="HK015" Value="HK015" Mode="Value" />
<ext:ListItem Text="HK016" Value="HK016" Mode="Value" />
<ext:ListItem Text="HK017" Value="HK017" Mode="Value" />
<ext:ListItem Text="HK018" Value="HK018" Mode="Value" />
<ext:ListItem Text="HK019" Value="HK019" Mode="Value" />
<ext:ListItem Text="HK020" Value="HK020" Mode="Value" />
</Items>
</ext:ComboBox>
</Editor>
</ext:Column>
<%-- <ext:Column Name="StorageLocation" runat="server" DataIndex="StorageLocation" Width="85" Text="StorageCode" >
<Editor>
<ext:ComboBox Name="CODE" runat="server" Flex="3" Margins="0 0 0 6" EmptyText="CODENAME" Editable="false"
AllowBlank="false" DisplayField="CODENAME" ValueField="CODE">
<Store>
<ext:Store runat="server" AutoLoad="true">
<Proxy>
<ext:AjaxProxy Url="/Forwader/UpdateForwader/GOCT_FORWARDCODE/" Json="true">
<Reader>
<ext:JsonReader RootProperty="data" />
</Reader>
</ext:AjaxProxy>
</Proxy>
<Model>
<ext:Model runat="server">
<Fields>
<ext:ModelField Name="CODE" />
<ext:ModelField Name="CODENAME" />
</Fields>
</ext:Model>
</Model>
</ext:Store>
</Store>
</ext:ComboBox>
</Editor>
</ext:Column>--%>
<ext:Column Name="FORWADER" runat="server" DataIndex="FORWADER" Width="120" Text="StorageCode" ToolTip="双击选择">
<Editor>
<ext:ComboBox Name="CODE" runat="server" Flex="3" Margins="0 0 0 6" Editable="false"
AllowBlank="false" DisplayField="CODENAME" ValueField="CODE">
<Store>
<ext:Store runat="server" AutoLoad="true">
<Proxy>
<ext:AjaxProxy Url="/Forwader/UpdateForwader/GOCT_FORWARDCODE/" Json="true">
<Reader>
<ext:JsonReader RootProperty="data" />
</Reader>
</ext:AjaxProxy>
</Proxy>
<Model>
<ext:Model runat="server">
<Fields>
<ext:ModelField Name="CODE" />
<ext:ModelField Name="CODENAME" />
</Fields>
</ext:Model>
</Model>
</ext:Store>
</Store>
</ext:ComboBox>
</Editor>
</ext:Column>
<%-- <ext:Column runat="server" Text="StorageCode" DataIndex="FORWADER" Width="150" ToolTip="双击选择">
<Editor>
<ext:ComboBox runat="server" Editable="false" MaxLengthText="2" EmptyText="值不能大于2位">
<Items>
<ext:ListItem Text="创富星期一" Value="Z1" Mode="Value" />
<ext:ListItem Text="创富星期二" Value="Z2" Mode="Value" />
<ext:ListItem Text="创富星期三" Value="Z3" Mode="Value" />
<ext:ListItem Text="创富星期四" Value="Z4" Mode="Value" />
<ext:ListItem Text="创富星期五" Value="Z5" Mode="Value" />
<ext:ListItem Text="创富星期六" Value="Z6" Mode="Value" />
<ext:ListItem Text="创富备用一" Value="Z7" Mode="Value" />
<ext:ListItem Text="创富备用二" Value="Z8" Mode="Value" />
</Items>
</ext:ComboBox>
</Editor>
</ext:Column>--%>
<ext:Column runat="server" Text="CREATOR" DataIndex="CREATOR" Width="100" Disabled="true">
</ext:Column>
<ext:Column runat="server" Text="CREATETIME" DataIndex="CREATETIME" Width="150" Disabled="true">
</ext:Column>
</Columns>
</ColumnModel>
<ViewConfig TrackOver="false" />
<Tools>
<ext:Tool Type="Refresh" ToolTip="Reload Data">
<Listeners>
<Click Handler=" App.ExcelSave.getStore().reload();"></Click>
</Listeners>
</ext:Tool>
</Tools>
<TopBar>
<ext:Toolbar runat="server">
<Items>
<ext:FieldContainer runat="server" LabelStyle="font-weight:bold;padding:0;"
Layout="HBoxLayout">
<FieldDefaults LabelAlign="Top" />
<Items>
<ext:DateField ID="startDate" runat="server" Vtype="daterange" FieldLabel="开始时间"
LabelAlign="Right" AnchorHorizontal="100%" EnableKeyEvents="true" LabelWidth="70" SelectedDate="<%# DateTime.Now %>" AutoDataBind="true" Editable="false"
Width="200" Format="yyyy-MM-dd">
<CustomConfig>
<ext:ConfigItem Name="endDateField" Value="endDate" Mode="Value" />
</CustomConfig>
<Listeners>
<KeyUp Fn="onKeyUp" />
</Listeners>
</ext:DateField>
<ext:DateField ID="endDate" runat="server" Vtype="daterange" FieldLabel="结束时间" AnchorHorizontal="100%" SelectedDate="<%# DateTime.Now %>" AutoDataBind="true" Editable="false"
LabelAlign="Right" EnableKeyEvents="true" LabelWidth="70" Width="200" Format="yyyy-MM-dd">
<CustomConfig>
<ext:ConfigItem Name="startDateField" Value="startDate" Mode="Value" />
</CustomConfig>
<Listeners>
<KeyUp Fn="onKeyUp" />
</Listeners>
</ext:DateField>
</Items>
</ext:FieldContainer>
<ext:FieldContainer runat="server" LabelStyle="font-weight:bold;padding:0;"
Layout="HBoxLayout">
<FieldDefaults LabelAlign="Top" />
<Items>
<ext:Button runat="server" Text="新增" Icon="Add">
<DirectEvents>
<Click Url="/IT/First/GetNo/">
<EventMask ShowMask="true">
</EventMask>
</Click>
</DirectEvents>
</ext:Button>
<ext:ToolbarSeparator />
<ext:Button Text="删除" runat="server" Icon="Decline">
<Listeners>
<Click Handler="var selection = #{ExcelSave}.getView().getSelectionModel().getSelection()[0];
if (selection) {
#{ExcelSave}.store.remove(selection);
}" />
</Listeners>
</ext:Button>
<ext:Button runat="server" Text="删除所有" Icon="Delete" ToolTip="清空后要保存才算删除,可以新增后一起保存">
<Listeners>
<Click Handler="App.ExcelSave.store.removeAll();" />
</Listeners>
</ext:Button>
<ext:TextField ID="BookingNo" FieldLabel="BookingNo" runat="server" LabelWidth="80" Mode="Value"
LabelAlign="Right" Width="225">
</ext:TextField>
<%-- <ext:Button runat="server" Text="刷新" Width="80" Icon="Reload">
<Listeners>
<Click Handler=" App.ExcelSave.getStore().reload();"></Click>
</Listeners>
</ext:Button>
--%>
<ext:Button ID="Button4" runat="server" Text="查询" Width="80" Icon="Magnifier">
<Listeners>
<Click Handler="#{ExcelSave}.getStore().load({ params: {BookingNo:#{BookingNo}.getValue(),sDate:#{startDate}.value,eDate:#{endDate}.value} });" />
</Listeners>
</ext:Button>
<ext:ToolbarSeparator />
<ext:Button runat="server" Text="保存" Icon="Disk">
<DirectEvents>
<Click Url="/Forwader/UpdateForwader/SaveData/"
Success="Ext.net.Notification.show({
iconCls : 'icon-information',
pinEvent : 'click',
html : '已经执行!',
title : '提示'
});
App.ExcelSave.getStore().reload();
">
<Confirmation Title="保存" Message="确认要保存?" ConfirmRequest="true">
</Confirmation>
<EventMask ShowMask="true" />
<ExtraParams>
<ext:Parameter Name="data" Value="#{ExcelSave}.store.getChangedData()" Mode="Raw"
Encode="true" />
</ExtraParams>
</Click>
</DirectEvents>
</ext:Button>
</Items>
</ext:FieldContainer>
<ext:ToolbarFill runat="server" />
<ext:Component ID="Status" runat="server" />
</Items>
</ext:Toolbar>
</TopBar>
<Listeners>
<SelectionChange Fn="onSelectionChange" />
</Listeners>
<Plugins>
<ext:CellEditing runat="server" ClicksToEdit="2" />
<ext:Clipboard runat="server" />
<ext:SelectionReplicator runat="server" />
</Plugins>
</ext:GridPanel>
</Items>
</ext:Viewport>
</form>
</body>
</html>
后端:
using ePortalPlus.Controllers;
using ePortalPlus.Models;
using Ext.Net;
using Ext.Net.MVC;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web.Mvc;
namespace ePortalPlus.Areas.Forwader.Controllers
{
public class UpdateForwaderController : BaseDataController
{
// GET: Forwader/UpdateForwader
public ActionResult Index()
{
return View();
}
[Authorize]
public ActionResult GetData(string BOOKINGNO, string CREATOR, string sDate, string eDate)
{
var UserName = this.getCurrentUserName();
DateTime startDate;
DateTime endDate;
DateTime.TryParse(sDate, out startDate);
DateTime.TryParse(eDate, out endDate);
endDate = endDate.AddDays(1).AddSeconds(-1);
var UserType = ePortalPlus.User.Where(x => x.Name == UserName).Select(x => x.Type).FirstOrDefault();
var data = Catos.GOCT_FORWARDER_TRANSFORM.Where(x => (string.IsNullOrEmpty(BOOKINGNO) ? true : x.BOOKINGNO.Contains(BOOKINGNO))
&& (UserType == "公司内部" ? true : x.CREATOR == UserName)
&& (x.CREATETIME >= startDate && x.CREATETIME <= endDate)
).Select(x => new
{
x.ID,
x.BOOKINGNO,
x.PLANCONTAINERNOS,
x.CONTAINERSIZE,
x.ACTUALACTUALCONTAINERNOS,
x.FE,
x.SHIPCOMPANY,
x.SHIPPERCONSIGNEE,
x.POD,
x.FORWADER,
x.CREATOR,
x.CREATETIME
});
return this.Store(data);
}
[Authorize]
public ActionResult GOCT_FORWARDCODE()
{
var UserName = this.getCurrentUserAccount();
var UserType = ePortalPlus.User.Where(x => x.Account == UserName).Select(x => x.Type).FirstOrDefault();
var query = from t in Catos.GOCT_FORWARDCODE.Where(x => UserType == "公司内部" ? true : x.CODETYPE == UserName)
select new
{
t.CODE,
t.CODENAME
};
query = query.OrderBy(x => x.CODE);
return this.Store(query);
}
[Authorize]
public ActionResult SaveData(StoreDataHandler handler)
{
var UserName = this.getCurrentUserName();
var LoginName = this.getCurrentUserAccount();
if (handler.JsonData != "{}")
{
ChangeRecords<GOCT_FORWARDER_TRANSFORM> EGOCT_FORWARDER_TRANSFORM = handler.BatchObjectData<GOCT_FORWARDER_TRANSFORM>();
bool isTrue = false;
foreach (GOCT_FORWARDER_TRANSFORM created in EGOCT_FORWARDER_TRANSFORM.Created)
{
created.ID = Guid.NewGuid().ToString();
created.SHIPCOMPANY = this.getCurrentUserAccount();
created.CREATETIME = DateTime.Now;
created.CREATOR = UserName;
created.ACTUALACTUALCONTAINERNOS = 0;
// created.COMPANY_NAME = COMPANY_NAME != null ? COMPANY_NAME.CompanyName : "空";
Catos.GOCT_FORWARDER_TRANSFORM.Add(created);
isTrue = true;
Catos.SaveChanges();
}
foreach (GOCT_FORWARDER_TRANSFORM updated in EGOCT_FORWARDER_TRANSFORM.Updated)
{
var item = Catos.GOCT_FORWARDER_TRANSFORM.Where(x => x.ID == updated.ID).FirstOrDefault();
if (item != null)
{
item.BOOKINGNO = updated.BOOKINGNO;
item.PLANCONTAINERNOS = updated.PLANCONTAINERNOS;
item.FE = updated.FE;
item.SHIPCOMPANY = updated.SHIPCOMPANY;
item.SHIPPERCONSIGNEE = updated.SHIPPERCONSIGNEE;
item.POD = updated.POD;
item.FORWADER = updated.FORWADER;
item.CREATOR = updated.CREATOR;
item.CONTAINERSIZE = updated.CONTAINERSIZE;
isTrue = true;
}
}
foreach (GOCT_FORWARDER_TRANSFORM deleted in EGOCT_FORWARDER_TRANSFORM.Deleted)
{
var query = Catos.GOCT_FORWARDER_TRANSFORM.Where(x => x.ID == deleted.ID).FirstOrDefault();
if (query != null)
{
Catos.GOCT_FORWARDER_TRANSFORM.Remove(query);
}
isTrue = true;
}
if (isTrue)
Catos.SaveChanges();
}
return this.Direct();
}
}
}