2010-05-15 22 views

Antwort

20

Sie könnten so etwas vielleicht versuchen?

private void AddAutoIncrementColumn() 
{ 
    DataColumn column = new DataColumn(); 
    column.DataType = System.Type.GetType("System.Int32"); 
    column.AutoIncrement = true; 
    column.AutoIncrementSeed = 1000; 
    column.AutoIncrementStep = 10; 

    // Add the column to a new DataTable. 
    DataTable table = new DataTable("table"); 
    table.Columns.Add(column); 
} 
+0

Wenn eine vorhandene DataTable mit Daten darin hinzugefügt wird, füllt dies automatisch die neue Spalte in den vorhandenen Zeilen? – Lunyx

1

Sie nicht autoincrement auf Datatable (oder Front-End für diese Angelegenheit), es sei denn, Sie nur Ihre Anwendung eine einzige Benutzeranwendung machen wollen.

Wenn Sie das Autoinkrement benötigen, tun Sie es einfach in der Datenbank und rufen Sie dann die automatisch inkrementierte ID ab, die aus der Datenbank für Ihr Frontend erzeugt wurde.

Siehe meine Antwort hier, nur die SqliteDataAdapter zu SqlDataAdapter ändern, SqliteConnection zu SqlConnection, etc: anyway see why I get this "Concurrency Violation" in these few lines of code??? Concurrency violation: the UpdateCommand affected 0 of the expected 1 records

+1

Ich lese Daten aus der Flat-Datei und muss eine Zeilennummer zur DataTable hinzufügen - es gibt Zeiten, wenn dies gültig ist, und nein, es macht meine App nicht zu einem einzelnen Benutzer. – MrTelly

+0

ja, oder für die Ausgabe ..... Ich erzeuge Ausgabe, die aus mehreren unabhängigen Lesevorgänge besteht, die in einer einzigen Sequenz enden müssen. Es ist eine sehr wichtige lokale Verwendung der DataTable ...... ähnliche Isolation wie "Single-User", aber nicht das Gleiche. –

0

Nur meine zwei Cent. Auto-Zuwachs ist nützlich in einer Winform App (stand alone als Michael Buen zu Recht gesagt hat), das heißt:

DatagridView wird verwendet, um Daten anzuzeigen, die nicht ein „Schlüsselfeld“ hat, kann die gleiche verwendet werden für Aufzählung.

0

Ich denke nicht, es ist eine gute Idee autoincrement auf Datentabelle zu verwenden, wenn Sie Einsatz verwenden und zu einer Datentabelle zu löschen, weil die Zahl nicht rearranget werden, keine endgültige i wird eine kleine Idee teilen, wie können wir autoincrement Handbuch verwenden .

  DataTable dt = new DataTable(); 
     dt.Columns.Add("ID",typeof(int)); 
     dt.Columns.Add("Produto Nome", typeof(string)); 

     dt.Rows.Add(null, "A"); 
     dt.Rows.Add(null, "B"); 
     dt.Rows.Add(null, "C"); 

     for(int i=0;i < dt.Rows.Count;i++) 
     { 
      dt.Rows[i]["ID"] = i + 1; 
     } 

immer bei der endgültigen Festlegung des Einsatzes oder löschen müssen

  for(int i=0;i < dt.Rows.Count;i++) 
     { 
      dt.Rows[i]["ID"] = i + 1; 
     } 
+0

Das ist wirklich verwirrend. Und das Ändern von 'DataTable' ändert die DB nicht, und ich glaube, das ist der wesentliche Teil der OP-Frage. – andr

6
DataTable table = new DataTable("table"); 


DataColumn dc= table.Columns.Add("id", typeof(int)); 
     dc.AutoIncrement=true; 
     dc.AutoIncrementSeed = 1; 
     dc.AutoIncrementStep = 1; 

// Add the new column name in DataTable 

table.Columns.Add("name",typeof(string)); 

    table.Rows.Add(null, "A"); 
    table.Rows.Add(null, "B"); 
    table.Rows.Add(null, "C"); 
1

dieser Schleife laufen Wenn die Datentabelle bereits ausgefüllt ist. Sie können die folgende Methode verwenden

void AddAndPopulateDataTableRowID(DataTable dt, string col, bool isGUID) 
    { 
     if(isGUID) 
      dt.Columns.Add(col, typeof(System.Guid)); 
     else 
      dt.Columns.Add(col, typeof(System.Int32)); 

     int rowid = 1; 
     foreach (DataRow dr in dt.Rows) 
     { 
      if (isGUID) 
       dr[col] = Guid.NewGuid(); 
      else 
       dr[col] = rowid++; 
     } 

    } 
Verwandte Themen