Hi,
UserControl Page.
Grid.ascx:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="GrdTipoContato.ascx.cs" Inherits="CRMWeb.View.grdTipoContato" %>
<%@ Register Assembly="Coolite.Ext.Web" Namespace="Coolite.Ext.Web" TagPrefix="ext" %>
<%@ Register Src="~/View/frmTipoContato.ascx" TagName="TipoContato" TagPrefix="UC1" %>
<script type="text/javascript">
function GridPanel1() { return eval('<%=GridPanel1.ClientID%>'); }
function confirmaExclusaoTipoContato(button, e) {
if (GridPanel1().getSelectionModel().hasSelection()) {
Ext.Msg.confirm(
"Alerta",
"Confirma Exclusão <br> " + GridPanel1().getSelectionModel().getSelected().data.tctDescricao + " ?",
retornoAjaxEvent.createDelegate(button, [button, e], true),
button
);
return false;
}
else {
Ext.Msg.alert("Alerta", "Selecione um registro...");
}
}
function retornoAjaxEvent(btnId, text, sender, e) {
if (btnId == 'yes') {
sender.ajaxEvents.click.fn.apply(sender, [sender, e]);
}
}
</script>
<ext:ScriptManagerProxy ID="ScriptMangerProxy1" runat="server">
</ext:ScriptManagerProxy>
<ext:DesktopWindow
ID="TipoContato"
runat="server"
Collapsible="true"
IconCls="icon-phone16"
Title="Tipos de Contatos"
BodyStyle="padding: 6px;"
Width="400"
Height="360"
Minimizable="false"
Maximizable="false">
<CustomConfig>
<ext:ConfigItem Name="maximizable" Value="false" Mode="Raw" />
</CustomConfig>
<body>
<ext:Store ID="StoreTipoContato" runat="server" AutoLoad="true" OnRefreshData="RefreshData1" RefreshAfterSaving="Auto" >
<%-- <Proxy>
<ext:DataSourceProxy/>
</Proxy>
--%>
<Reader>
<ext:JsonReader ReaderID="tctId">
<Fields>
<ext:RecordField Name="tctId"/>
<ext:RecordField Name="tctDescricao"/>
</Fields>
</ext:JsonReader>
</Reader>
</ext:Store>
<ext:GridPanel
ID="GridPanel1"
runat="server"
StoreID="StoreTipoContato"
StripeRows="true"
Border="false"
SelectionMemory="Disabled"
Height="265">
<TopBar>
<ext:Toolbar ID="Toolbar1" runat="server">
<Items>
<ext:ToolbarButton ID="btnInserir" runat="server" Icon="Add">
<AjaxEvents>
<Click OnEvent="Novo">
</Click>
</AjaxEvents>
<ToolTips>
<ext:ToolTip Html="Novo Tipo Contato"></ext:ToolTip>
</ToolTips>
</ext:ToolbarButton>
<ext:ToolbarSeparator ID="ToolbarSeparator1" runat="server">
</ext:ToolbarSeparator>
<ext:ToolbarButton ID="btnEditar" runat="server" Icon="ApplicationEdit" Enabled="false">
<AjaxEvents>
<Click OnEvent="Editar">
<ExtraParams>
<ext:Parameter Name="id" Value="#{GridPanel1}.getSelectionModel().hasSelection() ? #{GridPanel1}.getSelectionModel().getSelected().data.tctId : -1" Mode="Raw" />
</ExtraParams>
</Click>
</AjaxEvents>
<ToolTips>
<ext:ToolTip Html="Editar Tipo Contato"></ext:ToolTip>
</ToolTips>
</ext:ToolbarButton>
<ext:ToolbarSeparator ID="ToolbarSeparator2" runat="server">
</ext:ToolbarSeparator>
<ext:ToolbarButton ID="btnExcluir" runat="server" Icon="Cross" Enabled="false">
<Listeners>
<Click fn="confirmaExclusaoTipoContato" />
</Listeners>
<AjaxEvents>
<Click OnEvent="Excluir" >
<ExtraParams>
<ext:Parameter Name="id" Value="#{GridPanel1}.getSelectionModel().hasSelection() ? #{GridPanel1}.getSelectionModel().getSelected().data.tctId : -1" Mode="Raw" />
</ExtraParams>
</Click>
</AjaxEvents>
<ToolTips>
<ext:ToolTip Html="Excluir Tipo Contato"></ext:ToolTip>
</ToolTips>
</ext:ToolbarButton>
<ext:ToolbarSeparator ID="ToolbarSeparator3" runat="server">
</ext:ToolbarSeparator>
<ext:ToolbarButton ID="btnSair" runat="server" Icon="DoorOut">
<Listeners>
<Click Handler="#{TipoContato}.hide(null);" />
</Listeners>
<ToolTips>
<ext:ToolTip Html="Sair"></ext:ToolTip>
</ToolTips>
</ext:ToolbarButton>
</Items>
</ext:Toolbar>
</TopBar>
<ColumnModel ID="ColumnModel1" runat="server">
<Columns>
<ext:Column ColumnID="tctId" Header="Id" Width="25" Sortable="true" DataIndex="tctId"></ext:Column>
<ext:Column ColumnID="tctDescricao" Header="Descrição" Width="320" Sortable="true" DataIndex="tctDescricao"></ext:Column>
</Columns>
</ColumnModel>
<SelectionModel>
<ext:RowSelectionModel ID="RowSelectionModel1" runat="server">
<Listeners>
<RowSelect Handler="#{btnEditar}.enable();#{btnExcluir}.enable(); " />
<RowDeselect Handler="if (!#{GridPanel1}.hasSelection()) {#{btnEditar}.disable();#{btnExcluir}.disable() }" />
</Listeners>
</ext:RowSelectionModel>
</SelectionModel>
<LoadMask ShowMask="true" Msg="Atualizando Grid ..."/>
<BottomBar>
<ext:PagingToolBar ID="PagingToolBar1"
runat="server"
PageSize="10"
StoreID="StoreTipoContato"
PrevText="Página Anterior"
NextText="Próxima Página"
BeforePageText="Página"
AfterPageText="de"
LastText="Última Página"
FirstText="Primeira Página"
DisplayInfo="true"
EmptyMsg="Não há Registros"
RefreshText="Recarregar"
DisplayMsg="Registro {0} - {1} de {2}"/>
</BottomBar>
<AjaxEvents>
<RowDblClick OnEvent="Editar">
<ExtraParams>
<ext:Parameter Name="id" Value="#{GridPanel1}.getSelectionModel().getSelected().data.tctId" Mode="Raw" />
</ExtraParams>
</RowDblClick>
</AjaxEvents>
</ext:GridPanel>
<UC1:TipoContato ID="uc1" runat="server" />
</body>
</ext:DesktopWindow>
Grid.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Coolite.Ext.Web;
using CRMWeb.Controller;
using CRMWeb.View;
using CRMModel.Model;
namespace CRMWeb.View
{
public partial class grdTipoContato : System.Web.UI.UserControl
{
protected void Page_Init(object sender, EventArgs e)
{
this.uc1.GridStore = this.StoreTipoContato;
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Ext.IsAjaxRequest)
{
this.StoreTipoContato.DataSource = CrmTipoContato.FindAll();
this.StoreTipoContato.DataBind();
}
}
protected void RefreshData1(object sender, StoreRefreshDataEventArgs e)
{
this.StoreTipoContato.DataSource = CrmTipoContato.FindAll();
this.StoreTipoContato.DataBind();
}
protected void Editar(object sender, AjaxEventArgs e)
{
string id = e.ExtraParams["id"];
if (int.Parse(id) != -1)
{
this.uc1.SetTipoContato(CrmTipoContatoController.Retornar(int.Parse(id)));
this.uc1.ShowTipoContato();
}
else
{
this.ScriptMangerProxy1.AddScript("Ext.Msg.alert('Alerta','{0}');", "Selecione um Registro...");
}
}
protected void Excluir(object sender, AjaxEventArgs e)
{
string id = e.ExtraParams["id"];
if (int.Parse(id) != -1)
{
CrmTipoContato obj = CrmTipoContato.FindById(int.Parse(id));
CrmTipoContatoController.Excluir(obj);
this.StoreTipoContato.DataSource = CrmTipoContato.FindAll();
this.StoreTipoContato.DataBind();
}
else
{
this.ScriptManagerProxy1.AddScript("Ext.Msg.alert('Alerta','{0}');", "Selecione um Registro...");
}
}
protected void Novo(object sender, AjaxEventArgs e)
{
this.uc1.ShowTipoContato();
}
protected void Sair(object sender, EventArgs e)
{
}
}
}
FrmTipoContato.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="FrmTipoContato.ascx.cs" Inherits="CRMWeb.View.frmTipoContato" %>
<%@ Register Assembly="Coolite.Ext.Web" Namespace="Coolite.Ext.Web" TagPrefix="ext" %>
<ext:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">
</ext:ScriptManagerProxy>
<ext:Window ID="winTipoContato"
runat="server"
Collapsible="true"
IconCls="icon-phone16"
Title="Cadastro Tipos Contatos"
Showonload="false"
Width="406"
Height="125"
BodyStyle="padding: 6px;"
CloseAction="Hide"
>
<TopBar>
<ext:Toolbar ID="Toolbar1" runat="server">
<Items>
<ext:ToolbarButton ID="btnGravarSair" runat="server" Icon="Disk">
<AjaxEvents>
<Click OnEvent="GravarSair">
<EventMask ShowMask="true" Msg="Gravando Registro ..."/>
</Click>
</AjaxEvents>
</ext:ToolbarButton>
<ext:ToolbarButton ID="btnGravar" runat="server" Icon="DiskMagnify">
<AjaxEvents>
<Click OnEvent="Gravar">
<EventMask ShowMask="true" Msg="Gravando Registro ..."/>
</Click>
</AjaxEvents>
</ext:ToolbarButton>
<ext:ToolbarSeparator ID="ts" runat="server">
</ext:ToolbarSeparator>
<ext:Button ID="btnSair" runat="server" Icon="DoorIn">
<AjaxEvents>
<Click OnEvent="Sair"></Click>
</AjaxEvents>
</ext:Button>
</Items>
</ext:Toolbar>
</TopBar>
<Body>
<ext:TextField ID="txtTctId" runat="server" Hidden="true"></ext:TextField>
<ext:FormLayout ID="FormLayout1" runat="server" LabelAlign="Top" LabelSeparator="">
<ext:Anchor>
<ext:TextField Name="CrmTipoContato.Descricao" ID="txtTctDescricao" runat="server" FieldLabel="Descrição" Width="380">
</ext:TextField>
</ext:Anchor>
</ext:FormLayout>
</Body>
<AjaxEvents>
<Hide OnEvent="Sair" Delay="10"></Hide>
</AjaxEvents>
</ext:Window>
FrmTipoContato.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Castle.MonoRail.Framework;
using CRMModel.Model;
using CRMWeb.Controller;
using Coolite.Ext.Web;
namespace CRMWeb.View
{
public partial class frmTipoContato : System.Web.UI.UserControl
{
public Store GridStore
{
get;
set;
}
public void ShowTipoContato()
{
this.winTipoContato.Show();
this.txtTctDescricao.Focus(true, 1);
}
public void SetTipoContato(CrmTipoContato obj)
{
this.txtTctId.Text = obj.tctId.ToString();
this.txtTctDescricao.Text = obj.tctDescricao;
}
protected void LimparCampos()
{
txtTctDescricao.Text = "";
txtTctId.Text = "";
}
protected void Atualizar()
{
if (txtTctId.Text == "")
{
CrmTipoContato obj = new CrmTipoContato();
obj.tctDescricao = txtTctDescricao.Text;
CrmTipoContatoController.Incluir(obj);
}
else
{
CrmTipoContato obj = CrmTipoContato.FindById(int.Parse(txtTctId.Text));
obj.tctDescricao = txtTctDescricao.Text;
CrmTipoContatoController.Alterar(obj);
}
}
protected void Gravar(object sender, AjaxEventArgs e)
{
Atualizar();
LimparCampos();
this.GridStore.AddScript(string.Format("{0}.reload();", this.GridStore.ClientID));
}
protected void GravarSair(object sender, AjaxEventArgs e)
{
Atualizar();
LimparCampos();
this.GridStore.AddScript(string.Format("{0}.reload();", this.GridStore.ClientID));
this.winTipoContato.Hide();
}
protected void Sair(object sender, AjaxEventArgs e)
{
LimparCampos();
this.winTipoContato.Hide();
}
}
}