Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 2.0 / 3.5 / 4.0
Formview con objectdatasource - problema in update di checkbox
sabato 06 gennaio 2007 - 11.02
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Pao
Profilo
| Newbie
2
messaggi | Data Invio:
sab 6 gen 2007 - 11:02
Ho un formview agganciato ad un objectdatasource.
Funziona tutto bene, ma ho un problema su una checkbox: quando sono in edit mode e clicco su update, non viene aggiornato il campo checkbox (nessun errore viene visualizzato).
Il campo di MySql agganciato al checkbox è un campo stringa di tipo ENUM('True','False') default 'False'.
Ecco la formview:
<asp:FormView ID="fwAgente" runat="server"
AllowPaging="True"
DataKeyNames="ID"
DataSourceID="AgenteDataSource">
<ItemTemplate>
<table>
<tr><td align="right"><b>ID:</b></td> <td><%# Eval("ID") %></td></tr>
<tr><td align="left" style="height: 21px"><b>Nome:</b></td><td style="width: 5px; height: 21px"><%# Eval("Nome") %></td></tr>
<tr><td align="left"><b>Cognome:</b></td> <td style="width: 5px"><%# Eval("Cognome") %></td></tr>
<tr><td align="left"><b>Telefono:</b></td> <td style="width: 5px"><%# Eval("Telefono") %></td></tr>
<tr>
<td style="width:7%">Annullato: </td>
<td style="width:6%">
<asp:CheckBox ID="chkAnnAg" runat="server" Enabled="false"
Checked ='<%# Convert.ToBoolean(Eval("annullato")) %>' />
</td>
</tr>
<tr>
<td colspan="2">
<asp:LinkButton ID="EditButton"
Text="Edit"
CommandName="Edit"
RunAt="server"/>
<asp:LinkButton ID="NewButton"
Text="New"
CommandName="New"
RunAt="server"/>
<asp:LinkButton ID="DeleteButton"
Text="Delete"
CommandName="Delete"
RunAt="server"/>
</td>
</tr>
</table>
</ItemTemplate>
<EditItemTemplate>
<table>
<tr><td align="right"><b>ID:</b></td>
<td><asp:TextBox ID="EditIDTextBox" Enabled="false"
Text='<%# Bind("ID") %>'
RunAt="Server" /></td></tr>
<tr><td align="right"><b>Nome:</b></td>
<td><asp:TextBox ID="EditNomeTextBox"
Text='<%# Bind("Nome") %>'
RunAt="Server" /></td></tr>
<tr><td align="right"><b>Cognome:</b></td>
<td><asp:TextBox ID="EditCognomeTextBox"
Text='<%# Bind("Cognome") %>'
RunAt="Server" /></td></tr>
<tr><td align="right"><b>Telefono:</b></td>
<td><asp:TextBox ID="EditTelefonoTextBox"
Text='<%# Bind("Telefono") %>'
RunAt="Server" /></td></tr>
<tr><td align="right"><b>Annullato:</b></td>
<td style="width:6%">
<asp:CheckBox ID="chkAnnAg" runat="server" Enabled="true"
Checked ='<%# Convert.ToBoolean(Eval("annullato")) %>' />
</td>
</tr>
<tr>
<td colspan="2">
<asp:LinkButton ID="UpdateButton"
Text="Update"
CommandName="Update"
RunAt="server"/>
<asp:LinkButton ID="CancelUpdateButton"
Text="Cancel"
CommandName="Cancel"
RunAt="server"/>
</td>
</tr>
</table>
</EditItemTemplate>
<InsertItemTemplate>
<table>
<tr><td align="right"><b>Login:</b></td>
<td><asp:TextBox ID="InsertLoginTextBox"
Text='<%# Bind("Login") %>'
RunAt="Server" /></td></tr>
<tr><td align="right"><b>Nome:</b></td>
<td><asp:TextBox ID="InsertNomeTextBox"
Text='<%# Bind("Nome") %>'
RunAt="Server" /></td></tr>
<tr><td align="right"><b>Cognome:</b></td>
<td><asp:TextBox ID="InsertCognomeTextBox"
Text='<%# Bind("Cognome") %>'
RunAt="Server" /></td></tr>
<tr><td align="right"><b>Telefono:</b></td>
<td><asp:TextBox ID="InsertTelefonoTextBox"
Text='<%# Bind("Telefono") %>'
RunAt="Server" /></td></tr>
<tr>
<td colspan="2">
<asp:LinkButton ID="InsertButton"
Text="Insert"
CommandName="Insert"
RunAt="server"/>
<asp:LinkButton ID="CancelInsertButton"
Text="Cancel"
CommandName="Cancel"
RunAt="server"/>
</td>
</tr>
</table>
</InsertItemTemplate>
</asp:FormView>
Ecco l'objectdatasource:
<asp:ObjectDataSource ID="AgenteDataSource" runat="server"
DataObjectTypeName="Reminder.Agente"
TypeName="Reminder.Agente"
DeleteMethod="Delete"
InsertMethod="Insert"
SelectMethod="GetDataTable"
UpdateMethod="Update" OldValuesParameterFormatString="original_{0}"
OnUpdated="AgenteDataSource_Updated"
OnObjectCreated = "genteDataSource_ObjectCreated"
OnInserted="AgenteDataSource_Updated"
OnDeleted="AgenteDataSource_Updated"
>
<SelectParameters>
<asp:Parameter Name="vId" Type="String" />
<asp:Parameter Name="vAnn" Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
Ecco la dichiarazione dell'oggetto:
public class Agente
{
private MySqlConnection cnn = new MySqlConnection();
protected int _id;
protected string _login;
protected string _nome;
protected string _cognome;
protected string _telefono;
protected string _annullato;
protected string _loginmod;
//public Agente(string login, string nome, string cognome, string telefono)
public Agente()
{}
public int ID
{
get { return _id; }
set { _id = value; }
}
public string Login
{
get { return _login; }
set { _login = value; }
}
public string Nome
{
get {return _nome;}
set { _nome = value; }
}
public string Cognome
{
get { return _cognome; }
set { _cognome = value; }
}
public string Telefono
{
get { return _telefono; }
set { _telefono = value; }
}
public string Annullato
{
get { return _annullato; }
set { _annullato = value.ToString(); }
}
Ecco il metodo Update dell'oggetto Agente:
public void Update(Agente _A)
{
Agente AgNow = new Agente(); //AgNow=dati presenti adesso da aggiornare
AgNow.AutoLoadByID(_A.ID);
//aggiorno i dati di AgNow con quelli dell'update se presenti
//if (_A.ID != null) AgNow.ID = _A.ID;
if (_A.Login != null) AgNow.Login = _A.Login;
if (_A.Nome != null) AgNow.Nome = _A.Nome;
if (_A.Cognome != null) AgNow.Cognome = _A.Cognome;
if (_A.Telefono != null) AgNow.Telefono = _A.Telefono;
if (_A._annullato != null) AgNow.Annullato = _A.Annullato;
MySqlCommand cmd = new MySqlCommand();
if (cnn.ConnectionString == string.Empty)
cnn.ConnectionString = ConfigurationManager.ConnectionStrings["reminder_local"].ToString();
cmd.Connection = cnn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new MySqlParameter("P_ID", AgNow.ID));
cmd.Parameters.Add(new MySqlParameter("P_login", AgNow.Login));
cmd.Parameters.Add(new MySqlParameter("P_nome", AgNow.Nome));
cmd.Parameters.Add(new MySqlParameter("P_cognome", AgNow.Cognome));
cmd.Parameters.Add(new MySqlParameter("P_telefono", AgNow.Telefono));
cmd.Parameters.Add(new MySqlParameter("P_annullato", AgNow.Annullato));
cmd.Parameters.Add(new MySqlParameter("P_loginmod", Glob.vLogin));
cmd.CommandText = "spUpdateAgente";
try
{
if (cnn.State == ConnectionState.Closed)
cnn.Open();
cmd.ExecuteNonQuery();
cnn.Close();
}
catch (MySqlException Exception)
{ throw (Exception); }
}
freeteo
Profilo
| Guru
6.542
messaggi | Data Invio:
sab 6 gen 2007 - 13:46
ciao,
l'errore sta nel fatto che nell'editTemplate di quel campo non hai messo che il campo "Annullato" sia in "bind" ma solo in "eval".
La differenza sta nel fatto che Eval è in sola lettura diciamo, ovvero visualizza il valore bindato, mentre il "bind" è bidirezionale, quindi quello che è presente viene poi salvato sul database...prova a mettere il Bind nell'edit template quindi, altrimenti non verra' mai passato all'objectdataSource per essere aggiornato sul db...
ciao.
Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
Pao
Profilo
| Newbie
2
messaggi | Data Invio:
sab 6 gen 2007 - 14:38
ciao Matteo grazie dell'interessamento
avevo provato anch'io col Bind (Checked ='<%# Bind("annullato") %>'), ma mi dava errore di cast non valido in quanto gli arriva una stringa e la deve convertire in boolean
alla fine ho risolto mantenendo l'Eval col Convert.ToBoolean e modificando la proprietà "Annullato" nell'evento OnUpdating del FormView:
protected void AgenteDataSource_OnUpdating(object sender, ObjectDataSourceMethodEventArgs e)
{
Agente _a = (Agente)e.InputParameters[0];
CheckBox _c = (CheckBox)fwAgente.FindControl("chkAnnAg");
if (_c.Checked)
_a.Annullato = "True";
else
_a.Annullato = "False";
}
in questo modo modifico la proprietà prima di darla in pasto al metodo di update.
E' un po' macchinoso ma funziona, se trovi una soluzione + semplice fammelo sapere!!
ciao
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !