Parfois, je me trouve à un point d'arrêt dans mon code et je souhaite afficher le contenu d'une variable datatable (ou d'une datatable dans un jeu de données). La montre rapide ne vous donne pas une vue très claire du contenu. Comment puis-je les voir facilement?
Réponses
Trop de publicités?Le débogueur Visual Studio est livré avec quatre norme visualiseurs. Ce sont le texte, HTML et XML visualiseurs, qui tous travaillent sur des objets string, et le jeu de données visualizer, qui travaille pour le DataSet, DataView, et des objets DataTable.
Pour l'utiliser, pause dans votre code, de la souris sur le jeu de données, développez le coup d'œil, de visualiser les Tables, développez-la, puis Tableau d'affichage[0] (par exemple). Vous verrez quelque chose comme {1} dans le coup d'œil, mais notez qu'il existe également une icône de la loupe. Cliquez sur cette icône et votre DataTable s'ouvre dans une grille de point de vue.
Pour embellir adinas de la sortie du débogueur j'ai fait un simple formatage:
public void DebugTable(DataTable table)
{
Debug.WriteLine("--- DebugTable(" + table.TableName + ") ---");
int zeilen = table.Rows.Count;
int spalten = table.Columns.Count;
// Header
for (int i = 0; i < table.Columns.Count; i++)
{
string s = table.Columns[i].ToString();
Debug.Write(String.Format("{0,-20} | ", s));
}
Debug.Write(Environment.NewLine);
for (int i = 0; i < table.Columns.Count; i++)
{
Debug.Write("---------------------|-");
}
Debug.Write(Environment.NewLine);
// Data
for (int i = 0; i < zeilen; i++)
{
DataRow row = table.Rows[i];
//Debug.WriteLine("{0} {1} ", row[0], row[1]);
for (int j = 0; j < spalten; j++)
{
string s = row[j].ToString();
if (s.Length > 20) s = s.Substring(0, 17) + "...";
Debug.Write(String.Format("{0,-20} | ", s));
}
Debug.Write(Environment.NewLine);
}
for (int i = 0; i < table.Columns.Count; i++)
{
Debug.Write("---------------------|-");
}
Debug.Write(Environment.NewLine);
}
Le meilleur de cette solution: Vous n'avez pas besoin de Visual Studio! Voici mon exemple de sortie:
SÉLECTIONNEZ PackKurz, PackName, PackGewicht DE verpackungen PackKurz | PackName | PackGewicht | ---------------------|----------------------|----------------------|- BB205 | BigBag 205 kg | 205 | BB300 | BigBag 300 kg | 300 | BB365 | BigBag 365 kg | 365 | CO | Conteneur, Alteru... | | EP | Palette | | CIRTV | Chemikaliengefäß ... | | perdre | nicht verpackungs... | 0 | ---------------------|----------------------|----------------------|-
Ce que je fais est d'avoir une classe statique avec le code suivant dans mon projet:
#region Dataset -> Immediate Window
public static void printTbl(DataSet myDataset)
{
printTbl(myDataset.Tables[0]);
}
public static void printTbl(DataTable mytable)
{
for (int i = 0; i < mytable.Columns.Count; i++)
{
Debug.Write(mytable.Columns[i].ToString() + " | ");
}
Debug.Write(Environment.NewLine + "=======" + Environment.NewLine);
for (int rrr = 0; rrr < mytable.Rows.Count; rrr++)
{
for (int ccc = 0; ccc < mytable.Columns.Count; ccc++)
{
Debug.Write(mytable.Rows[rrr][ccc] + " | ");
}
Debug.Write(Environment.NewLine);
}
}
public static void ResponsePrintTbl(DataTable mytable)
{
for (int i = 0; i < mytable.Columns.Count; i++)
{
HttpContext.Current.Response.Write(mytable.Columns[i].ToString() + " | ");
}
HttpContext.Current.Response.Write("<BR>" + "=======" + "<BR>");
for (int rrr = 0; rrr < mytable.Rows.Count; rrr++)
{
for (int ccc = 0; ccc < mytable.Columns.Count; ccc++)
{
HttpContext.Current.Response.Write(mytable.Rows[rrr][ccc] + " | ");
}
HttpContext.Current.Response.Write("<BR>");
}
}
public static void printTblRow(DataSet myDataset, int RowNum)
{
printTblRow(myDataset.Tables[0], RowNum);
}
public static void printTblRow(DataTable mytable, int RowNum)
{
for (int ccc = 0; ccc < mytable.Columns.Count; ccc++)
{
Debug.Write(mytable.Columns[ccc].ToString() + " : ");
Debug.Write(mytable.Rows[RowNum][ccc]);
Debug.Write(Environment.NewLine);
}
}
#endregion
J'appellerai ensuite l'une des fonctions ci-dessus dans la fenêtre immédiate et les résultats y apparaîtront également. Par exemple, si je veux voir le contenu d'une variable 'myDataset', j'appellerai printTbl (myDataset). Après avoir appuyé sur entrer, les résultats seront imprimés dans la fenêtre immédiate
Essayez le visualiseur Xml . Je n'ai pas encore essayé la dernière version, mais je ne peux pas travailler sans la précédente dans Visual Studio 2003.
Outre l'affichage hiérarchique de DataSet, il existe également de nombreuses autres fonctionnalités utiles, telles que le filtrage et la sélection de l'état RowState à afficher.
Je n'ai pas essayé moi-même, mais Visual Studio 2005 (et les versions ultérieures) prennent en charge le concept de visualiseurs de débogage. Cela vous permet de personnaliser le mode d'affichage d'un objet dans l'EDI. Consultez cet article pour plus de détails.
http://davidhayden.com/blog/dave/archive/2005/12/26/2645.aspx