Jun 27, 2016, 10:10 PM
[CLOSED] Issues with Editable GridPanel on PartialView when rendered using Container.Content
Hi Team,
Continuing from same example as we were discussing in this thread . Now I am facing an issue where I have added a combobox on GridPanel on my partial view, and it is not working as expected.
Issue on _CompanyDetail view GridPanel:
1. Name column is set to combobox in editable mode, but when I click the dropdown arrow to select items from the list, the arrow actually makes the control back to non editable cell.
2. Last Updated column is a date column, and on cell editing, when I click on calendar icon, editable field again becomes non editable cell. Means it comes back to original state.
Now in our last thread we spoke on how we can render html + ext.net controls both from partial view on Window by wrapping whole partial view inside Content of Container, I am doing that same, and facing these above issues. But if I remove all the html part, and dont use Container to wrap any content, then things works fine. So it seems like problem is coming up when we wrap content inside container. I am putting same example here, please help us resolve this issue.
***CODE***
Model
Continuing from same example as we were discussing in this thread . Now I am facing an issue where I have added a combobox on GridPanel on my partial view, and it is not working as expected.
Issue on _CompanyDetail view GridPanel:
1. Name column is set to combobox in editable mode, but when I click the dropdown arrow to select items from the list, the arrow actually makes the control back to non editable cell.
2. Last Updated column is a date column, and on cell editing, when I click on calendar icon, editable field again becomes non editable cell. Means it comes back to original state.
Now in our last thread we spoke on how we can render html + ext.net controls both from partial view on Window by wrapping whole partial view inside Content of Container, I am doing that same, and facing these above issues. But if I remove all the html part, and dont use Container to wrap any content, then things works fine. So it seems like problem is coming up when we wrap content inside container. I am putting same example here, please help us resolve this issue.
***CODE***
Model
Imports System.Collections
Imports System.Collections.Generic
Namespace ExtNETExamples
Public Class CompanyModel
Public Property ID() As Integer
Get
Return m_ID
End Get
Set
m_ID = Value
End Set
End Property
Private m_ID As Integer
Public Property Name() As String
Get
Return m_Name
End Get
Set
m_Name = Value
End Set
End Property
Private m_Name As String
Public Property Price() As Double
Get
Return m_Price
End Get
Set
m_Price = Value
End Set
End Property
Private m_Price As Double
Public Property Change() As Double
Get
Return m_Change
End Get
Set
m_Change = Value
End Set
End Property
Private m_Change As Double
Public Property PctChange() As Double
Get
Return m_PctChange
End Get
Set
m_PctChange = Value
End Set
End Property
Private m_PctChange As Double
Public Property LastChange() As DateTime
Get
Return m_LastChange
End Get
Set
m_LastChange = Value
End Set
End Property
Private m_LastChange As DateTime
Public Property companyList As List(Of CompanyModel)
Public Function GetAll() As List(Of CompanyModel)
Dim today As DateTime = DateTime.Today
Return New List(Of CompanyModel)() From {
New CompanyModel() With {
.ID = 1,
.Name = "3m Co",
.Price = 71.72,
.Change = 0.02,
.PctChange = 0.03,
.LastChange = today
},
New CompanyModel() With {
.ID = 2,
.Name = "Alcoa Inc",
.Price = 29.01,
.Change = 0.42,
.PctChange = 1.47,
.LastChange = today
},
New CompanyModel() With {
.ID = 3,
.Name = "Altria Group Inc",
.Price = 83.81,
.Change = 0.28,
.PctChange = 0.34,
.LastChange = today
},
New CompanyModel() With {
.ID = 4,
.Name = "American Express Company",
.Price = 52.55,
.Change = 0.01,
.PctChange = 0.02,
.LastChange = today
},
New CompanyModel() With {
.ID = 5,
.Name = "American International Group, Inc.",
.Price = 64.13,
.Change = 0.31,
.PctChange = 0.49,
.LastChange = today
},
New CompanyModel() With {
.ID = 6,
.Name = "AT&T Inc.",
.Price = 31.61,
.Change = -0.48,
.PctChange = -1.54,
.LastChange = today
}
}
End Function
Public Shared Function GetAllCompanies() As IEnumerable(Of CompanyModel)
Dim now As DateTime = DateTime.Now
Return New Object() {New CompanyModel() With{.Name="3m Co", .Price=71.72, .Change=0.02, .PctChange=0.03, .LastChange=now},
New Object() {"Alcoa Inc", 29.01, 0.42, 1.47, now},
New Object() {"Altria Group Inc", 83.81, 0.28, 0.34, now},
New Object() {"American Express Company", 52.55, 0.01, 0.02, now},
New Object() {"American International Group, Inc.", 64.13, 0.31, 0.49, now},
New Object() {"AT&T Inc.", 31.61, -0.48, -1.54, now}, _
New Object() {"Boeing Co.", 75.43, 0.53, 0.71, now},
New Object() {"Caterpillar Inc.", 67.27, 0.92, 1.39, now},
New Object() {"Citigroup, Inc.", 49.37, 0.02, 0.04, now},
New Object() {"E.I. du Pont de Nemours and Company", 40.48, 0.51, 1.28, now},
New Object() {"Exxon Mobil Corp", 68.1, -0.43, -0.64, now},
New Object() {"General Electric Company", 34.14, -0.08, -0.23, now}, _
New Object() {"General Motors Corporation", 30.27, 1.09, 3.74, now},
New Object() {"Hewlett-Packard Co.", 36.53, -0.03, -0.08, now},
New Object() {"Honeywell Intl Inc", 38.77, 0.05, 0.13, now},
New Object() {"Intel Corporation", 19.88, 0.31, 1.58, now},
New Object() {"International Business Machines", 81.41, 0.44, 0.54, now},
New Object() {"Johnson & Johnson", 64.72, 0.06, 0.09, now}, _
New Object() {"JP Morgan & Chase & Co", 45.73, 0.07, 0.15, now},
New Object() {"McDonald""s Corporation", 36.76, 0.86, 2.4, now},
New Object() {"Merck & Co., Inc.", 40.96, 0.41, 1.01, now},
New Object() {"Microsoft Corporation", 25.84, 0.14, 0.54, now},
New Object() {"Pfizer Inc", 27.96, 0.4, 1.45, now},
New Object() {"The Coca-Cola Company", 45.07, 0.26, 0.58, now}, _
New Object() {"The Home Depot, Inc.", 34.64, 0.35, 1.02, now},
New Object() {"The Procter & Gamble Company", 61.91, 0.01, 0.02, now},
New Object() {"United Technologies Corporation", 63.26, 0.55, 0.88, now},
New Object() {"Verizon Communications", 35.57, 0.39, 1.11, now},
New Object() {"Wal-Mart Stores, Inc.", 45.45, 0.73, 1.63, now}}
End Function
Public Shared Function GetData() As IEnumerable
Dim firstNames = New String() {"Russel", "Clark", "Steve", "Sam", "Lance", "Robert", _
"Sean", "David", "Justin", "Nicolas", "Brent"}
Dim lastNames = New String() {"Wood", "Lewis", "Scott", "Parker", "Ross", "Garcia", _
"Bell", "Kelly", "Powell", "Moore", "Cook"}
Dim ratings = New Integer() {1, 2, 3, 4, 5}
Dim salaries = New Integer() {100, 400, 900, 1500, 1000000}
Dim count As Integer = 50000
Dim data = New Object(count - 1) {}
Dim rnd = New Random()
For i As Integer = 0 To count - 1
Dim ratingId = rnd.[Next](ratings.Length)
Dim salaryId = rnd.[Next](salaries.Length)
Dim firstNameId = rnd.[Next](firstNames.Length)
Dim lastNameId = rnd.[Next](lastNames.Length)
Dim rating = ratings(ratingId)
Dim salary = salaries(salaryId)
Dim name = [String].Format("{0} {1}", firstNames(firstNameId), lastNames(lastNameId))
Dim id = "rec-" + i.ToString()
data(i) = New Object() {id, name, rating, salary}
Next
Return data
End Function
End Class
End Namespace
Home ControllerImports System.Web.Mvc
Imports System.Linq
Imports ExtNETExamples.ExtNETExamples
Imports Ext.Net.MVC
Imports Ext.Net
Namespace Controllers
Public Class HomeController
Inherits Controller
' GET: Home
Function Index() As ActionResult
Dim companyModel As New CompanyModel
companyModel.companyList = companyModel.GetAll()
Return View(companyModel)
End Function
Function InfiniteScrolling() As ActionResult
Return View(companyModel.GetData())
End Function
Function EditDetail(id As Integer, containerId As String) As ActionResult
Dim cmModel As New CompanyModel
cmModel.companyList = cmModel.GetAll().Where(Function(m) m.ID = id).ToList()
If(cmModel.companyList IsNot Nothing)
For each item In cmModel.companyList
cmModel.ID = item.ID
cmModel.Name= item.Name
cmModel.Price = item.Price
cmModel.PctChange = item.PctChange
cmModel.LastChange = item.LastChange
cmModel.Change = item.Change
Next
End If
'Me.GetCmp(Of Container)(containerId).Show()
Dim ret As New Ext.Net.MVC.PartialViewResult()
ret.ViewName = "_CompanyDetail"
ret.Model = cmModel
ret.ContainerId = containerId
ret.RenderMode = RenderMode.AddTo
ret.ClearContainer = True
Me.GetCmp(Of Window)(containerId).Show()
Return ret
End Function
Function RemoveCompany(id As Integer) As ActionResult
Dim cmModel As New CompanyModel
cmModel.companyList = cmModel.GetAll().Where(Function(m) m.ID <> id).ToList()
Return View("Index",cmModel)
End Function
Function SaveCompanyDetail(cmModel As CompanyModel) As ActionResult
Return View()
End Function
End Class
End Namespace
Index View@ModelType ExtNETExamples.ExtNETExamples.CompanyModel
@Code
ViewData("Title") = "Index"
End Code
@(Html.X().ResourceManager())
<h2>Index</h2>
@(Html.X().Menu().ID("ContextMenu").Items(
Html.X().MenuItem().Text("Delete Contact"),
Html.X().MenuItem().Text("Avery 5164"),
Html.X().MenuItem().Text("Copy"),
Html.X().MenuItem().Text("Envelope")
)
)
@Html.X().Menu().ID("GirdContextMenu").Items(Html.X().MenuItem().ID("deleteCxtMenu").Text("Delete ID").DirectEvents(Sub(ls)
ls.Click.Confirmation.ConfirmRequest = True
ls.Click.Confirmation.Message = "Are you sure you want to remove the company?"
ls.Click.Url = Url.Action("RemoveCompany")
ls.Click.ExtraParams.Add(New Parameter("id", "#{GirdContextMenu}.param1", mode:=ParameterMode.Raw))
End Sub).Icon(Icon.Delete),
Html.X().MenuItem().ID("closeCxtMenu").Text("Close Tab").Handler("ConfirmBox"),
Html.X().MenuItem().ID("removeRow").Text("Remove this row").Handler("RemoveRow"))
@(Html.X().GridPanel() _
.Title("Editable GridPanel").OverflowX(Overflow.Scroll).OverflowY(Overflow.Scroll) _
.Height(350) _
.ID("indexGrid") _
.Store(Html.X().Store() _
.ID("Store23") _
.PageSize(500) _
.Buffered(True) _
.Model(Html.X().Model() _
.IDProperty("IDs") _
.Fields(
New ModelField("ID", ModelFieldType.Int),
New ModelField("Name"),
New ModelField("Price", ModelFieldType.Float),
New ModelField("Change", ModelFieldType.Float),
New ModelField("PctChange", ModelFieldType.Float),
New ModelField("LastChange", ModelFieldType.Date)
)
) _
.DataSource(Model.companyList)
) _
.ColumnModel(
Html.X().Column().Text("ID").DataIndex("ID").Width(35),
Html.X().Column() _
.Text("Name") _
.DataIndex("Name") _
.Flex(1),
Html.X().Column() _
.Text("Price") _
.DataIndex("Price") _
.Renderer(RendererFormat.UsMoney),
Html.X().Column() _
.Text("Change") _
.DataIndex("Change"),
Html.X().Column() _
.Text("PctChange") _
.DataIndex("PctChange"),
Html.X().DateColumn() _
.Text("Last Updated") _
.DataIndex("LastChange") _
.Format("yyyy-MM-dd")
).View(Html.X().GridView().StripeRows(True).ID("indexGridView").DirectEvents(Sub(ls)
ls.RowDblClick.Url = Url.Action("EditDetail")
ls.RowDblClick.ExtraParams.Add(New Parameter("id", "record.data.ID", mode:=ParameterMode.Raw))
ls.RowDblClick.ExtraParams.Add(New Parameter("containerId", "detailWindow", mode:=ParameterMode.Value))
End Sub
).Listeners(Sub(ls)
ls.RowContextMenu.Handler = "ShowContextMenu(record.data.ID);e.stopEvent();#{GirdContextMenu}.param1 = record.data.ID; #{GirdContextMenu}.showAt(e.getXY()); return false;"
End Sub)))
@Html.X().Window().ID("detailWindow").Modal(True).Hidden(True).AutoUpdateLayout(True).Width(800)
<script>
function ShowContextMenu(id) {
if (id == 2) {
App.GirdContextMenu.items.get("deleteCxtMenu").disable();
}
else {
App.GirdContextMenu.items.get("deleteCxtMenu").enable();
}
}
function ConfirmBox() {
Ext.Msg.show({
title: 'Save Changes?',
msg: 'You are closing a tab that has unsaved changes. Would you like to save your changes?',
buttons: Ext.Msg.YESNO,
fn: processResult,
animEl: 'elId',
icon: Ext.MessageBox.QUESTION
});
}
function processResult(btn){
if (btn == 'yes') {
Ext.Msg.alert("Aye Yes", "Yes Clicked!!!");
}
}
function RemoveRow() {
var title = 'Confirm';
var msg = 'Are you sure?';
var grid = App.indexGrid;
Ext.Msg.confirm(title, msg, function (btn) {
if (btn == 'yes') {
grid.deleteSelected();
return true;
} else {
return false;
}
});
}
</script>
_CompanyDetail View Problem is in this grid.@ModelType ExtNETExamples.ExtNETExamples.CompanyModel
@(Html.X().Container().Content(
@@<text>
<form action="/Home/SaveCompanyDetail" method="post">
<div Class="modal-content">
<div Class="modal-body">
<div Class="form-horizontal">
<h4> CompanyModel</h4>
<hr />
<div Class="form-group">@Html.X().Menu().ID("PartialGirdContextMenu").Items(Html.X().MenuItem().Text("Delete ID").DirectEvents(Sub(ls)
ls.Click.Confirmation.ConfirmRequest = True
ls.Click.Confirmation.Message = "Are you sure you want to remove the company?"
ls.Click.Url = Url.Action("RemoveCompany")
ls.Click.ExtraParams.Add(New Parameter("id", "#{PartialGirdContextMenu}.param1", mode:=ParameterMode.Raw))
End Sub))
<div>@(Html.X().GridPanel() _
.ID("partialGrid") _
.Store(Html.X().Store() _
.ID("StorePartial") _
.Model(Html.X().Model() _
.IDProperty("partialIDs") _
.Fields(
New ModelField("ID", ModelFieldType.Int),
New ModelField("Name"),
New ModelField("Price", ModelFieldType.Float),
New ModelField("Change", ModelFieldType.Float),
New ModelField("PctChange", ModelFieldType.Float),
New ModelField("LastChange", ModelFieldType.Date)
)
) _
.DataSource(Model.companyList)
) _
.ColumnModel(
Html.X().Column().Text("ID").DataIndex("ID").Width(35),
Html.X().Column().Text("Name").DataIndex("Name").MinWidth(400).Flex(1).Editor(Html.X().ComboBox().Store(Html.X().Store().ID("comboStore").Model(Html.X().Model().Fields(Html.X().ModelField().Name("Name").Mapping("Name").Type(ModelFieldType.String))).DataSource(Model.GetAll)).DisplayField("Name").ValueField("Name")),
Html.X().Column().Text("Price").DataIndex("Price").Renderer(RendererFormat.UsMoney).Editor(Html.X().NumberField()).Flex(1),
Html.X().Column().Text("Change").DataIndex("Change").Editor(Html.X().NumberField()).Flex(1),
Html.X().Column().Text("PctChange").DataIndex("PctChange").Editor(Html.X().NumberField()).Flex(1),
Html.X().DateColumn().Text("Last Updated").DataIndex("LastChange").Format("yyyy-MM-dd").Editor(Html.X().DateField()).Flex(1)
) _
.SelectionModel(Html.X().CellSelectionModel()) _
.Plugins(
Html.X().CellEditing()
) _
.View(Html.X().GridView().ID("partialGridView").Listeners(Sub(ls) ls.RowContextMenu.Handler = "e.stopEvent();App.PartialGirdContextMenu.param1= record.data.ID;App.PartialGirdContextMenu.showAt(e.getXY()); return false;")))</div>
</div>
</div>
</div>
<div Class="modal-footer">
<input type="submit" Class="btn btn-default" value="Save" />
</div>
</div>
</form></text>).DestroyContent(True))