2010-05-15 2 views

Répondre

20

Vous pourriez essayer quelque chose comme ça peut-être?

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

Conjugué à un DataTable existant avec les données qu'il contient, ce sera remplir automatiquement la nouvelle colonne dans les lignes existantes? – Lunyx

1

Vous ne faites pas autoincrement sur DataTable (ou front-end pour cette matière), sauf si vous voulez faire votre demande une application unique utilisateur uniquement.

Si vous avez besoin de l'autoincrément, faites-le simplement dans la base de données, puis récupérez l'ID auto-incrémenté produit depuis la base de données vers votre frontal.

Voir ma réponse ici, il suffit de changer le SqliteDataAdapter à SqlDataAdapter, SqliteConnection à 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

Je suis en train de lire des données à partir d'un fichier plat et j'ai besoin d'ajouter un numéro de ligne au DataTable - il y a des moments où cela est valide, et non cela ne fera pas de mon application un utilisateur unique. – MrTelly

+0

Oui, ou pour la sortie ..... Je génère une sortie qui est composée de plusieurs lectures indépendantes, qui doivent se terminer dans une seule séquence. C'est une utilisation locale très importante du DataTable ...... isolation similaire à "single-user", mais pas du tout la même chose. –

0

Juste mes deux cents. Auto-incrément est utile dans une application Winform (stand alone comme Michael Buen a dit à juste titre), à ​​savoir:

DatagridView est utilisé pour afficher les données qui ne sont pas un « champ de clé », la même chose peut être utilisé pour énumération.

0

Je ne pense pas une bonne idée d'utiliser autoincrement sur datatable si vous utilisez insérer et supprimer un datatable parce que le nombre ne sera pas rearranget, pas finale, je vais partager une petite idée de comment peut-on utiliser manuel d'auto-incrémentation .

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

toujours lors de la finalisation de l'insert ou supprimer doit exécuter cette boucle

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

C'est vraiment déroutant. Et changer 'DataTable' ne change pas la DB, et je crois que c'est la partie essentielle de la question OPs. – 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

Si le DataTable est déjà peuplée. vous pouvez utiliser la méthode ci-dessous

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

    } 
Questions connexes