我怎样才能在直接窗口中轻松查看数据表或数据视图的内容

有时我会在我的代码断点,我想查看一个数据variables(或数据集中的数据表)的内容。 快速的手表并没有给你一个非常清晰的内容。 我如何轻松查看它们?

Visual Studiodebugging器带有四个标准的可视化器。 这些是文本,HTML和XML可视化器,所有这些都可以在string对象上工作,数据集可视化器可以用于DataSet,DataView和DataTable对象。

要使用它,请打开代码,将鼠标hover在DataSet上,展开快速监视,查看表格,展开表格,然后查看表格[0](例如)。 您会在快速查看中看到类似{Table1}的内容,但请注意,还有一个放大镜图标 。 点击该图标,你的DataTable将在网格视图中打开。

为了美化adinas的debugging器输出,我做了一些简单的格式化:

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

最好的解决scheme: 你不需要Visual Studio ! 这里我的例子输出:

selectPackKurz,PackName,PackGewicht从verpackungen

 PackKurz |  PackName |  PackGewicht | 
 --------------------- | ---------------------- | ----- ----------------- |  - 
 BB205 |  BigBag 205公斤|  205 | 
 BB300 |  BigBag 300公斤|  300 | 
 BB365 |  BigBag 365公斤|  365 | 
 CO | 容器,Alteru ... |  | 
 EP | 调色板|  | 
 IBC |  Chemikaliengefäß... |  | 
失去|  nicht verpackungs ... |  0 | 
 --------------------- | ---------------------- | ----- ----------------- |  - 

我所做的是在我的项目中使用以下代码的静态类:

  #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 

然后我会在即时窗口中调用上述函数之一,结果也会出现在那里。 例如,如果我想查看variables“myDataset”的内容,我将调用printTbl(myDataset)。 点击回车后,结果将被打印到即时窗口

 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 

我没有尝试过,但Visual Studio 2005(及更高版本)支持debugging器展示器的概念。 这使您可以自定义如何在IDE中显示对象。 看看这篇文章的更多细节。

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

给Xml Visualizer一试。 还没有尝试过最新版本,但是如果没有Visual Studio 2003中的前一个版本,我无法工作。

除了显示DataSet之外,还有许多其他方便的function,例如筛选和select要查看的RowState。