Coolite Cool Study 1 ÔÚGridÖÐÓÃComboBox À´±à¼­Êý¾Ý

¡¡¡¡¹Ù·½ÓÐÒ»¸ö¹ØÓÚGrid CURD µÄÀý×Ó£ºhttp://examples.coolite.com/Examples/GridPanel/WebService_Connections/HandlerUsing/   ÎÒÔÚÆä»ù´¡ÉÏÉÔ΢ÐÞ¸Äһϣ¬ ÓÃComboBox×÷ΪGridµÄEditor£º

¡¡¡¡ÏÈshowÒ»ÏÂЧ¹û¸ø´ó¼Ò¼á³Ö¿´ÏÂÈ¥µÄ¶¯Á¦£º

Coolite Cool Study 1 ÔÚGridÖÐÓÃComboBox À´±à¼­Êý¾Ý

¡¡¡¡¹Ø¼ü´úÂ룺

¡¡¡¡

¸´ÖÆ´úÂë ´úÂëÈçÏÂ:

¡¡¡¡<ext:Column ColumnID="ContactName" DataIndex="ContactName" Header="Contact Name"

¡¡¡¡Width="150">

¡¡¡¡<Editor>

¡¡¡¡<ext:ComboBox ID="ComboBox1" runat="server" StoreID="stoContactName" DisplayField="Name"

¡¡¡¡ValueField="Name" TypeAhead="false" LoadingText="Searching..." Width="570" PageSize="10"

¡¡¡¡Editable="true" Mode="Remote" MinListWidth="200" ItemSelector="tr.search-item"

¡¡¡¡MinChars="1" MsgTarget="Side" TriggerAction="All" Grow="true">

¡¡¡¡<CustomConfig>

¡¡¡¡<ext:ConfigItem Name="tpl" Value="#{TplContactName}" Mode="Raw" />

¡¡¡¡</CustomConfig>

¡¡¡¡</ext:ComboBox>

¡¡¡¡</Editor>

¡¡¡¡</ext:Column>

¡¡¡¡ÓÉÓÚComboBox×÷ΪEditor£¬ÊDz»ÄÜÖ±½ÓÅäÖÃÄ£°åµÄ£¬ËùÒÔÄ£°åÒª¶ÀÁ¢Ð´£º

¡¡¡¡

¸´ÖÆ´úÂë ´úÂëÈçÏÂ:

¡¡¡¡<ext:XTemplate ID="TplContactName" runat="server">

¡¡¡¡<div>

¡¡¡¡<table id="data_table" class="t1">

¡¡¡¡<thead>

¡¡¡¡<tr>

¡¡¡¡<th>

¡¡¡¡Name

¡¡¡¡</th>

¡¡¡¡<th>

¡¡¡¡Desc

¡¡¡¡</th>

¡¡¡¡</tr>

¡¡¡¡</thead>

¡¡¡¡<tbody>

¡¡¡¡<tpl for=".">

¡¡¡¡<tr class="search-item">

¡¡¡¡<td>{Name}</td>

¡¡¡¡<td>{Desc}</td>

¡¡¡¡</tr>

¡¡¡¡</tpl>

¡¡¡¡</tbody>

¡¡¡¡</table>

¡¡¡¡</div>

¡¡¡¡</ext:XTemplate>

¡¡¡¡ÔÙ¼ÓÉÏÕâ¸ö±È½ÏCoolµÄtableÑùʽ¾Í»ù±¾ÉÏÍê³ÉÁË:

¡¡¡¡

¸´ÖÆ´úÂë ´úÂëÈçÏÂ:

¡¡¡¡body, table.t1

¡¡¡¡{

¡¡¡¡font-size: 12px;

¡¡¡¡}

¡¡¡¡table.t1

¡¡¡¡{

¡¡¡¡table-layout: fixed;

¡¡¡¡empty-cells: show;

¡¡¡¡border-collapse: collapse;

¡¡¡¡margin: 0 auto;

¡¡¡¡}

¡¡¡¡td

¡¡¡¡{

¡¡¡¡height: 20px;

¡¡¡¡}

¡¡¡¡h1, h2, h3

¡¡¡¡{

¡¡¡¡font-size: 12px;

¡¡¡¡margin: 0;

¡¡¡¡padding: 0;

¡¡¡¡}

¡¡¡¡table.t1

¡¡¡¡{

¡¡¡¡border: 1px solid #cad9ea;

¡¡¡¡color: #666;

¡¡¡¡}

¡¡¡¡table.t1 th

¡¡¡¡{

¡¡¡¡background-image: url(/extjs/resources/images/default/panel/white-top-bottom-gif/coolite.axd);

¡¡¡¡background-repeat: repeat-x;

¡¡¡¡height: 22px;

¡¡¡¡}

¡¡¡¡table.t1 td, table.t1 th

¡¡¡¡{

¡¡¡¡border: 1px solid #cad9ea;

¡¡¡¡padding: 0 1em 0;

¡¡¡¡}

¡¡¡¡table.t1 tr.a1

¡¡¡¡{

¡¡¡¡background-color: #f5fafe;

¡¡¡¡}

¡¡¡¡Enjoy yourself£¡

¡¡¡¡ÍêÕûµÄ´úÂ룺

¡¡¡¡Html

¡¡¡¡

¸´ÖÆ´úÂë ´úÂëÈçÏÂ:

¡¡¡¡<%@ Page Language="C#" AutoEventWireup="true"%>

¡¡¡¡<%@ 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">

¡¡¡¡<html xmlns="http://www.w3.org/1999/xhtml">

¡¡¡¡<head runat="server">

¡¡¡¡<title></title>

¡¡¡¡<style type="text/css"><!--

¡¡¡¡body, table.t1

¡¡¡¡{

¡¡¡¡font-size: 12px;

¡¡¡¡}

¡¡¡¡table.t1

¡¡¡¡{

¡¡¡¡table-layout: fixed;

¡¡¡¡empty-cells: show;

¡¡¡¡border-collapse: collapse;

¡¡¡¡margin: 0 auto;

¡¡¡¡}

¡¡¡¡td

¡¡¡¡{

¡¡¡¡height: 20px;

¡¡¡¡}

¡¡¡¡h1, h2, h3

¡¡¡¡{

¡¡¡¡font-size: 12px;

¡¡¡¡margin: 0;

¡¡¡¡padding: 0;

¡¡¡¡}

¡¡¡¡table.t1

¡¡¡¡{

¡¡¡¡border: 1px solid #cad9ea;

¡¡¡¡color: #666;

¡¡¡¡}

¡¡¡¡table.t1 th

¡¡¡¡{

¡¡¡¡background-image: url(/extjs/resources/images/default/panel/white-top-bottom-gif/coolite.axd);

¡¡¡¡background-repeat: repeat-x;

¡¡¡¡height: 22px;

¡¡¡¡}

¡¡¡¡table.t1 td, table.t1 th

¡¡¡¡{

¡¡¡¡border: 1px solid #cad9ea;

¡¡¡¡padding: 0 1em 0;

¡¡¡¡}

¡¡¡¡table.t1 tr.a1

¡¡¡¡{

¡¡¡¡background-color: #f5fafe;

¡¡¡¡}

¡¡¡¡--></style><style type="text/css" bogus="1"> body, table.t1

¡¡¡¡{

¡¡¡¡font-size: 12px;

¡¡¡¡}

¡¡¡¡table.t1

¡¡¡¡{

¡¡¡¡table-layout: fixed;

¡¡¡¡empty-cells: show;

¡¡¡¡border-collapse: collapse;

¡¡¡¡margin: 0 auto;

¡¡¡¡}

¡¡¡¡td

¡¡¡¡{

¡¡¡¡height: 20px;

¡¡¡¡}

¡¡¡¡h1, h2, h3

¡¡¡¡{

¡¡¡¡font-size: 12px;

¡¡¡¡margin: 0;

¡¡¡¡padding: 0;

¡¡¡¡}

¡¡¡¡table.t1

¡¡¡¡{

¡¡¡¡border: 1px solid #cad9ea;

¡¡¡¡color: #666;

¡¡¡¡}

¡¡¡¡table.t1 th

¡¡¡¡{

¡¡¡¡background-image: url(/extjs/resources/images/default/panel/white-top-bottom-gif/coolite.axd);

¡¡¡¡background-repeat: repeat-x;

¡¡¡¡height: 22px;

¡¡¡¡}

¡¡¡¡table.t1 td, table.t1 th

¡¡¡¡{

¡¡¡¡border: 1px solid #cad9ea;

¡¡¡¡padding: 0 1em 0;

¡¡¡¡}

¡¡¡¡table.t1 tr.a1

¡¡¡¡{

¡¡¡¡background-color: #f5fafe;

¡¡¡¡}

¡¡¡¡</style>

¡¡¡¡</head>

¡¡¡¡<body>

¡¡¡¡<ext:ScriptManager ID="ScriptManager1" runat="server" />

¡¡¡¡<form id="form1" runat="server">

¡¡¡¡<div>

¡¡¡¡<ext:Store runat="server" ID="stoContactName">

¡¡¡¡<Proxy>

¡¡¡¡<ext:HttpProxy Url="CustomerHandler.ashx?action=contact" />

¡¡¡¡</Proxy>

¡¡¡¡<Reader>

¡¡¡¡<ext:JsonReader Root="data" TotalProperty="totalCount">

¡¡¡¡<Fields>

¡¡¡¡<ext:RecordField Name="Name" />

¡¡¡¡<ext:RecordField Name="Desc" />

¡¡¡¡</Fields>

¡¡¡¡</ext:JsonReader>

¡¡¡¡</Reader>

¡¡¡¡</ext:Store>

¡¡¡¡<ext:XTemplate ID="TplContactName" runat="server">

¡¡¡¡<div>

¡¡¡¡<table id="data_table" class="t1">

¡¡¡¡<thead>

¡¡¡¡<tr>

¡¡¡¡<th>

¡¡¡¡Name

¡¡¡¡</th>

¡¡¡¡<th>

¡¡¡¡Desc

¡¡¡¡</th>

¡¡¡¡</tr>

¡¡¡¡</thead>

¡¡¡¡<tbody>

¡¡¡¡<tpl for=".">

¡¡¡¡<tr class="search-item">

¡¡¡¡<td>{Name}</td>

¡¡¡¡<td>{Desc}</td>

¡¡¡¡</tr>

¡¡¡¡</tpl>

¡¡¡¡</tbody>

¡¡¡¡</table>

¡¡¡¡</div>

¡¡¡¡</ext:XTemplate>

¡¡¡¡<ext:Store ID="dsCustomers" runat="server" RemoteSort="true" UseIdConfirmation="true">

¡¡¡¡<Proxy>

¡¡¡¡<ext:HttpProxy Url="CustomerHandler.ashx?action=query" />

¡¡¡¡</Proxy>

¡¡¡¡<UpdateProxy>

¡¡¡¡<ext:HttpWriteProxy Url="CustomerHandler.ashx?action=save" />

¡¡¡¡</UpdateProxy>

¡¡¡¡<Reader>

¡¡¡¡<ext:JsonReader ReaderID="CustomerID" Root="data" TotalProperty="totalCount">

¡¡¡¡<Fields>

¡¡¡¡<ext:RecordField Name="CustomerID" SortDir="ASC" />

¡¡¡¡<ext:RecordField Name="CompanyName" />

¡¡¡¡<ext:RecordField Name="ContactName" />

¡¡¡¡<ext:RecordField Name="Email" />

¡¡¡¡<ext:RecordField Name="Phone" />

¡¡¡¡<ext:RecordField Name="Fax" />

¡¡¡¡<ext:RecordField Name="Region" />

¡¡¡¡<ext:RecordField Name="TranDate" Type="Date" />

¡¡¡¡</Fields>

¡¡¡¡</ext:JsonReader>

¡¡¡¡</Reader>

¡¡¡¡<BaseParams>

¡¡¡¡<ext:Parameter Name="limit" Value="15" Mode="Raw" />

¡¡¡¡<ext:Parameter Name="start" Value="0" Mode="Raw" />

¡¡¡¡<ext:Parameter Name="dir" Value="ASC" />

¡¡¡¡<ext:Parameter Name="sort" Value="CustomerID" />

¡¡¡¡</BaseParams>

¡¡¡¡<SortInfo Field="CustomerID" Direction="ASC" />

¡¡¡¡</ext:Store>

¡¡¡¡<ext:ViewPort ID="ViewPort1" runat="server">

¡¡¡¡<Body>

¡¡¡¡<ext:FitLayout ID="FitLayout1" runat="server">

¡¡¡¡<ext:GridPanel ID="GridPanel1" runat="server" Header="false" Border="false" StoreID="dsCustomers"

¡¡¡¡TrackMouseOver="true" ClicksToEdit="1" AutoExpandColumn="CompanyName" Height="500">

¡¡¡¡<ColumnModel ID="ColumnModel1" runat="server">

¡¡¡¡<Columns>

¡¡¡¡<ext:Column ColumnID="CustomerID" DataIndex="CustomerID" Header="ID">

¡¡¡¡<Editor>

¡¡¡¡<ext:TextField ID="TextField1" runat="server" MaxLength="5" AllowBlank="false" />

¡¡¡¡</Editor>

¡¡¡¡</ext:Column>

¡¡¡¡<ext:Column ColumnID="TranDate" DataIndex="TranDate" Header="Tran Date">

¡¡¡¡<Editor>

¡¡¡¡<ext:DateField ID="DateField1" runat="server" Format="yyyy-MM-dd" MsgTarget="Side" />

¡¡¡¡</Editor>

¡¡¡¡</ext:Column>

¡¡¡¡<ext:Column ColumnID="CompanyName" DataIndex="CompanyName" Header="Company Name">

¡¡¡¡<Editor>

¡¡¡¡<ext:TextField ID="TextField2" runat="server" AllowBlank="false" />

¡¡¡¡</Editor>

¡¡¡¡</ext:Column>

¡¡¡¡<ext:Column ColumnID="ContactName" DataIndex="ContactName" Header="Contact Name"

¡¡¡¡Width="150">

¡¡¡¡<Editor>

¡¡¡¡<ext:ComboBox ID="ComboBox1" runat="server" StoreID="stoContactName" DisplayField="Name"

¡¡¡¡ValueField="Name" TypeAhead="false" LoadingText="Searching..." Width="570" PageSize="10"

¡¡¡¡Editable="true" Mode="Remote" MinListWidth="200" ItemSelector="tr.search-item"

¡¡¡¡MinChars="1" MsgTarget="Side" TriggerAction="All" Grow="true">

¡¡¡¡<CustomConfig>

¡¡¡¡<ext:ConfigItem Name="tpl" Value="#{TplContactName}" Mode="Raw" />

¡¡¡¡</CustomConfig>

¡¡¡¡</ext:ComboBox>

¡¡¡¡</Editor>

¡¡¡¡</ext:Column>

¡¡¡¡<ext:Column ColumnID="Email" DataIndex="Email" Header="Email">

¡¡¡¡<Editor>

¡¡¡¡<ext:TextField ID="TextField4" runat="server" Vtype="email" />

¡¡¡¡</Editor>

¡¡¡¡</ext:Column>

¡¡¡¡<ext:Column ColumnID="Phone" DataIndex="Phone" Header="Phone">

¡¡¡¡<Editor>

¡¡¡¡<ext:TextField ID="TextField5" runat="server" />

¡¡¡¡</Editor>

¡¡¡¡</ext:Column>

¡¡¡¡<ext:Column ColumnID="Fax" DataIndex="Fax" Header="Fax">

¡¡¡¡<Editor>

¡¡¡¡<ext:TextField ID="TextField6" runat="server" />

¡¡¡¡</Editor>

¡¡¡¡</ext:Column>

¡¡¡¡<ext:Column ColumnID="Region" DataIndex="Region" Header="Region">

¡¡¡¡<Editor>

¡¡¡¡<ext:TextField ID="TextField7" runat="server" />

¡¡¡¡</Editor>

¡¡¡¡</ext:Column>

¡¡¡¡</Columns>

¡¡¡¡</ColumnModel>

¡¡¡¡<TopBar>

¡¡¡¡<ext:Toolbar ID="Toolbar1" runat="server">

¡¡¡¡<Items>

¡¡¡¡<ext:Button ID="Button1" runat="server" Text="Save" Icon="Disk">

¡¡¡¡<Listeners>

¡¡¡¡<Click Handler="#{dsCustomers}.save();" />

¡¡¡¡</Listeners>

¡¡¡¡</ext:Button>

¡¡¡¡<ext:Button ID="Button3" runat="server" Text="Add" Icon="Add">

¡¡¡¡<Listeners>

¡¡¡¡<Click Handler="#{GridPanel1}.insertRecord(0, {});#{GridPanel1}.getView().focusRow(0);#{GridPanel1}.startEditing(0, 0);" />

¡¡¡¡</Listeners>

¡¡¡¡</ext:Button>

¡¡¡¡<ext:Button ID="Button2" runat="server" Text="Reject Changes" Icon="ArrowUndo">

¡¡¡¡<Listeners>

¡¡¡¡<Click Handler="#{dsCustomers}.rejectChanges();" />

¡¡¡¡</Listeners>

¡¡¡¡</ext:Button>

¡¡¡¡</Items>

¡¡¡¡</ext:Toolbar>

¡¡¡¡</TopBar>

¡¡¡¡<BottomBar>

¡¡¡¡<ext:PagingToolBar ID="PagingToolbar1" runat="server" StoreID="dsCustomers" PageSize="15" />

¡¡¡¡</BottomBar>

¡¡¡¡<Listeners>

¡¡¡¡<BeforeEdit Handler="return !(e.field=='CustomerID' && !e.record.newRecord);" />

¡¡¡¡</Listeners>

¡¡¡¡<LoadMask ShowMask="true" />

¡¡¡¡<SaveMask ShowMask="true" />

¡¡¡¡</ext:GridPanel>

¡¡¡¡</ext:FitLayout>

¡¡¡¡</Body>

¡¡¡¡</ext:ViewPort>

¡¡¡¡</div>

¡¡¡¡</form>

¡¡¡¡</body>

¡¡¡¡</html>

¡¡¡¡CustomerHandler.ashx

¡¡¡¡

¸´ÖÆ´úÂë ´úÂëÈçÏÂ:

¡¡¡¡using System;

¡¡¡¡using System.Collections.Generic;

¡¡¡¡using System.Linq;

¡¡¡¡using System.Web;

¡¡¡¡using Coolite.Ext.Web;

¡¡¡¡namespace WebSPN.Controllers

¡¡¡¡{

¡¡¡¡/// <summary>

¡¡¡¡/// Summary description for $codebehindclassname$

¡¡¡¡/// </summary>

¡¡¡¡//[WebService(Namespace = "http://tempuri.org/")]

¡¡¡¡//[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

¡¡¡¡public class CustomerHandler : IHttpHandler

¡¡¡¡{

¡¡¡¡public void ProcessRequest(HttpContext context)

¡¡¡¡{

¡¡¡¡context.Response.ContentType = "text/plain";

¡¡¡¡string json = "";

¡¡¡¡var Request =context.Request;

¡¡¡¡string action= Request["action"];

¡¡¡¡if (action == "query")

¡¡¡¡{

¡¡¡¡Random rand=new Random();

¡¡¡¡int limit =int .Parse ( Request["limit"]);

¡¡¡¡int start =int .Parse ( Request["start"]);

¡¡¡¡IList<Customer> list = new List<Customer>();

¡¡¡¡for (int i = start; i < start + limit; i++)

¡¡¡¡list.Add(new Customer

¡¡¡¡{

¡¡¡¡CustomerID = "Customer" +i,

¡¡¡¡Address = "Address" +i,

¡¡¡¡City = "City" + rand.Next(1000),

¡¡¡¡CompanyName = "Com" + rand.Next(1000),

¡¡¡¡ContactName = "Contract" + rand.Next(1000),

¡¡¡¡ContactTitle = "Title" + rand.Next(1000),

¡¡¡¡Country = "Country" + rand.Next(1000),

¡¡¡¡Email = rand.Next(1000) + "@live.com",

¡¡¡¡Fax = rand.Next(1000).ToString() + rand.Next(1000),

¡¡¡¡Mobile = rand.Next(1000).ToString() + rand.Next(1000),

¡¡¡¡Notes = "Notes" + rand.Next(1000),

¡¡¡¡Phone = "Phone" + rand.Next(1000),

¡¡¡¡Region = "Region" + rand.Next(1000),

¡¡¡¡TranDate =DateTime .Now .AddDays(rand.Next(30))

¡¡¡¡});

¡¡¡¡json= Coolite.Ext.Web.JSON.Serialize(list);

¡¡¡¡json = "{data:" + json + ", totalCount:" + 100 + "}";

¡¡¡¡context.Response.Write(json);

¡¡¡¡}

¡¡¡¡else if (action == "save")

¡¡¡¡{

¡¡¡¡//saving

¡¡¡¡StoreDataHandler dataHandler = new StoreDataHandler( Request["data"]);

¡¡¡¡ChangeRecords<Customer> data = dataHandler.ObjectData<Customer>();

¡¡¡¡foreach (Customer customer in data.Deleted)

¡¡¡¡{

¡¡¡¡//db.Customers.Attach(customer);

¡¡¡¡//db.Customers.DeleteOnSubmit(customer);

¡¡¡¡}

¡¡¡¡foreach (Customer customer in data.Updated)

¡¡¡¡{

¡¡¡¡//db.Customers.Attach(customer);

¡¡¡¡//db.Refresh(RefreshMode.KeepCurrentValues, customer);

¡¡¡¡}

¡¡¡¡foreach (Customer customer in data.Created)

¡¡¡¡{

¡¡¡¡//db.Customers.InsertOnSubmit(customer);

¡¡¡¡}

¡¡¡¡//db.SubmitChanges();

¡¡¡¡Response sr = new Response(true);

¡¡¡¡sr.Success = true;

¡¡¡¡sr.Write();

¡¡¡¡}

¡¡¡¡else if (action == "contact")

¡¡¡¡{

¡¡¡¡string query = Request["query"]??"";

¡¡¡¡json = "[{Name:'Bruce Lee query:"+query +"',Desc:'skjfkasjdkf'},{Name:'zzz',Desc:'sffffkf'},{Name:'ssse',Desc:'zzzzzzasjdkf'},"+

¡¡¡¡"{Name:'Bruce Lee" + DateTime.Now + "',Desc:'skzzjdkf'},{Name:'zzz',Desc:'sffffkf'},{Name:'ssse',Desc:'zzzzzzasjdkf'}," +

¡¡¡¡"{Name:'Bruce Lee',Desc:'" + DateTime.Now + "'},{Name:'zzz',Desc:'sffffkf'},{Name:'ssse',Desc:'zzzzzzasjdkf'}" +

¡¡¡¡"]";

¡¡¡¡json = "{data:" + json + ", totalCount:" + 20 + "}";

¡¡¡¡context.Response.Write(json);

¡¡¡¡}

¡¡¡¡}

¡¡¡¡public bool IsReusable

¡¡¡¡{

¡¡¡¡get

¡¡¡¡{

¡¡¡¡return false;

¡¡¡¡}

¡¡¡¡}

¡¡¡¡}

¡¡¡¡public partial class Customer

¡¡¡¡{

¡¡¡¡public string CustomerID { get; set; }

¡¡¡¡public string CompanyName { get; set; }

¡¡¡¡public string ContactName { get; set; }

¡¡¡¡public string ContactTitle { get; set; }

¡¡¡¡public string Address { get; set; }

¡¡¡¡public string City { get; set; }

¡¡¡¡public string Region { get; set; }

¡¡¡¡public string PostalCode { get; set; }

¡¡¡¡public string Country { get; set; }

¡¡¡¡public string Phone { get; set; }

¡¡¡¡public string Fax { get; set; }

¡¡¡¡public string Mobile { get; set; }

¡¡¡¡public string Email { get; set; }

¡¡¡¡public string WebPage { get; set; }

¡¡¡¡public string Notes { get; set; }

¡¡¡¡public DateTime TranDate { get; set; }

¡¡¡¡}

¡¡¡¡}