Inquiridor
Problema ao usar ObjectDataSource - Object does not match target type.

Pergunta
-
Estou usando um ObjectDataSource para preencher um grid, mas não quero utilizar banco de dados para isso.
Utilizo tbm um ASPX GridView da devExpress. Com colunas de Novo, Editar e Deletar.
O problema q ocorre é: Estou utilizando uma lista para armazenar os dados q são inseridos e retornando para o grid com o método select do objectdatasource. Quando Insiro um novo registro, O object datasource reseta todos os dados das variáveis q estão dentro da classe q possui os métodos de inserção, alteração, deleção e consulta do datasource. Procurei algo sobre ObjectCreating e parece q funciona para o q eu desejo, porém ainda está dando um erro dizendo q o objeto não encontra o tipo alvo.
abaixo está o código aspx e aspx.cs. Fico grato pela ajuda.
WebForm.aspx
<%@ Import Namespace="TedASP2" %>
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm5.aspx.cs" Inherits="TedASP2.WebForm5" %>
<%@ Register Assembly="DevExpress.Web.ASPxEditors.v11.2, Version=11.2.11.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a"
Namespace="DevExpress.Web.ASPxEditors" TagPrefix="dx" %>
<%@ Register Assembly="DevExpress.Web.ASPxGridView.v11.2, Version=11.2.11.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a"
Namespace="DevExpress.Web.ASPxGridView" TagPrefix="dx" %>
<%@ Register Assembly="DevExpress.Web.v11.2, Version=11.2.11.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a"
Namespace="DevExpress.Web.ASPxPopupControl" TagPrefix="dx" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
//cache da variável
private void GetListLogic(object sender, ObjectDataSourceEventArgs e)
{
//Primeiramente checa para ver se uma instância desse objeto já existe no cache
ListEndereco cachedLogic;
cachedLogic = Cache["ListEndereco"] as ListEndereco;
if (null == cachedLogic)
{
cachedLogic = new ListEndereco();
}
e.ObjectInstance = cachedLogic;
}
private void ReturnListLogic(object sender, ObjectDataSourceDisposingEventArgs e)
{
// Pega a instância do objeto com a qual o ObjectDataSource está trabalhando
ListEndereco cachedLogic = e.ObjectInstance as ListEndereco;
//Testa para determinar se a instância está no cache
ListEndereco temp = Cache["ListEndereco"] as ListEndereco;
if (null == temp)
{
// Se já existe no cache, adiciona
Cache.Insert("ListEndereco", cachedLogic);
}
// Cancela o evento, então o objeto nunca será Descartado(Disposed) caso ele implemente IDisposable
e.Cancel = true;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<style type="text/css">
a:link, a:visited
{
color: #034af3;
height: 20px;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="True">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<div>
<dx:ASPxGridView ID="gridEndereco" runat="server" AutoGenerateColumns="False" CssFilePath="~/App_Themes/Office2010Blue/{0}/styles.css"
CssPostfix="Office2010Blue" DataSourceID="objEndereco" KeyFieldName="NrEnd" Width="980px"
ViewStateMode="Disabled" EnableTheming="True" KeyboardSupport="True">
<SettingsBehavior AllowFocusedRow="True" AllowSelectByRowClick="True" AllowSelectSingleRowOnly="True"
AllowSort="False" />
<SettingsEditing Mode="Inline" NewItemRowPosition="Bottom" />
<SettingsText CommandCancel="Cancelar" CommandUpdate="Salvar" EmptyDataRow="Não há dados para serem visualizados." />
<SettingsCustomizationWindow Enabled="True" />
<SettingsLoadingPanel Text="Carregando&hellip;" />
<SettingsBehavior AllowFocusedRow="True" AllowSelectByRowClick="True" AllowSelectSingleRowOnly="True"
AllowSort="False" />
<SettingsEditing Mode="Inline" NewItemRowPosition="Bottom" />
<SettingsText CommandCancel="Cancelar" CommandUpdate="Salvar" EmptyDataRow="Não há dados para serem visualizados." />
<SettingsCustomizationWindow Enabled="True" />
<SettingsLoadingPanel Text="Carregando&hellip;" />
<Columns>
<dx:GridViewCommandColumn ShowInCustomizationForm="True" VisibleIndex="0" Width="150px">
<EditButton Text="Editar" Visible="True">
</EditButton>
<NewButton Text="Novo" Visible="True">
</NewButton>
<DeleteButton Text="Deletar" Visible="True">
</DeleteButton>
<ClearFilterButton Visible="True">
</ClearFilterButton>
</dx:GridViewCommandColumn>
<dx:GridViewDataComboBoxColumn Caption="Tipo" FieldName="Tipo" ShowInCustomizationForm="True"
VisibleIndex="1">
<PropertiesComboBox ValueType="System.Int32" Width="150px">
<Items>
<dx:ListEditItem Text="Residencial" Value="0" />
<dx:ListEditItem Text="Trabalho" Value="1" />
</Items>
</PropertiesComboBox>
</dx:GridViewDataComboBoxColumn>
<dx:GridViewDataComboBoxColumn Caption="Uf" FieldName="Uf" ShowInCustomizationForm="True"
VisibleIndex="2">
<PropertiesComboBox ValueType="System.Int32" Width="60px">
<Items>
<dx:ListEditItem Text="AC" Value="0" />
<dx:ListEditItem Text="AL" Value="1" />
<dx:ListEditItem Text="AM" Value="2" />
<dx:ListEditItem Text="AP" Value="3" />
<dx:ListEditItem Text="BA" Value="4" />
<dx:ListEditItem Text="CE" Value="5" />
<dx:ListEditItem Text="DF" Value="6" />
<dx:ListEditItem Text="ES" Value="7" />
<dx:ListEditItem Text="GO" Value="8" />
<dx:ListEditItem Text="MA" Value="9" />
<dx:ListEditItem Text="MG" Value="10" />
<dx:ListEditItem Text="MS" Value="11" />
<dx:ListEditItem Text="MT" Value="12" />
<dx:ListEditItem Text="PA" Value="13" />
<dx:ListEditItem Text="PB" Value="14" />
<dx:ListEditItem Text="PE" Value="15" />
<dx:ListEditItem Text="PI" Value="16" />
<dx:ListEditItem Text="PR" Value="17" />
<dx:ListEditItem Text="RJ" Value="18" />
<dx:ListEditItem Text="RN" Value="19" />
<dx:ListEditItem Text="RO" Value="20" />
<dx:ListEditItem Text="RR" Value="21" />
<dx:ListEditItem Text="RS" Value="22" />
<dx:ListEditItem Text="SP" Value="23" />
<dx:ListEditItem Text="SE" Value="24" />
<dx:ListEditItem Text="TO" Value="25" />
</Items>
</PropertiesComboBox>
</dx:GridViewDataComboBoxColumn>
<dx:GridViewDataTextColumn Caption="Cep" FieldName="Cep" ShowInCustomizationForm="True"
VisibleIndex="3" Width="80px">
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn Caption="Localidade" FieldName="Localidade" ShowInCustomizationForm="True"
VisibleIndex="4">
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn Caption="Bairro" FieldName="Bairro" ShowInCustomizationForm="True"
VisibleIndex="5">
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn Caption="Logradouro" FieldName="Logradouro" ShowInCustomizationForm="True"
VisibleIndex="6">
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn Caption="Complemento" FieldName="Complemento" ShowInCustomizationForm="True"
VisibleIndex="7">
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn Caption="Nº" FieldName="NrEnd" ShowInCustomizationForm="True"
VisibleIndex="8">
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn Caption="CodIBGE" FieldName="CodIBGE" ShowInCustomizationForm="True"
Visible="False" VisibleIndex="9">
</dx:GridViewDataTextColumn>
</Columns>
<SettingsBehavior AllowFocusedRow="True" AllowSelectByRowClick="True" AllowSelectSingleRowOnly="True"
AllowSort="False" />
<SettingsEditing Mode="Inline" NewItemRowPosition="Bottom" />
<SettingsText CommandCancel="Cancelar" CommandUpdate="Salvar" EmptyDataRow="Não há dados para serem visualizados." />
<SettingsCustomizationWindow Enabled="True" />
<SettingsLoadingPanel Text="Carregando&hellip;" />
<SettingsBehavior AllowFocusedRow="True" AllowSelectByRowClick="True" AllowSelectSingleRowOnly="True"
AllowSort="False" />
<SettingsEditing Mode="Inline" NewItemRowPosition="Bottom" />
<SettingsText CommandCancel="Cancelar" CommandUpdate="Salvar" EmptyDataRow="Não há dados para serem visualizados." />
<SettingsCustomizationWindow Enabled="True" />
<SettingsLoadingPanel Text="Carregando&hellip;" />
<SettingsBehavior AllowFocusedRow="True" AllowSelectByRowClick="True" AllowSelectSingleRowOnly="True"
AllowSort="False" />
<SettingsEditing Mode="Inline" NewItemRowPosition="Bottom" />
<SettingsText CommandCancel="Cancelar" CommandUpdate="Salvar" EmptyDataRow="Não há dados para serem visualizados." />
<SettingsCustomizationWindow Enabled="True" />
<SettingsLoadingPanel Text="Carregando&hellip;" />
<SettingsBehavior AllowFocusedRow="True" AllowSelectByRowClick="True" AllowSelectSingleRowOnly="True"
AllowSort="False" />
<SettingsEditing Mode="Inline" NewItemRowPosition="Bottom" />
<SettingsText CommandCancel="Cancelar" CommandUpdate="Salvar" EmptyDataRow="Não há dados para serem visualizados." />
<SettingsCustomizationWindow Enabled="True" />
<SettingsLoadingPanel Text="Carregando&hellip;" />
<SettingsBehavior AllowFocusedRow="True" AllowSelectByRowClick="True" AllowSelectSingleRowOnly="True"
AllowSort="False" />
<SettingsEditing Mode="Inline" NewItemRowPosition="Bottom" />
<SettingsText CommandCancel="Cancelar" CommandUpdate="Salvar" EmptyDataRow="Não há dados para serem visualizados." />
<SettingsCustomizationWindow Enabled="True" />
<SettingsLoadingPanel Text="Carregando&hellip;" />
<SettingsBehavior AllowFocusedRow="True" AllowSelectByRowClick="True" AllowSelectSingleRowOnly="True"
AllowSort="False" />
<SettingsEditing Mode="Inline" NewItemRowPosition="Bottom" />
<SettingsText CommandCancel="Cancelar" CommandUpdate="Salvar" EmptyDataRow="Não há dados para serem visualizados." />
<SettingsCustomizationWindow Enabled="True" />
<SettingsLoadingPanel Text="Carregando&hellip;" />
<Images SpriteCssFilePath="~/App_Themes/Office2010Blue/{0}/sprite.css">
<LoadingPanelOnStatusBar Url="~/App_Themes/Office2010Blue/GridView/Loading.gif">
</LoadingPanelOnStatusBar>
<LoadingPanel Url="~/App_Themes/Office2010Blue/GridView/Loading.gif">
</LoadingPanel>
</Images>
<ImagesFilterControl>
<LoadingPanel Url="~/App_Themes/Office2010Blue/GridView/Loading.gif">
</LoadingPanel>
</ImagesFilterControl>
<Styles CssFilePath="~/App_Themes/Office2010Blue/{0}/styles.css" CssPostfix="Office2010Blue">
<Header ImageSpacing="5px" SortingImageSpacing="5px">
</Header>
<LoadingPanel ImageSpacing="5px">
</LoadingPanel>
</Styles>
<StylesPager>
<PageNumber ForeColor="#3E4846">
</PageNumber>
<Summary ForeColor="#1E395B">
</Summary>
</StylesPager>
<StylesEditors ButtonEditCellSpacing="0">
<ProgressBar Height="21px">
</ProgressBar>
</StylesEditors>
</dx:ASPxGridView>
<br />
<asp:ObjectDataSource ID="objEndereco" runat="server" InsertMethod="InsertEndereco"
SelectMethod="SelectEndereco" TypeName="TedASP2.WebForm5" UpdateMethod="EditEndereco"
DeleteMethod="DeleteEndereco" ConflictDetection="CompareAllValues"
OnObjectDisposing="ReturnListLogic" OnObjectCreating="GetListLogic"
EnableCaching="True">
<UpdateParameters>
<asp:Parameter Name="Tipo" Type="Int32" />
<asp:Parameter Name="Cep" Type="String" />
<asp:Parameter Name="Uf" Type="Int16" />
<asp:Parameter Name="Localidade" Type="String" />
<asp:Parameter Name="Bairro" Type="String" />
<asp:Parameter Name="Logradouro" Type="String" />
<asp:Parameter Name="Complemento" Type="String" />
<asp:Parameter Name="NrEnd" Type="String" />
<asp:Parameter Name="CodIBGE" Type="String" />
<asp:ControlParameter Name="AIndex" ControlID="gridEndereco" PropertyName="EditingRowVisibleIndex" />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="Tipo" Type="Int32" />
<asp:Parameter Name="Cep" Type="String" />
<asp:Parameter Name="Uf" Type="Int16" />
<asp:Parameter Name="Localidade" Type="String" />
<asp:Parameter Name="Bairro" Type="String" />
<asp:Parameter Name="Logradouro" Type="String" />
<asp:Parameter Name="Complemento" Type="String" />
<asp:Parameter Name="NrEnd" Type="String" />
<asp:Parameter Name="CodIBGE" Type="String" />
</InsertParameters>
<DeleteParameters>
<asp:ControlParameter Name="AIndex" ControlID="gridEndereco" PropertyName="FocusedRowIndex" />
<asp:Parameter Name="NrEnd" Type="String" />
</DeleteParameters>
</asp:ObjectDataSource>
<br />
</div>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>WebForm5.aspx.cs
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Drawing;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Entidades;
using TedEntityLib;
using TedAdoFBLib;
using System.IO;
namespace TedASP2
{
[Serializable]
public class ListEndereco:List<Endereco>, IDisposable
{
public void Dispose()
{
}
}
public partial class WebForm5 : System.Web.UI.Page
{
const string KEY_VIEW_STATE = "__ListEnd";
ListEndereco ListEnd;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack && !IsCallback)
{
ListEnd = new ListEndereco();
Endereco endereco = new Endereco();
endereco.Tipo = TipoEndereco.Residencial;
endereco.Cep = "123123123";
endereco.Uf = EndUF.RJ;
endereco.Localidade = "saqua";
endereco.Bairro = "Bairro";
endereco.Logradouro = "Logradouro";
endereco.Complemento = "Complemento";
endereco.NrEnd = "1231";
endereco.CodIBGE = "3123";
ListEnd.Add(endereco);
ViewState.Add(KEY_VIEW_STATE, ListEnd);
}
else
ListEnd = (ListEndereco)ViewState[KEY_VIEW_STATE];
}
//metodos do ObjectDataSource para manipulação dos dados
public ListEndereco SelectEndereco()
{
if (ListEnd != null)
{
ListEnd = (ListEndereco)ViewState[KEY_VIEW_STATE];
return ListEnd;
}
else
return CreateList();
}
//instancia a lista de enderecos caso esteja como nula
public ListEndereco CreateList()
{
ListEnd = new ListEndereco();
//ListEnd = (ListEndereco)ViewState[KEY_VIEW_STATE];
return ListEnd;
}
//insere os valores em uma lista de enderecos da entidade
public void InsertEndereco(Int32 Tipo, string Cep, Int16 Uf, string Localidade, string Bairro, string Logradouro, string Complemento, string NrEnd, string CodIBGE)
{
ListEnd = (ListEndereco)ViewState[KEY_VIEW_STATE];
Endereco endereco = new Endereco();
endereco.Tipo = (TipoEndereco)Tipo;
endereco.Cep = Cep;
endereco.Uf = (EndUF)Uf;
endereco.Localidade = Localidade;
endereco.Bairro = Bairro;
endereco.Logradouro = Logradouro;
endereco.Complemento = Complemento;
endereco.NrEnd = NrEnd;
endereco.CodIBGE = CodIBGE;
ListEnd.Add(endereco);
ViewState.Add(KEY_VIEW_STATE, ListEnd);
}
//edita os dados do endereco
public void EditEndereco(int AIndex, Int32 Tipo, string Cep, Int16 Uf, string Localidade, string Bairro, string Logradouro, string Complemento, string NrEnd, string CodIBGE)
{
ListEnd = (ListEndereco)ViewState[KEY_VIEW_STATE];
Endereco endereco = ListEnd[AIndex];
endereco.Tipo = (TipoEndereco)Tipo;
endereco.Cep = Cep;
endereco.Uf = (EndUF)Uf;
endereco.Localidade = Localidade;
endereco.Bairro = Bairro;
endereco.Logradouro = Logradouro;
endereco.Complemento = Complemento;
endereco.NrEnd = NrEnd;
endereco.CodIBGE = CodIBGE;
ViewState.Add(KEY_VIEW_STATE, ListEnd);
}
//deleta enderecos
public void DeleteEndereco(int AIndex, string NrEnd)
{
ListEnd = (ListEndereco)ViewState[KEY_VIEW_STATE];
ListEnd.RemoveAt(AIndex);
ViewState.Add(KEY_VIEW_STATE, ListEnd);
}
}
}- Movido Levi DomingosModerator quinta-feira, 21 de junho de 2012 17:22 (De:C#)