Come eliminare una riga in una vista griglia e l'origine dati sottostante senza utilizzare SqlDataSource, ObjectDataSource, ecc.

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

  •  03-07-2019
  •  | 
  •  

Domanda

Ho un GridView che sto popolando chiamando un metodo per restituire un datatable con due colonne. Dopo aver restituito il datatable, lo associo al gridview e lo visualizzo.

Non sto usando SqlDataSource o ObjectDataSource, quindi qual è il modo corretto di eliminare una riga dalla griglia e dai dati sottostanti nel database. Devo solo eliminare da una tabella che si chiama portfolio. Ha 3 colonne, ID, che è la chiave univoca, PortfolioID e PortfolioName. Il datatable restituisce PortfolioName e il numero di elementi nel Portfolio. Pensavo di poterlo fare nell'evento Row_Deleting in cui avrei fatto qualcosa del tipo:

DELETE * FROM Portfolio WHERE PortfolioID = @PortfolioID

Sono sulla buona strada e come lo farei? Posso associare PortfolioID alla proprietà GridView DataKey (qual è la sintassi corretta per fare questo?)

È stato utile?

Soluzione

Suppongo che stai eliminando una riga alla pressione di un pulsante. Se è così, di solito faccio qualcosa del genere:

<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>

Quindi nel 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 è l'implementazione della riga delete (forse l'SQL che hai sopra). myGrid è la tua griglia. PortfolioID è la chiave primaria. Ciò presuppone inoltre che l'unico pulsante nella griglia sia il pulsante Elimina. Se hai più di un pulsante, devi selezionare e.CommandName == " Elimina " per assicurarti di ottenere il pulsante Elimina.

Altri suggerimenti

Probabilmente vorrei astrarre la chiamata DB più in là che lì. Probabilmente elaborerei le righe dopo il completamento delle modifiche alle righe. Per la postelaborazione è possibile controllare lo stato delle righe per determinare cosa fare con i dati nella riga.

Come ho capito, si desidera eliminare una riga dalla vista Datagrid archiviata dalla tabella del database. Ciò significa che si desidera eliminare e record di tabella da alcuni database. Il modo migliore per farlo è mettere una casella di testo da qualche parte e creare un evento per il tuo datagridview (nell'evento Seleziona riga). In questo modo quando si seleziona la riga che si desidera eliminare l'id di quel roow verrà inviato alla casella di testo (questo sarà codificato). Dopo avere l'ID della riga che si desidera eliminare, è sufficiente aggiungere un altro pulsante per eliminare il record nel database e associare nuovamente 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:

Elimina * da yourtable dove portfolioid = '" + Convert.ToInt32 (this.portfolioId.Text) + "';
        }

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top