2010-04-17 3 views
1

Les données entrées dans les zones de texte ne sont pas mises à jour dans la base de données. En mode débogage, je vois que text1 et text2 dans l'événement ItemUpdating contiennent les mêmes valeurs qu'ils avaient avant d'appeler ItemUpdating.listview et datalist non mis à jour, insertion

Voici mon contrôle listview:

<asp:ListView ID="ListView1" runat="server" 
onitemediting="ListView1_ItemEditing" 
onitemupdating="ListView1_ItemUpdating" 
oniteminserting="ListView1_ItemInserting"> 

//LayoutTemplate removed 

<ItemTemplate> 
     <asp:Label ID="Label2" runat="server" Text='<%#Eval("id")%>'></asp:Label> 
     <asp:Label ID="Label3" runat="server" Text='<%#Eval("text1")%>'></asp:Label> 

     <asp:LinkButton ID="LinkButton2" CommandName="Edit" runat="server">Edit</asp:LinkButton> 
     <asp:LinkButton ID="LinkButton4" CommandName="Delete" runat="server">Delete</asp:LinkButton> 
</ItemTemplate> 
<EditItemTemplate> 
    <asp:Label ID="Label1" runat="server" Text='<%#Eval("id")%>'></asp:Label> 
    <asp:TextBox ID="TextBox1" runat="server" Text='<%#Eval("text1")%>' TextMode="MultiLine" /> 
    <asp:TextBox ID="TextBox2" runat="server" Text='<%#Eval("text2")%>' Height="100" TextMode="MultiLine" /> 

    <asp:LinkButton ID="LinkButton1" CommandName="Update" CommandArgument='<%# Eval("id")%>' runat="server">Update</asp:LinkButton> 
    <asp:LinkButton ID="LinkButton5" CommandName="Cancel" runat="server">Cancel</asp:LinkButton> 
</EditItemTemplate> 
<InsertItemTemplate> 
    <asp:TextBox ID="TextBox3" runat="server" TextMode="MultiLine" Height="100"></asp:TextBox> 
    <asp:TextBox ID="TextBox4" runat="server" Height="100" TextMode="MultiLine"></asp:TextBox> 

    <asp:LinkButton ID="LinkButton3" runat="server">Insert</asp:LinkButton> 
</InsertItemTemplate> 
</asp:ListView> 

fichier Codebehind:

protected void ListView1_ItemEditing(object sender, ListViewEditEventArgs e) 
{ 
    ListView1.EditIndex = e.NewEditIndex; 
    BindList(); 
} 
protected void ListView1_ItemUpdating(object sender, ListViewUpdateEventArgs e) 
{ 
    ListViewItem myItem = ListView1.Items[ListView1.EditIndex]; 

    Label id = (Label)myItem.FindControl("Label1"); 
    int dbid = int.Parse(id.Text); 

    TextBox text1 = (TextBox)myItem.FindControl("Textbox1"); 
    TextBox text2 = (TextBox)myItem.FindControl("Textbox2"); 

    //tried to work withNewValues below, but they don't work, "null reference" error is being thrown 
    //text1.Text = e.NewValues["text1"].ToString(); 
    //text2.Text = e.NewValues["text2"].ToString(); 

    //odbc connection routine removed. 
    //i know that there should be odbc parameteres: 
    comm = new OdbcCommand("UPDATE table SET text1 = '" + text1.Text + "', text2 = '" + text2.Text + "' WHERE id = '" + dbid + "'", connection); 

    comm.ExecuteNonQuery(); 
    conn.Close(); 

    ListView1.EditIndex = -1; 
    //here I databind ListView1 
} 

Quel est le problème avec la mise à jour de text1.Text, text2.Text en cas ItemUpdating? Dois-je utiliser la propriété e.NewValues? Si oui, comment l'utiliser?

Merci d'avance pour toute aide.

+0

Je viens de remarquer que je ne peux pas faire les mêmes opérations en utilisant DataList. On dirait que je fais quelque chose de complètement faux. S'il vous plaît, aidez. –

Répondre

0

Pffff. 2 jours perdus. Juste découvert que j'ai oublié d'utiliser pour Page_Load():

if (!IsPostBack) 
    { 
     ListView1.DataSource = ds; 
     ListView1.DataBind(); 
    } 
Questions connexes