comment convertir le contenu d'un DataTable colonne à une chaîne délimitée en C#?
Je suis de la récupération de données à partir d'un MSSQL server à l'aide de la SqlDataAdapter et l'ensemble de données. À partir de ce DataSet je suis entrain de créer un DataTable. Mon but est de convertir chaque colonne de la table dans une chaîne où les éléments sont délimités par des virgules. J'ai pensé que je voudrais essayer la chaîne de conversion d'abord avant de faire le délimiteur de travail.
Le code s'exécute dans le code-behind de l'ASP.Net page. Le but ultime est de faire passer la chaîne d'un jscript variable, c'est une "exigence fonctionnelle" que j'ai créer une chaîne délimitée par des colonnes et qu'il a de se retrouver comme un jscript variable.
Voici ce que j'ai à ce jour:
DataSet myDataSet = new DataSet();
mySqlDataAdapter.Fill(myDataSet);
DataTable temperature = myDataSet.Tables["Table"];
//LOOP1
foreach (DataRow row in temperature.Rows)
//this loop works fine and outputs all elements
//of the table to the web page, this is just to
//test things out
{
foreach (DataColumn col in temperature.Columns)
{
Response.Write(row[col] + " ### ");
}
Response.Write("<br>");
}
//LOOP2
foreach (DataColumn column in temperature.Columns)
//this loop was meant to take all elements for each
//column and create a string, then output that string
{
Response.Write(column.ToString() + "<br>");
}
Dans LOOP1 choses fonctionnent bien. Mes données ont des en 4 colonnes, tous sont bien rendu avec un enregistrement par ligne sur la page web.
J'ai vu le code de LOOP2 à http://msdn.microsoft.com/en-us/library/system.data.datacolumn.tostring.aspx qui semble faire exactement ce dont j'ai besoin, sauf qu'elle n'est pas réellement ce que je veux.
La seule chose LOOP2 n'est écrire 4 lignes à la page web. Chaque ligne comporte l'en-tête de chaque colonne de la table, mais aucun de ces données supplémentaires. Clairement il y a une logique faille de ma part ou j'ai mal compris comment DataColumn et .toString pour qu'il fonctionne. Merci de m'aider sur ce point. Merci à l'avance.
EDIT:
Voici une requête SQL résultat exemple, c'est ce que le Tableau ressemble à:
Tableau quesry résultat @ ImageShack
Ce que je veux pour la fin de quatre cordes, voici un exemple pour la chaîne qui serait créé à partir de la deuxième colonne: "-6.7, -7, -7.2, -7.3, -7.3".
Actuellement oui, une chaîne de caractères par colonne, ce qui signifie que tous les dossiers dans la colonne sont convertis en une seule chaîne. La raison de tout cela, cependant, est de passer d'une chaîne à une jscript variable plutôt que de réponse.write ().
OriginalL'auteur Reality Extractor | 2011-04-21
Vous devez vous connecter pour publier un commentaire.
Ce code permet de concaténer des valeurs de cellules de chaque colonne avec
", "
:Par exemple, pour DataTable défini comme:
... il va produire
"1, 11, 111"
et"2, 22, 222"
chaînes.Edit: j'ai vu que vous avez choisi de déclarer la colonne de var par opposition à DataColumn est qu'une question de préférence personnelle/style ou est-il un problème avec le codage?
Envisager la suite de scénario (sur le même tableau de données exemple que ci-dessus):
Nous assumer nous avons maintenant la liste de liste de valeurs de la colonne. Donc, lorsque nous avons l'impression, comme ceci:
Nous nous attendons à voir
1 11 111
suivie par2 22 222
. Droit?Mal.
Ce code de sortie
2 22 222
deux fois. Pourquoi? Notre.Select(r => r[column].ToString())
capturecolumn
variable pas sa valeur, mais la variable elle-même - et depuis nous ne l'utilisez pas immédiatement, une fois que nous sommes hors de la boucle tout ce que nous savons est dernier valeur decolumn
.Pour en savoir plus sur ce concept de recherche pour fermetures et capturé variables - par exemple, dans les postes comme cette.
Résumé:
Dans ce cas, vous pouvez aller avec
DataColumn
dansforeach
déclaration. Il n'est pas question ici parce que nous sommes l'énumération par le biais de notre.Select(r => r[dc])
de toute façon à l'intérieur de la boucle (précisément,string.Join
n'est que pour nous), produire des résultats avant de passer à la prochaine itération - ce que nous capture, est utilisé immédiatement.Votre fichier est manquant du Système.Linq espace de noms, il suffit d'ajouter
using System.Linq;
.Génial! Merci beaucoup en effet. Malheureusement je ne peux pas voter cette encore.
Excellent Exemple +1 mal-être à l'aide dans le futur.
J'ai vu que vous avez choisi de déclarer la colonne de var par opposition à DataColumn est qu'une question de préférence personnelle/style ou est-il un problème avec le codage comme si
foreach (DataColumn column in temperature.Columns) { string s = string.Join(", ", temperature.Rows.OfType<DataRow>().Select(r => r[column])); // do whatever you need with s now}
OriginalL'auteur k.m
Le lien que vous avez posté stipule clairement
et c'est ce qui se passe. Vous obtenez les noms de colonne.
OriginalL'auteur amit_g
Cela pourrait aider: Comment faire pour convertir un DataTable à une chaîne de caractères en C#?
OriginalL'auteur Priyank