View Full Version : [c#] .NET GridView help
ciao a tutti, io ho riempito un GridView con una query select. Solo che volevo metterci come prima colonna un button delete, e fare in modo che se viene premuto mi elimini la riga... come posso fare?
RaouL_BennetH
25-09-2007, 11:35
ciao a tutti, io ho riempito un GridView con una query select. Solo che volevo metterci come prima colonna un button delete, e fare in modo che se viene premuto mi elimini la riga... come posso fare?
La tua griglia è predisegnata oppure viene disegnata a run time in base ai record che recuperi?
In questo secondo caso non ti conviene utilizzare un bottone come prima colonna, altrimenti se recuperi 100 record avrai 100 bottoni da gestire ;)
Per creare comandi che si interfacciano comodamente con la griglia, piazza sul tuo form un binding navigator. Già di base porta un set di command button (ma che puoi sempre eliminare e aggiungere i tuoi) e poi gestire la "delete" nel modo seguente:
private void Button_Click(object Sender, EventArgs e)
{
try
{
string cancella = "DELETE FROM tua tabella WHERE campoTabella = '" + tuaGriglia.Rows[numero_riga].Cells[numero_cella].Value + "';
SqlCommand delete = new SqlCommand(cancella, tua_connessione);
delete.ExecuteNonQuery();
//codice per la gestione della chiusura della connessione
}
catch(SqlException ex) {//gestisci l'eccezione}
}
Altrimenti, se la griglia ha una sola riga (nel qual caso non ti serve una griglia :) )
DataGridViewButtonColumn myButton = new DataGriViewButtonColumn();
myButton.Name = "Cancella";
tuaGriglia.Columns.Add(myButton);
La tua griglia è predisegnata oppure viene disegnata a run time in base ai record che recuperi?
In questo secondo caso non ti conviene utilizzare un bottone come prima
DataGridViewButtonColumn myButton = new DataGriViewButtonColumn();
myButton.Name = "Cancella";
tuaGriglia.Columns.Add(myButton);
nn ho capito molto bene un acosa:
1: consigli di mettere bottoni o link nella prima colonna?
2: quando chiede numeroColonna e numeroCella come si fanno a sapere e cosa sarebbe numero cella?
Thx ;)
RaouL_BennetH
25-09-2007, 13:53
nn ho capito molto bene un acosa:
1: consigli di mettere bottoni o link nella prima colonna?
Beh, sono 2 cose diverse. Ad esempio:
Partendo dal presupposto che un evento da associare ad un bottone è molto diverso da un evento da associare al click su un link:
Se la tabella dalla quale recuperi i record, è predisposta a contenerne molti, non ti conviene mettere dei bottoni all'interno della griglia, per il motivo che ti ho già esposto (almeno io non li metterei).
Avere una colonna in forma di "link", mi può essere utile se il campo che recupero è un sito web oppure un indirizzo di email.
2: quando chiede numeroColonna e numeroCella come si fanno a sapere e cosa sarebbe numero cella?
Non indicavo numero colonna, ma numero riga ;)
Puoi ottenerle in diversi modi, per esempio attraverso la proprietà "Index" del DataGridView oppure mediante la proprietà RowCount.
Per poter cancellare qualcosa con precisione ovviamente nel comando sql devi essere tu a dare le condizioni necessarie e sapere in quale "cella" della griglia si trova il dato che devi confrontare. Ad esempio, se tu hai una tabella del db composta da due campi:
ID e Cognome
In ID ho dei valori: 1 - 2 - 5
e in Cognome ho: Pippo, Paperino, Pluto
se recupero i dati su una griglia, avrò una griglia composta da due colonne:
Colonna "ID" e Colonna "Cognome"
E avrò verosimilmente 3 righe con due celle:
riga0 -> CellaNumero0(contiene:1), CellaNumero1(contiene:Pippo)
riga1 -> CellaNumero0(contiene:2), CellaNumero1(contiene:Paperino)
riga2 -> CellaNumero0(contiene:5), CellaNumero1(contiene:Pluto)
Quindi, come vedi, l'unica cosa che varia è il numero della riga, nel senso che in cella_numero_0 e in cella_numero_1, avrai sempre l'ID ed il Cognome a prescindere dal numero di riga, quindi, la tua query potrebbe somigliare a questa:
/*questa ti cancella il dato dal db dove
il nomeCampo della tabella è uguale
al valore contenuto nella cella numero zero
della riga corrente sulla griglia*/
string sql = "DELETE FROM tuaTabella WHERE nomeCampo = '" + tuaGriglia.CurrentRow.Cells[0].Value + "';
//oppure
/*qui scorre tutte le righe ed eliminerà tutti i record
dal db nei quali il valore contenuto nella cella numero zero,
per ciascuna riga, è uguale a quello del campo della tabella*/
for(int i = 0; i < tuaGriglia.RowCount; i++)
sql = "DELETE from tuaTabella WHERE nomeCampo = '" + tuaGriglia.Rows[i].Cells[0].Value;
Beh, sono 2 cose diverse. Ad esempio:
Partendo dal presupposto che un evento da associare ad un bottone è molto diverso da un evento da associare al click su un link:
Se la tabella dalla quale recuperi i record, è predisposta a contenerne molti, non ti conviene mettere dei bottoni all'interno della griglia, per il m.............
for(int i = 0; i < tuaGriglia.RowCount; i++)
sql = "DELETE from tuaTabella WHERE nomeCampo = '" + tuaGriglia.Rows[i].Cells[0].Value;
[/code]
per contenere ne deve tenere molte di righe.
RaouL_BennetH
25-09-2007, 16:29
per contenere ne deve tenere molte di righe.
Ok, ma il numero di righe altro non sarà che il numero dei record che prenderà dalla tua tabella. A meno di non prefissare tu il numero di righe, ma che poi ti darà rogne infinite se leghi la griglia ad una sorgente dati.
Ok, ma il numero di righe altro non sarà che il numero dei record che prenderà dalla tua tabella. A meno di non prefissare tu il numero di righe, ma che poi ti darà rogne infinite se leghi la griglia ad una sorgente dati.
e infatti io prendo i dati da un db, ma nn dichiaro il num di righe
leggendo questa pagina:
http://msdn2.microsoft.com/it-it/library/system.web.ui.webcontrols.gridview.rowcommand(VS.80).aspx
ho provato a farlo ma mi da sempre questo errore quando premo il btn...
che errore e?
Server Error in '/pro???Application.
--------------------------------------------------------------------------------
The GridView 'GridView1' fired event RowEditing which wasn't handled.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Web.HttpException: The GridView 'GridView1' fired event RowEditing which wasn't handled.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[HttpException (0x80004005): The GridView 'GridView1' fired event RowEditing which wasn't handled.]
System.Web.UI.WebControls.GridView.OnRowEditing(GridViewEditEventArgs e) +324
System.Web.UI.WebControls.GridView.HandleEdit(Int32 rowIndex) +60
System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +705
System.Web.UI.WebControls.GridView.RaisePostBackEvent(String eventArgument) +213
System.Web.UI.WebControls.GridView.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +31
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +32
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +242
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3839
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.