2009-11-19 8 views
0

J'essaie de mettre à jour une table de base de données à partir de ma grille de données à l'aide d'un gestionnaire d'événements et d'ItemCommand. Je parviens à appeler la routine et tout fonctionne correctement sauf que le texte qui est inséré dans ma base de données est vide. J'ai réussi à retracer cela au texte ne passant pas de mon pied de page de données vers les paramètres sql. J'ai d'abord essayé d'utiliser une chaîne de caractères, puis de la transmettre aux paramètres, mais ils étaient également vides. J'accède au contrôle en utilisant la ligne suivante.Ajout d'une nouvelle ligne à la table de base de données à partir de Datagrid

sqlcmd.Parameters.Add("@GoodsDesc", SqlDbType.VarChar).Value = CType(e.Item.FindControl("txtGoodsDesc"), TextBox).Text 

Le contrôle lui-même est défini à l'aide

<asp:TemplateColumn HeaderText="Goods Descriptions"> 
    <ItemTemplate> 
     <asp:Label runat="server" ID="lblGoodsDesc" Text='<%# Eval("GoodsDesc") %>'></asp:Label> 
    </ItemTemplate> 
    <FooterTemplate> 
     <asp:TextBox ID="txtGoodsDesc" runat="server" TextMode="MultiLine" Rows="3"></asp:TextBox> 
    </FooterTemplate> 
</asp:TemplateColumn> 

Est-ce que je manque quelque chose ici? C'est comme si le texte du pied de page n'était pas lié au contrôle avant que je l'appelle.

+0

Salut, merci pour les conseils. J'ai calculé que le programme appelle Page_Load lorsque je clique sur le lien pour ajouter la ligne, de sorte que les zones de texte sont en train d'être vidées avant d'essayer de les ajouter. Je n'étais pas au courant que Page_Load serait appelé en premier. J'ai quelques idées sur la façon dont je pourrais résoudre ce problème, maintenant je dois juste espérer que je puisse le faire fonctionner. –

Répondre

0

donc essentiellement j'ai découvert que la question qui se produisait était que VB.Net appelait Page_Load avant que l'événement lui-même ne soit appelé, et dans la méthode Page_Load j'appelais la méthode qui remplissait la grille de données, qui effaçait les zones de texte dans le pied de page avant que les valeurs de celles-ci soient lues.

Pour arrêter cela, je mis une condition autour de l'appel à la méthode Page_Load

If Not IsPostBack Then 

    FillDataGrid() 

End If 

Puis j'ai appelé la fonction FillDataGrid() comme la dernière étape dans le gestionnaire, ce qui signifie que les données ont été lues et puis la grille de données était liée aux nouvelles valeurs.

0

HI Ryan, nous aurons besoin de plus de code que ça. Où êtes-vous. Ajoutez + ce paramètre en plus où est e.Item.FindControl quel est l'événement?

Vous devez vérifier si vous êtes sur le contrôle de pied de page:

protected void dg_ItemDataBound(object sender, DataGridItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListItemType.Footer) 
     { 
      if (dg.EditItemIndex != -1) 
      { 
       ((TextBox)e.Item.FindControl("txtGoodsDesc")).Text 
      } 
     } 
    } 

Ou dans vb.net

if (e.Item.ItemType = ListItemType.Footer) then 
    Dim s as String=String.Empty 
    s=CType(e.Item.FindControl("txtGoodsDesc"), TextBox).Text 
end if 
Questions connexes