ciao, ho creato un ODS con le relative classi per il select e l'update e funziona, finche non incontra i campi datetime, dove da l'errore:
Impossibile convertire da "System.String" to "System.DateTime"

ma se la classe per il select lo preleva come datetime, e la classe update lo vede come datetime, allora chi lo rende "string"?
Forse è il gridview che lo formatta {0:d}?

//esempio del codice C#
private DateTime _data;

public DateTime Data { get.... set... }

public Select(id)
{
...
this._data = (DateTime)datareader["campo_db_data"];
...
}

public Update(Classe C)
{
...
this._data = C.Data
...
sc.Parameters.AddWithValue("@campo_db_data", _data);
...
sc.ExecuteNonQuery() // a questo punto ricevo l'errore di conversione
}

Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna.
-Albert Einstein-
sicuramente per la visualizzazione viene convertito in string ma in modo trasparente dovrebbe essere "reidratato".

posta la parte dichiarativa del ODS e magari la firma dei metodi che usi.

non sono mai incappato in un problema simile.

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
Nel dubbio posto tutto, gridview, ODS e classi, non sono lunghissime, comunque le ho accorciate levando i campi che non danno errore per non occupare troppo spazio nel db del forum

<asp:GridView id="sociElencoGridView" runat="server" SkinID="elenco" DataSourceID="sociElencoODS" AutoGenerateColumns="False" DataKeyNames="Id_socio" OnSelectedIndexChanged="sociElencoGridView_SelectedIndexChanged"><Columns>
....//altri campi string e int....
<asp:BoundField HtmlEncode="False" DataFormatString="{0:d}" DataField="Data_inserimento_socio" SortExpression="Data_inserimento_socio" HeaderText="Ammissione" ApplyFormatInEditMode="True"></asp:BoundField>
<asp:BoundField HtmlEncode="False" DataFormatString="{0:d}" DataField="Data_dimissioni_socio" SortExpression="Data_dimissioni_socio" HeaderText="Dimissioni" ApplyFormatInEditMode="True"></asp:BoundField>
</Columns>
</asp:GridView>
<asp:ObjectDataSource id="sociElencoODS" runat="server" OldValuesParameterFormatString="original_{0}" TypeName="SociManager" SelectMethod="sociElencoCoop" DataObjectTypeName="Socio" UpdateMethod="Update"><SelectParameters>
<asp:ControlParameter PropertyName="SelectedValue" Type="Int32" Name="id_cooperativa" ControlID="elencoCoopGridView"></asp:ControlParameter>
<asp:ControlParameter PropertyName="SelectedDate" Type="DateTime" Name="data_rapporto" ControlID="data_rapporto"></asp:ControlParameter>
</SelectParameters>
</asp:ObjectDataSource>

public Socio Update(Socio SocioModificato)
{
Socio aggiornaSocio = new Socio(SocioModificato);

return aggiornaSocio;
}

public Socio(Socio SocioModificato)
{
//altri int e string
this._data_inserimento_socio = SocioModificato.Data_inserimento_socio;
this._data_dimissioni_socio = SocioModificato.Data_dimissioni_socio;

ConnectionStringSettings cts = ConfigurationManager.ConnectionStrings["gu2007CS"];

SqlConnection conn = new SqlConnection(cts.ConnectionString);

SqlCommand sc = new SqlCommand("sp_socio_update", conn);
sc.CommandType = CommandType.StoredProcedure;
//altri parametr int e string
sc.Parameters.AddWithValue("@data_inserimento_socio", _data_inserimento_socio);
sc.Parameters.AddWithValue("@data_dimissioni_socio", _data_dimissioni_socio);

try
{
conn.Open();

sc.ExecuteNonQuery();
}
catch(SqlException)
{
throw;
}
finally
{
conn.Close();
}
}

Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna.
-Albert Einstein-
credo di aver capito anche se non mi torna tanto il punto dell'eccezione.

puoi fare il seguente test:

sostituisce
<asp:BoundField HtmlEncode="False" DataFormatString="{0:d}" DataField="Data_inserimento_socio" SortExpression="Data_inserimento_socio"


con una TemplateField contentente un controllo colander e bindato al campo Data_inserimento_socio e naturalmente fai lo stesso per l'altro campo DateTime.

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
utilizzando i calendar funziona tutto correttamente

Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna.
-Albert Einstein-
investigherò se esistono altre soluzioni, questa è la più veloce che mi è venuta in menete, se non è un problema per adesso usa i controlli Calendar.

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
per ora uso il detailsview, i calendar occupano troppo spazio :-)

Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna.
-Albert Einstein-
con il DetailView non hai questo problema? per curiosità puoi postare il codice dichiarativo del DetailsView.

ciao marco
Modificato da nostromo il 13 novembre 2006 16.46 -

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.