簡體   English   中英

C#Datatable數據到圖表

[英]C# Datatable data to chart

語言:C#

大家好,

我有點卡在這里,希望有人能指出我正確的方向。

我有一個文本文件作為數據源,並用其中的所有數據制作了一個數據表。 現在,我需要獲取數據以創建圖表。

完整的數據表如下所示

datestamp   |    name_X_1      |    name_X_2      |    name_Y_1      |    name_Y_2
-----------------------------------------------------------------------------------
1/1/199     |    somevalue     |    somevalue     |    somevalue     |    somevalue
1/2/199     |    somevalue     |    somevalue     |    somevalue     |    somevalue

現在,我需要從特定時間獲取name_x_ *列中的所有name_X_ *值(這將是calander控件中的變量)。

這就是我需要圖表數據的方式

datastamp   |    name_x_data        |    name_y_data
-------------------------------------------------------
1/1/199     |    name_X_1_value     |    name_y_1_value  
1/1/199     |    name_X_2_value     |    name_y_2_value  

更麻煩的是,name_X_ *和name_y_ *列可能會有所不同(X和Y是測量中的x和y軸值,並且列的數量始終相同)。 在一個文本文件中,它是10列,而在另一個文本文件中,它可能是20列。因此,我無法對列名稱進行硬編碼。 我需要在name_X_和nam​​e_Y_上進行過濾,並在特定日期進行搜索。

我還可以存儲列數。 因此,如果我們可以選擇X的第2到10列和Y的第10到20列,那就太好了。 可以對數據庫中的文本文件進行管理,在這里我輸入文本文件具有的列數。 因此,如果有人可以選擇使用count,它也會對我有用。

如果有人能指出我正確的方向,我將不勝感激。 我卡住了哈哈

謝謝分配!

ps; 我願意為一個好的解決方案付費:)

這是我到目前為止編寫的代碼:

 DataTable dt = new DataTable();
        string[] columns = null;

        string FileName = "C:\\datapath\\data.dat";
        var lines = File.ReadAllLines(FileName);

        // create columns from text file and skip first few rows
        if (lines.Count() > 2)
            {

                columns = lines[1].Split(new char[] { ',' }).Select(x => x.Replace("\"", "")).ToArray();

                foreach (var column in columns)
                    dt.Columns.Add(column);
            }

        // add data to rows
        for (int i = 2; i < lines.Count(); i++)
            {
                DataRow dr = dt.NewRow();
                string[] values = lines[i].Split(new char[] { ',' }).Select(x => x.Replace("\"", "")).ToArray();

                for (int j = 0; j < values.Count() && j < columns.Count(); j++)
                    dr[j] = values[j];

                dt.Rows.Add(dr);
            }

        // Columns filter (under construction) (this is the part i need to be not hard coded)

        string[] selectedColumns = new[] { "TIMESTAMP", "sensor_X_001", "sensor_X_002" };

        DataTable dt2 = new DataView(dt).ToTable(false, selectedColumns);

        // Date filter (under construction)
        // string s = "2014-05-21 13:05:00";
        // DataRow foundRow = dt2.Tables["TIMESTAMP"].Rows.Find(s);

        // data to grid 
        this.GridView1.DataSource = dt2;
        this.GridView1.DataBind();

找到了一個解決方案,並認為我應該分享它:)

DataTable result = new DataTable();
        result.Columns.Add("datestamp", typeof(String));
        result.Columns.Add("name_x_data", typeof(String));
        result.Columns.Add("name_y_data", typeof(String));
        DataRow drresult;
        foreach (DataRow datarow in dt.Rows)
        {
            for (int i = 1; i <= dt.Columns.Count / 2; i++)
            {
                drresult = result.NewRow();
                drresult["datestamp"] = datarow["datestamp"];
                drresult["name_x_data"] = datarow["name_X_" + i];
                drresult["name_y_data"] = datarow["name_Y_" + i];
                result.Rows.Add(drresult);
            }
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM