89 votes

Comment puis-je facilement voir le contenu d'un datatable ou dataview dans la fenêtre immédiate

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?

178voto

Rob Prouse Points 9193

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.

17voto

Luluha Points 31

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

3voto

adinas Points 844

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

1voto

Gerrie Schenck Points 13421

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.

0voto

gilles27 Points 863

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X