2013-10-28 18 views
9

Ich habe eine Datentabelle erstellt. Es verfügt über 3 Spalte Product_id, Product_name und Product_priceSo bearbeiten Sie eine Zeile in der Datentabelle

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"); 

Jetzt habe ich durch den Index finden wollen, und diese Zeile aktualisieren.

sagen für z.B.

Ich möchte Wert von Product_name Spalte ändern, um „cde“, dass die Product_id Spalte Wert hat: 2.

+0

bitte bearbeiten Sie Ihre Frage den Code enthalten, was Sie bisher versucht haben. Vielen Dank. –

Antwort

37

Zuerst müssen Sie eine Zeile mit id == finden 2 dann den Namen ändern, so :

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

Sie könnten auch diese Lösungen versuchen:

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

Oder:

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

Warum eine akzeptierte Antwort ablehnen? – Tafari

+1

Vielleicht sollte Stackoverflow erwägen, Notizen für Downvotes anzufertigen. – sojim2

1

Sie können wie unten durch die Datatable durchqueren und den Wert

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

ODER

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

Hope this

+0

Es wird alle Zeilen "Product_name" aktualisieren, also ist es nicht korrekt. – Tafari

+0

Das stimmt, wir können eine Bedingung hinzufügen, um die Daten zu validieren und nur dann zu aktualisieren ... die zweite Methode tut dies für die spezifische Zeile obwohl –

2

Versuchen Sie, das hilft auch ich bin nicht 100% sicher

 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

können Sie diese Zeile finden mit

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

und aktualisieren Sie es

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

Obwohl dies für OP Frage funktioniert, bitte beachten Sie, diese Lösung nur den ersten Datensatz aktualisiert, wenn Auswahl zurückgibt mehrere Datensätze. – AaA

+0

Diese Lösung funktioniert gut und wie AaA sagt, es funktioniert nur für das erste Ergebnis, aber wenn Sie nach einem eindeutigen Wert auf der Datentabelle suchen, dann sollte dies wie erwartet funktionieren –

3

Wenn Ihr Datensatz zu groß erste ist, wählen Sie erforderlichen Zeilen von Select(). es hört auf, weiter zu loopen.

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

Dann Schleife durch Teilmenge und aktualisieren

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

Versuchen Sie, die SetField Methode:

table.Rows[rowIndex].SetField(column, value); 
table.Rows[rowIndex].SetField(columnIndex, value); 
table.Rows[rowIndex].SetField(columnName, value); 
Verwandte Themen