2013-10-28 12 views
9

Ho creato una tabella di dati. Ha 3 colonna Product_id, Product_name e Product_priceCome modificare una riga nel datatable

Datatable table= new DataTable("Product"); 

    table.Columns.Add("Product_id", typeof(int)); 
    table.Columns.Add("Product_name", typeof(string)); 
    table.Columns.Add("Product_price", typeof(string)); 

    table.Rows.Add(1, "abc", "100"); 
    table.Rows.Add(2, "xyz", "200"); 

Ora voglio trovare per indice, e aggiornare quella riga.

dire per es.

voglio cambiare il valore di Product_name colonna a "cde", che ha il valore di Product_id colonna: 2.

+0

si prega di modificare la tua domanda per includere il codice di quello che hai tentato finora. Grazie. –

risposta

37

In primo luogo è necessario trovare una riga con id == 2 quindi modificare il nome in modo :

foreach(DataRow dr in table.Rows) // search whole table 
{ 
    if(dr["Product_id"] == 2) // if id==2 
    { 
     dr["Product_name"] = "cde"; //change the name 
     //break; break or not depending on you 
    } 
} 

Si potrebbe anche provare queste soluzioni:

table.Rows[1]["Product_name"] = "cde" // not recommended as it selects 2nd row as I know that it has id 2 

Oppure:

DataRow dr = table.Select("Product_id=2").FirstOrDefault(); // finds all rows with id==2 and selects first or null if haven't found any 
if(dr != null) 
{ 
    dr["Product_name"] = "cde"; //changes the Product_name 
} 
+1

Perché downvotare una risposta accettata? – Tafari

+1

Forse lo stackoverflow dovrebbe prendere in considerazione la richiesta di note (possono essere conservate) per i downvotes. – sojim2

1

È possibile attraversare attraverso la DataTable come qui di seguito e impostare il valore

foreach(DataTable thisTable in dataSet.Tables) 
{ 
    foreach(DataRow row in thisTable.Rows) 
    { 
     row["Product_name"] = "cde"; 
    } 
} 

O

thisTable.Rows[1]["Product_name"] = "cde"; 

Spero che questo aiuti

+0

Aggiorna tutte le righe "Product_name", quindi non è corretto. – Tafari

+0

È vero, possiamo aggiungere una condizione per convalidare i dati e solo dopo aggiornare ... il secondo metodo lo fa per la riga specifica anche se –

2

Prova questo sono, inoltre, non sono sicuro al 100%

 for(int i = 0 ;i< dt.Rows.Count; i++) 
     { 
      If(dt.Rows[i].Product_id == 2) 
      { 
       dt.Rows[i].Columns["Product_name"].ColumnName = "cde"; 
      } 
     } 
11

È possibile trovare la riga con

DataRow row = table.Select("Product_id=2").FirstOrDefault(); 

e aggiornarlo

row["Product_name"] = "cde"; 
+0

Sebbene questo funzioni per la domanda OP, si noti che questa soluzione aggiorna solo il primo record se si seleziona la restituzione più record. – AaA

+0

Queste soluzioni funzionano alla grande e come dice AaA funziona solo per il primo risultato, tuttavia se stai cercando un valore unico sul datatable allora questo dovrebbe funzionare come previsto –

3

Se il set di dati è troppo grande prime file Scegliete il termine Select(). si fermerà ulteriormente in loop.

DataRow[] selected = table.Select("Product_id = 2") 

Poi scorrere sottoinsieme e aggiornare

foreach (DataRow row in selected) 
    { 
     row["Product_price"] = "<new price>"; 
    } 
1

provare il SetField metodo:

table.Rows[rowIndex].SetField(column, value); 
table.Rows[rowIndex].SetField(columnIndex, value); 
table.Rows[rowIndex].SetField(columnName, value); 
Problemi correlati