PDA

View Full Version : [CLOSED] GridPanel with selected rows Strange Behaviour



glenh
Jul 16, 2015, 8:24 AM
Hi

I have a GridPanel which I have set to RowSelectionModel Mode=Simple. This allows me to make some selections over multiple grid rows. However I have a couple of problems.



When I use selModel.clearSelections() the selections are cleared but the grid still shows them selected. I have to call the grid.getView().refresh() for this to make the grid appear with no selections. Is this normal it seems like that is a bug?
If I reload the data by clicking a button via a DirectEvent the selections that were cleared are reloaded.


I have included an example to demonstrate....please also note that number (2) only happens if you set an IDProperty on the Model...removing this ID Property does not have the undesired behaviour.

To replicate :


Load Page
Select multiple rows in grid
Click the Deselect button
Press the reload button





<!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>
<link href="/UI/css/main.css" rel="stylesheet" type="text/css" />
<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 + "%");
};


var clearSelections = function() {
var grid = <%= GridPanel1.ClientID %>,
selModel = grid.getSelectionModel();


selModel.clearSelections();
grid.getView().refresh();
};
</script>
</head>
<body>
<form id="form1" runat="server">
<div>

<ext:ResourceManager ID="ResourceManager1" runat="server" />

<ext:GridPanel
ID="GridPanel1"
runat="server"
Title="Array Grid"
Width="600"
Cls="flash-grid"
Height="350">
<Store>
<ext:Store ID="Store1" runat="server">
<Model>
<ext:Model runat="server" IDProperty="company">
<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" DataIndex="company" Flex="1" />
<ext:Column runat="server" Text="Price" DataIndex="price">
<Renderer Format="UsMoney" />
</ext:Column>
<ext:Column runat="server" Text="Change" DataIndex="change">
<Renderer Fn="change" />
</ext:Column>
<ext:Column runat="server" Text="Change" DataIndex="pctChange">
<Renderer Fn="pctChange" />
</ext:Column>
<ext:DateColumn runat="server" Text="Last Updated" DataIndex="lastChange" />
</Columns>
</ColumnModel>
<SelectionModel>
<ext:RowSelectionModel runat="server" Mode="Simple" />
</SelectionModel>
<BottomBar>
<ext:Toolbar runat="server">
<Items>
<ext:Button runat="server" Text="Deselect" Handler="clearSelections();" />
<ext:Button runat="server" Text="Reload">
<DirectEvents>
<Click OnEvent="Reload"></Click>
</DirectEvents>
</ext:Button>
</Items>
</ext:Toolbar>
</BottomBar>
</ext:GridPanel>
</div>
</form>
</body>
</html>






protected void Page_Load(object sender, EventArgs e)
{
if (!X.IsAjaxRequest)
{
this.Store1.DataSource = this.Data;
this.Store1.DataBind();
}
}


protected void Reload(object sender, DirectEventArgs e)
{
this.Store1.DataSource = this.Data;
this.Store1.DataBind();
}


private object[] Data
{
get
{
return 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"}
};
}
}

glenh
Jul 16, 2015, 9:44 PM
Hi Danil

Sorry I found that deselectAll does the trick...I had just read previous posts that suggsted clearSelections.

All fixed

Regards
Glen