How can I easily view the contents of a datatable or dataview in a nearby window

Sometimes I will be at a breakpoint in my code, and I want to view the contents of a data variable (or data in a data set). A quick watch does not give you a clear idea of ​​the content. How can I easily view them?

+62
c # visual-studio
Jan 29 '09 at 13:21
source share
6 answers

The Visual Studio debugger comes with four standard visualizers. These are text, HTML, and XML visualizers, all of which work with string objects and a dataset visualizer that works for DataSet, DataView, and DataTable objects.

To use it, go to your code, hover over your DataSet, expand the quick view, view the Tables, expand it, then view the table [0] (for example). In the fast watch, you will see something like {Table1}, but note that there is a magnifying glass icon. Click on this icon and your DataTable will open as a grid.

+133
Jan 29 '09 at 13:40
source share

To decorate the output of the adinas debugger, I made some simple forms:

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

Best of this solution: You do not need Visual Studio ! Here is my example:

 SELECT PackKurz, PackName, PackGewicht FROM verpackungen

 PackKurz |  PackName |  PackGewicht | 
 --------------------- | ---------------------- | ----- ----------------- | -
 BB205 |  BigBag 205 kg |  205 | 
 BB300 |  BigBag 300 kg |  300 | 
 BB365 |  BigBag 365 kg |  365 | 
 CO |  Container, Alteru ... |  | 
 EP |  Palette |  | 
 IBC |  Chemikaliengefäß ... |  | 
 lose |  nicht verpackungs ... |  0 | 
 --------------------- | ---------------------- | ----- ----------------- | -
+11
Aug 21 '13 at 9:25
source share

My project has a static class with the following code:

  #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 

Then I will call one of the above functions in the direct window, and the results will also appear there. For example, if I want to see the contents of the variable 'myDataset', I will call printTbl (myDataset). After pressing enter, the results will be printed in the next window

+1
Jan 29 '09 at 13:25
source share
 public static void DebugDataSet ( string msg, ref System.Data.DataSet ds ) { WriteIf ( "===================================================" + msg + " START " ); if (ds != null) { WriteIf ( msg ); foreach (System.Data.DataTable dt in ds.Tables) { WriteIf ( "================= My TableName is " + dt.TableName + " ========================= START" ); int colNumberInRow = 0; foreach (System.Data.DataColumn dc in dt.Columns) { System.Diagnostics.Debug.Write ( " | " ); System.Diagnostics.Debug.Write ( " |" + colNumberInRow + "| " ); System.Diagnostics.Debug.Write ( dc.ColumnName + " | " ); colNumberInRow++; } //eof foreach (DataColumn dc in dt.Columns) int rowNum = 0; foreach (System.Data.DataRow dr in dt.Rows) { System.Diagnostics.Debug.Write ( "\n row " + rowNum + " --- " ); int colNumber = 0; foreach (System.Data.DataColumn dc in dt.Columns) { System.Diagnostics.Debug.Write ( " |" + colNumber + "| " ); System.Diagnostics.Debug.Write ( dr[dc].ToString () + " " ); colNumber++; } //eof foreach (DataColumn dc in dt.Columns) rowNum++; } //eof foreach (DataRow dr in dt.Rows) System.Diagnostics.Debug.Write ( " \n" ); WriteIf ( "================= Table " + dt.TableName + " ========================= END" ); WriteIf ( "===================================================" + msg + " END " ); } //eof foreach (DataTable dt in ds.Tables) } //eof if ds !=null else { WriteIf ( "NULL DataSet object passed for debugging !!!" ); } } //eof method public static void WriteIf ( string msg ) { //TODO: FIND OUT ABOUT e.Message + e.StackTrace from Bromberg eggcafe int output = System.Convert.ToInt16(System.Configuration.ConfigurationSettings.AppSettings["DebugOutput"] ); //0 - do not debug anything just run the code switch (output) { //do not debug anything case 0: msg = String.Empty; break; //1 - output to debug window in Visual Studio case 1: System.Diagnostics.Debug.WriteIf ( System.Convert.ToBoolean( System.Configuration.ConfigurationSettings.AppSettings["Debugging"] ), DateTime.Now.ToString ( "yyyy:MM:dd -- hh:mm:ss.fff --- " ) + msg + "\n" ); break; //2 -- output to the error label in the master case 2: string previousMsg = System.Convert.ToString (System.Web.HttpContext.Current.Session["global.DebugMsg"]); System.Web.HttpContext.Current.Session["global.DebugMsg"] = previousMsg + DateTime.Now.ToString ( "yyyy:MM:dd -- hh:mm:ss.fff --- " ) + msg + "\n </br>"; break; //output both to debug window and error label case 3: string previousMsg1 = System.Convert.ToString (System.Web.HttpContext.Current.Session["global.DebugMsg"] ); System.Web.HttpContext.Current.Session["global.DebugMsg"] = previousMsg1 + DateTime.Now.ToString ( "yyyy:MM:dd -- hh:mm:ss.fff --- " ) + msg + "\n"; System.Diagnostics.Debug.WriteIf ( System.Convert.ToBoolean( System.Configuration.ConfigurationSettings.AppSettings["Debugging"] ), DateTime.Now.ToString ( "yyyy:MM:dd -- hh:mm:ss.fff --- " ) + msg + "\n </br>" ); break; //TODO: implement case when debugging goes to database } //eof switch } //eof method WriteIf 
+1
Feb 12 '09 at 20:46
source share

I have not tried it myself, but Visual Studio 2005 (and later) supports the concept of debugger visualizers. This allows you to customize how the object displays in the IDE. Check out this article for more details.

http://davidhayden.com/blog/dave/archive/2005/12/26/2645.aspx

0
Jan 29 '09 at 13:33
source share

Give Xml Visualizer a try. I have not tried the latest version, but I cannot work without the previous one in Visual Studio 2003.

on top of displaying the DataSet hierarchically, there are also many other handy features, such as filtering and selecting the RowState that you want to view.

0
Jan 29 '09 at 13:34
source share



All Articles