|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2005
Città: CH
Messaggi: 1058
|
[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?
|
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
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: Codice:
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}
}
Codice:
DataGridViewButtonColumn myButton = new DataGriViewButtonColumn(); myButton.Name = "Cancella"; tuaGriglia.Columns.Add(myButton);
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Jun 2005
Città: CH
Messaggi: 1058
|
Quote:
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 |
|
|
|
|
|
|
#4 | ||
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
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. Quote:
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: Codice:
/*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;
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
Ultima modifica di RaouL_BennetH : 25-09-2007 alle 14:56. |
||
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jun 2005
Città: CH
Messaggi: 1058
|
Quote:
per contenere ne deve tenere molte di righe. |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
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.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jun 2005
Città: CH
Messaggi: 1058
|
e infatti io prendo i dati da un db, ma nn dichiaro il num di righe
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jun 2005
Città: CH
Messaggi: 1058
|
leggendo questa pagina:
http://msdn2.microsoft.com/it-it/lib...nd(VS.80).aspx ho provato a farlo ma mi da sempre questo errore quando premo il btn... che errore e? Codice:
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 |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jun 2005
Città: CH
Messaggi: 1058
|
risolto thx
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:54.




















