मैं तत्काल विंडो में आसानी से डेटाटेबल या डेटाव्यू की सामग्री कैसे देख सकता हूं


87

कभी-कभी मैं अपने कोड में एक ब्रेकपॉइंट पर होता हूं और मैं एक DataTableचर (या DataTableएक DataSet) की सामग्री को देखना चाहता हूं । त्वरित घड़ी आपको सामग्री का बहुत स्पष्ट दृष्टिकोण नहीं देती है। मैं उन्हें आसानी से कैसे देख सकता हूं?


आप विजुअल स्टूडियो के किस संस्करण पर काम कर रहे हैं?
गैरी शेंक

1
अंतर्निहित विज़ुअलाइज़र का उपयोग क्यों नहीं करते हैं?
गैरी शेंक

जवाबों:


171

विज़ुअल स्टूडियो डीबगर चार मानक विज़ुअलाइज़र के साथ आता है। ये टेक्स्ट, HTML और XML विज़ुअलाइज़र हैं, जो सभी स्ट्रिंग ऑब्जेक्ट्स पर काम करते हैं, और डेटासेट, डेटा व्यू और डेटाटेबल ऑब्जेक्ट्स के लिए काम करने वाले डेटासेट विज़ुअलाइज़र हैं।

इसका उपयोग करने के लिए, अपने कोड में ब्रेक करें, अपने डेटासेट पर माउस डालें, त्वरित वॉच का विस्तार करें, टेबल्स देखें, उसका विस्तार करें, फिर तालिका [0] (उदाहरण के लिए) देखें। आपको क्विक वॉच में {Table1} जैसा कुछ दिखाई देगा, लेकिन ध्यान दें कि इसमें आवर्धक ग्लास आइकन भी है । उस आइकन पर क्लिक करें और आपका डेटाटेबल ग्रिड दृश्य में खुल जाएगा।

यहाँ छवि विवरण दर्ज करें


15

एडिनस के डिबगर उत्पादन को सुशोभित करने के लिए मैंने कुछ सरल प्रारूपण बनाए:

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

इस समाधान के सर्वश्रेष्ठ: आपको विजुअल स्टूडियो की आवश्यकता नहीं है ! यहाँ मेरा उदाहरण आउटपुट:

पैक्टकन्जेन से पैक पैकुरज़, पैकनाम, पैकगिचट का चयन करें

पैककर्ज | पैकनाम | PackGewicht |
--------------------- | ---------------------- | ----- ----------------- | -
BB205 | बिगबाग 205 किलो | 205 |
BB300 | बिगबाग 300 किलो | 300 |
BB365 | बिगबाग 365 किलो | 365 |
सीओ | कंटेनर, अलटरू ... | |
ईपी | पैलेट | |
IBC | चेमिकलींगेफै ... | |
हार | nicht verpackungs ... | 0 |
--------------------- | ---------------------- | ----- ----------------- | -

1

मेरी परियोजना में निम्नलिखित कोड के साथ एक स्थिर वर्ग है:

    #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

फिर मैं तत्काल विंडो में उपरोक्त कार्यों में से एक को कॉल करूंगा और परिणाम वहां भी दिखाई देंगे। उदाहरण के लिए यदि मैं एक चर 'myDataset' की सामग्री देखना चाहता हूं तो मैं printTbl (myDataset) कहूंगा। एंट्री मारने के बाद, परिणाम तत्काल विंडो पर प्रिंट किए जाएंगे


1

Xml विज़ुअलाइज़र को एक कोशिश दें । अभी तक नवीनतम संस्करण की कोशिश नहीं की है, लेकिन मैं Visual Studio 2003 में पिछले एक के बिना काम नहीं कर सकता।

DataSet को पदानुक्रम से प्रदर्शित करने के शीर्ष पर, रोस्टेट को फ़िल्टर करने और चयन करने जैसी कई अन्य उपयोगी सुविधाएँ भी हैं जिन्हें आप देखना चाहते हैं।


1
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

और अगर आप इसे कहीं भी चाहते हैं ... DataTable पर एक सहायक होने के लिए यह मान लें कि आप Log4Net को आउटपुट कैप्चर करना चाहते हैं, लेकिन उत्कृष्ट शुरुआती उदाहरण मैंने कंसोल के लिए बस डंप के खिलाफ काम किया ... यह भी संपादन योग्य स्तंभ चौड़ाई चर nMaxxolWidth है - अंतत: मैं इसे पास करूंगा जो भी संदर्भ से ...

public static class Helpers
    {
        private static ILog Log = Global.Log ?? LogManager.GetLogger("MyLogger");
        /// <summary>
        /// Dump contents of a DataTable to the log
        /// </summary>
        /// <param name="table"></param>
        public static void DebugTable(this DataTable table)
        {
            Log?.Debug("--- DebugTable(" + table.TableName + ") ---");
            var nRows = table.Rows.Count;
            var nCols = table.Columns.Count;
            var nMaxColWidth = 32;

            // Column Headers

            var sColFormat = @"{0,-" + nMaxColWidth + @"} | ";
            var sLogMessage = string.Empty;
            for (var i = 0; i < table.Columns.Count; i++)
            {
                sLogMessage = string.Concat(sLogMessage, string.Format(sColFormat, table.Columns[i].ToString()));
            }
            //Debug.Write(Environment.NewLine);
            Log?.Debug(sLogMessage);

            var sUnderScore = string.Empty;
            var sDashes = string.Empty;
            for (var j = 0; j <= nMaxColWidth; j++)
            {
                sDashes = sDashes + "-";
            }


            for (var i = 0; i < table.Columns.Count; i++)
            {
                sUnderScore = string.Concat(sUnderScore, sDashes + "|-");
            }

            sUnderScore = sUnderScore.TrimEnd('-');

            //Debug.Write(Environment.NewLine);
            Log?.Debug(sUnderScore);

            // Data
            for (var i = 0; i < nRows; i++)
            {
                DataRow row = table.Rows[i];
                //Debug.WriteLine("{0} {1} ", row[0], row[1]);
                sLogMessage = string.Empty;

                for (var j = 0; j < nCols; j++)
                {
                    string s = row[j].ToString();
                    if (s.Length > nMaxColWidth) s = s.Substring(0, nMaxColWidth - 3) + "...";
                    sLogMessage = string.Concat(sLogMessage, string.Format(sColFormat, s));
                }

                Log?.Debug(sLogMessage);
                //Debug.Write(Environment.NewLine);
            }           
            Log?.Debug(sUnderScore);
        }
}

1

मैं इसके लिए एक छोटी सी विधि क्रमादेशित है .. इसका एक सामान्य कार्य ..

    public static void printDataTable(DataTable tbl)
    {
        string line = "";
        foreach (DataColumn item in tbl.Columns)
        {
            line += item.ColumnName +"   ";
        }
        line += "\n";
        foreach (DataRow row in tbl.Rows)
        {
            for (int i = 0; i < tbl.Columns.Count; i++)
            {
                line += row[i].ToString() + "   ";
            }
            line += "\n";
        }
        Console.WriteLine(line) ;
    }

0

मैंने इसे स्वयं आज़माया नहीं है, लेकिन विज़ुअल स्टूडियो 2005 (और बाद में) डीबगर विज़ुअलाइज़र की अवधारणा का समर्थन करता है। यह आपको यह अनुकूलित करने की अनुमति देता है कि कोई वस्तु आईडीई में कैसे दिखाई जाती है। अधिक जानकारी के लिए इस लेख को देखें।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.