Jun 29, 2009, 4:49 PM
[CLOSED] Error 500 saving grid store
I have the following store:
<ext:Store ID="Store1" runat="server">
<Proxy>
<ext:HttpProxy Method="POST" Url="EnterBillWebService.asmx/GetBillData" Json="true">
<Headers>
<ext:Parameter Name="Content-Type" Value="application/json; charset=utf-8" Mode="Value"></ext:Parameter>
</Headers>
</ext:HttpProxy>
</Proxy>
<UpdateProxy>
<ext:HttpWriteProxy Method="POST" HandleSaveResponseAsXml="true" Url="EnterBillWebService.asmx/SaveBillData" />
</UpdateProxy>
<Reader>
<ext:JsonReader ReaderID="LineId" Root="d">
<Fields>
<ext:RecordField Name="ItemName" />
<ext:RecordField Name="ItemValue" Type="Float" />
<ext:RecordField Name="ItemId" Type="Int" />
<ext:RecordField Name="LineId" />
</Fields>
</ext:JsonReader>
</Reader>
<BaseParams>
<ext:Parameter Name="billId" Value="#{GridPanel1}.getSelectionModel().hasSelection() ? #{GridPanel1}.getSelectionModel().getSelected().data.LineId : '-1'"
Mode="Raw" />
</BaseParams>
<Listeners>
<LoadException Handler="var e = e || {message: response.responseText}; alert('Load failed: ' + e.message);" />
<SaveException Handler="alert('save failed');" />
<CommitDone Handler="alert('commit success');" />
<CommitFailed Handler="alert('Commit failed\nReason: '+msg)" />
</Listeners>
</ext:Store>
and the following grid definition:<ext:GridPanel ID="GridPanel1" runat="server" StoreID="Store1" StripeRows="true"
Title="Array Grid" TrackMouseOver="true" AutoExpandColumn="ItemName" Height="300"
Hidden="false" Header="false" Width="800" AutoScroll="true">
<ColumnModel ID="ColumnModel1" runat="server">
<Columns>
<ext:Column ColumnID="ItemName" Header="Item Name" Width="75" Sortable="true" DataIndex="ItemName">
<Editor>
<ext:TextField ID="TextField10" runat="server" />
</Editor>
</ext:Column>
<ext:Column Header="Item Value" Width="75" Sortable="true" DataIndex="ItemValue">
<Editor>
<ext:TextField ID="TextField11" runat="server" />
</Editor>
</ext:Column>
<ext:Column Header="Item Id" Width="75" Sortable="true" DataIndex="ItemId">
<Editor>
<ext:TextField ID="TextField12" runat="server" />
</Editor>
</ext:Column>
<ext:Column Header="Line Id" Width="85" Sortable="true" DataIndex="LineId">
<Editor>
<ext:TextField ID="TextField13" runat="server" />
</Editor>
</ext:Column>
</Columns>
</ColumnModel>
<LoadMask ShowMask="true" />
<SaveMask ShowMask="true" />
<SelectionModel>
<ext:RowSelectionModel ID="RowSelectionModel1" SingleSelect="false" runat="server">
<Listeners>
<RowSelect Handler="#{BtnDelete}.enable();" />
<RowDeselect Handler="if (!#{GridPanel1}.hasSelection()) {#{BtnDelete}.disable();}" />
</Listeners>
</ext:RowSelectionModel>
</SelectionModel>
<Buttons>
<ext:Button ID="Button1" runat="server" Text="Add" AutoPostBack="false" Icon="Add">
<Listeners>
<Click Handler="var rowIndex = #{GridPanel1}.addRecord(); #{GridPanel1}.getView().focusRow(rowIndex); #{GridPanel1}.startEditing(rowIndex, 0);" />
</Listeners>
</ext:Button>
<ext:Button ID="Button2" runat="server" Text="Insert" AutoPostBack="false" Icon="Add">
<Listeners>
<Click Handler="#{GridPanel1}.insertRecord(0, {});#{GridPanel1}.getView().focusRow(0);#{GridPanel1}.startEditing(0, 0);" />
</Listeners>
</ext:Button>
<ext:Button ID="BtnDelete" runat="server" Text="Delete" AutoPostBack="false" Icon="Delete" Disabled="true">
<Listeners>
<Click Handler="#{GridPanel1}.deleteSelected();if (!#{GridPanel1}.hasSelection()) {#{BtnDelete}.disable();}" />
</Listeners>
</ext:Button>
<ext:Button ID="Button3" runat="server" Text="Save" AutoPostBack="false" Icon="Disk">
<Listeners>
<Click Handler="#{GridPanel1}.save();" />
</Listeners>
</ext:Button>
<ext:Button ID="Button4" runat="server" Text="Clear" AutoPostBack="false" Icon="Cancel">
<Listeners>
<Click Handler="#{GridPanel1}.clear();if (!#{GridPanel1}.hasSelection()) {#{BtnDelete}.disable();}" />
</Listeners>
</ext:Button>
<ext:Button ID="Button5" runat="server" Text="Refresh" AutoPostBack="false" Icon="ArrowRefresh">
<Listeners>
<Click Handler="#{GridPanel1}.reload();" />
</Listeners>
</ext:Button>
</Buttons>
<Plugins>
<ext:PanelResizer ID="PanelResizer1" runat="server" MinHeight="100" />
</Plugins>
</ext:GridPanel>
and the following code in EnterBillWebService.csusing System;
using System.Collections.Generic;
using System.Web.Services;
using Coolite.Ext.Web;
/// <summary>
/// Summary description for EnterBillWebService
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class EnterBillWebService : WebService
{
[WebMethod]
public BillData[] GetBillData(string billId)
{
BillData[] billDataArray = new BillData[1];
billDataArray[0] = new BillData("item1", (decimal)10.23, 1, "Line1");
return billDataArray;
}
[WebMethod]
public Response SaveBillData(string data)
{
Response sr = new Response(true);
try
{
StoreDataHandler dataHandler = new StoreDataHandler(data);
//Convert data to business objects collection
ChangeRecords<BillData> dataList = dataHandler.ObjectData<BillData>();
//performs update actions
foreach (BillData customer in dataList.Deleted)
{
//Customers.Delete(customer);
}
foreach (BillData customer in dataList.Updated)
{
//Customers.Update(customer);
}
foreach (BillData customer in dataList.Created)
{
//Customers.Insert(customer);
}
}
catch (Exception e)
{
//if were errors then we should to tell client that saving request was unsuccessful
sr.Success = false;
sr.Msg = e.Message;
}
return sr;
}
}
public class BillData
{
public BillData(string itemName, decimal itemValue, int itemId, string lineId)
{
ItemName = itemName;
ItemValue = itemValue;
ItemId = itemId;
LineId = lineId;
}
public string ItemName;
public decimal ItemValue;
public int ItemId;
public string LineId;
}
If I modify a row in the grid (add a new one or modify existing one) and hit the save button, I get error 500 "internal server error". None of my break points on the server is hit.