PDA

View Full Version : [CLOSED] RemoteValidation on textField doesn't work with CellEditing plugin



tactime10
Nov 22, 2013, 4:35 PM
Hi,

I tried to set RemoteValidation on textField in my gridPanel with CellEditing plugin, and I see that textField is always empty because the e.Success on CheckField method return always true.



<%@ Page Language="C#" %>

<%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>

<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (!X.IsAjaxRequest)
{
this.GridPanel1.Store.Primary.DataSource = new object[]
{
new object[] { "3m Co", 71.72, 0.02, 0.03, "9/1 12:00am" },
new object[] { "Alcoa Inc", 29.01, 0.42, 1.47, "9/1 12:00am" },
new object[] { "Altria Group Inc", 83.81, 0.28, 0.34, "9/1 12:00am" },
new object[] { "American Express Company", 52.55, 0.01, 0.02, "9/1 12:00am" },
new object[] { "American International Group, Inc.", 64.13, 0.31, 0.49, "9/1 12:00am" },
new object[] { "AT&T Inc.", 31.61, -0.48, -1.54, "9/1 12:00am" },
new object[] { "Boeing Co.", 75.43, 0.53, 0.71, "9/1 12:00am" },
new object[] { "Caterpillar Inc.", 67.27, 0.92, 1.39, "9/1 12:00am" },
new object[] { "Citigroup, Inc.", 49.37, 0.02, 0.04, "9/1 12:00am" },
new object[] { "E.I. du Pont de Nemours and Company", 40.48, 0.51, 1.28, "9/1 12:00am" },
new object[] { "Exxon Mobil Corp", 68.1, -0.43, -0.64, "9/1 12:00am" },
new object[] { "General Electric Company", 34.14, -0.08, -0.23, "9/1 12:00am" },
new object[] { "General Motors Corporation", 30.27, 1.09, 3.74, "9/1 12:00am" },
new object[] { "Hewlett-Packard Co.", 36.53, -0.03, -0.08, "9/1 12:00am" },
new object[] { "Honeywell Intl Inc", 38.77, 0.05, 0.13, "9/1 12:00am" },
new object[] { "Intel Corporation", 19.88, 0.31, 1.58, "9/1 12:00am" },
new object[] { "International Business Machines", 81.41, 0.44, 0.54, "9/1 12:00am" },
new object[] { "Johnson & Johnson", 64.72, 0.06, 0.09, "9/1 12:00am" },
new object[] { "JP Morgan & Chase & Co", 45.73, 0.07, 0.15, "9/1 12:00am" },
new object[] { "McDonald\"s Corporation", 36.76, 0.86, 2.40, "9/1 12:00am" },
new object[] { "Merck & Co., Inc.", 40.96, 0.41, 1.01, "9/1 12:00am" },
new object[] { "Microsoft Corporation", 25.84, 0.14, 0.54, "9/1 12:00am" },
new object[] { "Pfizer Inc", 27.96, 0.4, 1.45, "9/1 12:00am" },
new object[] { "The Coca-Cola Company", 45.07, 0.26, 0.58, "9/1 12:00am" },
new object[] { "The Home Depot, Inc.", 34.64, 0.35, 1.02, "9/1 12:00am" },
new object[] { "The Procter & Gamble Company", 61.91, 0.01, 0.02, "9/1 12:00am" },
new object[] { "United Technologies Corporation", 63.26, 0.55, 0.88, "9/1 12:00am" },
new object[] { "Verizon Communications", 35.57, 0.39, 1.11, "9/1 12:00am" },
new object[] { "Wal-Mart Stores, Inc.", 45.45, 0.73, 1.63, "9/1 12:00am" }
};

this.GridPanel1.Store.Primary.DataBind();
}
}

protected void CheckField(object sender, RemoteValidationEventArgs e) {
TextField field = (TextField)sender;

if ((field.Text != null) || (!field.Text.Equals(""))) {
e.Success = true;
} else {
e.Success = false;
e.ErrorMessage = "empty field";
}
X.Msg.Alert("Message ", "e.Success " + e.Success + "textField value " + field.Text).Show();

System.Threading.Thread.Sleep(1000);
}
</script>

<!DOCTYPE html>

<html>
<head runat="server">
<title>Column Cell Editing - Ext.NET Examples</title>
<link href="/resources/css/examples.css" rel="stylesheet" />

<script>
var template = '<span style="color:{0};">{1}</span>';

var change = function (value) {
return Ext.String.format(template, (value > 0) ? "green" : "red", value);
};

var pctChange = function (value) {
return Ext.String.format(template, (value > 0) ? "green" : "red", value + "%");
};
</script>
</head>
<body>
<ext:ResourceManager runat="server" />

<ext:GridPanel
ID="GridPanel1"
runat="server"
ColumnLines="true"
Title="Grid"
Width="600"
Height="350">
<Store>
<ext:Store runat="server">
<Model>
<ext:Model runat="server">
<Fields>
<ext:ModelField Name="company" />
<ext:ModelField Name="price" Type="Float" />
<ext:ModelField Name="change" Type="Float" />
<ext:ModelField Name="pctChange" Type="Float" />
<ext:ModelField Name="lastChange" Type="Date" DateFormat="M/d hh:mmtt" />
</Fields>
</ext:Model>
</Model>
</ext:Store>
</Store>
<ColumnModel>
<Columns>
<ext:Column runat="server" Text="Company<br>Name" DataIndex="company" Width="200" >
<Editor>
<ext:TextField runat="server" IsRemoteValidation="true">
<RemoteValidation OnValidation="CheckField" />
</ext:TextField>
</Editor>
</ext:Column>

<ext:Column runat="server" Text="Price" DataIndex="price" Width="97" Lockable="false">
<Renderer Format="UsMoney" />
<Editor>
<ext:NumberField runat="server" />
</Editor>
</ext:Column>

<ext:Column runat="server" Text="Change" DataIndex="change" Width="97">
<Renderer Fn="change" />
<Editor>
<ext:NumberField runat="server" />
</Editor>
</ext:Column>

<ext:Column runat="server" Text="% Change" DataIndex="pctChange" Width="97">
<Renderer Fn="pctChange" />
<Editor>
<ext:NumberField runat="server" />
</Editor>
</ext:Column>

<ext:DateColumn runat="server" Text="Last Updated" DataIndex="lastChange" Width="97">
<Editor>
<ext:DateField runat="server" />
</Editor>
</ext:DateColumn>
</Columns>
</ColumnModel>
<SelectionModel>
<ext:CellSelectionModel runat="server" />
</SelectionModel>
<Plugins>
<ext:CellEditing runat="server" ClicksToEdit="1" />
</Plugins>
</ext:GridPanel>
</body>
</html>


There is another way also without remoteValidation to take value of the textField?
Thank you.

Baidaly
Nov 22, 2013, 9:14 PM
Hello!

Try to use the following:


protected void CheckField(object sender, RemoteValidationEventArgs e) {
if (!string.IsNullOrEmpty(e.Value.ToString()))
{
e.Success = true;
} else {
e.Success = false;
e.ErrorMessage = "empty field";
}
X.Msg.Alert("Message ", "e.Success " + e.Success + "textField value " + e.Value).Show();

System.Threading.Thread.Sleep(1000);
}

However, you should understand that RemoteValidation is not designed to work with CellEditing plugin due to specifics of CellEditing plugin and there are can be some problems. RemoteValidation mainly should be used with FormPanels.

tactime10
Nov 22, 2013, 10:26 PM
However, you should understand that RemoteValidation is not designed to work with CellEditing plugin due to specifics of CellEditing plugin and there are can be some problems. RemoteValidation mainly should be used with FormPanels.


yes of course, I need to understand which is the best way for validate the fields on the cellediting plugin before to save element on database.
For example I need to understand if in one column there is a duplicate when cell value is changed
Can you help me for this issue?

Baidaly
Nov 22, 2013, 11:13 PM
I'd try to use validateedit event: http://docs.sencha.com/extjs/4.1.3/#!/api/Ext.grid.plugin.CellEditing-event-validateedit .

In this handler I'd remember the value, mask the grid and return false. When the response comes to the client and if it's valid you should set the new valid value and unmask the grid, if it's not then just unmask the grid.