Comment supprimer une ligne dans un gridview et la source de données sous-jacente sans utiliser SqlDataSource, ObjectDataSource, etc.

StackOverflow https://stackoverflow.com/questions/813168

  •  03-07-2019
  •  | 
  •  

Question

J'ai un GridView que je remplis en appelant une méthode pour renvoyer un datatable avec deux colonnes. Après avoir renvoyé le datatable, je le lie au gridview et l’affiche.

Je n'utilise ni SqlDataSource ni ObjectDataSource. Quelle est donc la bonne façon de supprimer une ligne de la vue en grille et les données sous-jacentes de la base de données? Je dois juste supprimer d'un tableau appelé portfolio. Il comporte 3 colonnes, ID, qui est la clé unique, PortfolioID et PortfolioName. Le datatable renvoie le PortfolioName et le nombre d'éléments du portfolio. Je pensais pouvoir faire cela lors de l'événement Row_Deleting, où je ferais quelque chose du genre:

DELETE * FROM Portfolio WHERE PortfolioID = @PortfolioID

Suis-je sur la bonne voie et comment pourrais-je le faire? Pourrais-je lier PortfolioID à la propriété GridView DataKey (Quelle est la syntaxe correcte pour le faire?)

Était-ce utile?

La solution

Je suppose que vous supprimez une ligne lorsque vous appuyez sur un bouton. Si oui, je fais habituellement quelque chose comme ça:

<asp:GridView ID="myGrid" runat="server" DataKeyNames='PortfolioID' OnRowCommand="dgStudent_RowCommand">
    <Columns>
        <asp:ButtonField ButtonType="Button" CommandName="Delete" Text="Delete"></asp:ButtonField>
    </Columns>
</asp:GridView>

Ensuite, dans votre code-behind:

protected void myGrid_RowCommand(object sender, GridViewCommandEventArgs e)
{
    // create and open DB connection
    int PortfolioID = (int)myGrid.DataKeys[Convert.ToInt32(e.CommandArgument)].Value;
    DeleteRow(PortfolioID); // your implementation
    myGrid.DataBind(); 
}

DeleteRow est votre implémentation de la suppression de ligne (peut-être le code SQL que vous avez ci-dessus). myGrid est votre grille. PortfolioID est la clé primaire. Cela suppose également que le seul bouton de votre grille est le bouton de suppression. Si vous avez plusieurs boutons, vous devez vérifier e.NomCommande == "Supprimer" pour vous assurer que vous obtenez le bouton de suppression.

Autres conseils

Je ferais probablement abstraction de l’appel de base de données plus loin qu’ici. Je traiterais probablement les lignes une fois les modifications terminées. Pour le post-traitement, vous pouvez vérifier l'état des lignes pour déterminer comment utiliser les données de la ligne.

Si j'ai bien compris, vous souhaitez supprimer une ligne de la vue de la grille de données classée dans la table de la base de données. Cela signifie que vous souhaitez supprimer et enregistrer une table d'une base de données. La meilleure façon de faire est de placer une zone de texte quelque part et de créer un événement pour votre datagridview (événement de sélection de ligne). De cette façon, lorsque vous sélectionnerez la ligne, vous souhaitez supprimer l'identifiant de ce droit sera envoyé à la zone de texte (celle-ci sera codée). Une fois que vous avez l'id de la ligne que vous souhaitez supprimer, il vous suffit d'ajouter un bouton supplémentaire pour supprimer l'enregistrement dans la base de données et de lier à nouveau la datagridview.

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {

        this.txt_portfolioId.Text=dataGridView1.CurrentRow.Cells["portfolioID"].Value.ToString();


    }


private void btn_Delete(object sender, EventArgs e)
    {

        //You need to connect to database(regular database connection this connection string and sqlcommand and add this sqlquerry:

Supprimez * de votre table où portfolioid = '" + Convert.ToInt32 (this.portfolioId.Text) +' quot '';
        }

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top