如何从数据表的整个单元格填充我的数组?

时间:2010-06-19 14:24:27

标签: c# .net visual-studio visual-studio-2008

我有一个我在下面创建的数据表,我需要在数据表中列出所有行的单元格长度。我的结果必须不包括“0”值。但是我的清单:19,19,19,19,19,0.0.0.0..0.0 .....那么为什么呢?我怎么能看到我的阵列的长度?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace DataTables
{
    class Program
    {
        static void Main(string[] args)
        {
            DataTable table = GetTable();
            int[] mySortedLists = new int[table.Rows.Count*table.Columns.Count];
            foreach (DataColumn dc in table.Columns)
            {
                foreach (DataRow dr in table.Rows)
                {
                    Console.WriteLine(dr[dc].ToString().Length);
                }
                Console.WriteLine("\t");
            }

            Console.WriteLine("--------------------------------------");

            for (int i = 0; i < table.Rows.Count; i++)
           {
                for (int j = 0; j < table.Columns.Count; j++)
                {
                    mySortedLists[i] += table.Rows[i][j].ToString().Length;
                }
            }

            foreach (var mySortedList in mySortedLists)
            {
                Console.WriteLine(mySortedList.ToString() + "\n");
            }

            Console.ReadKey();
        }

        static DataTable GetTable()
        {
            //
            // Here we create a DataTable with four columns.
            //
            DataTable table = new DataTable();
            table.Columns.Add("Dosage", typeof(int));
            table.Columns.Add("Drug", typeof(string));
            table.Columns.Add("Patient", typeof(string));
            table.Columns.Add("Date", typeof(DateTime));

            //
            // Here we add five DataRows.
            //
            table.Rows.Add(25, "Indocin", "David", DateTime.Now);
            table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
            table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
            table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
            table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);

            return table;
        }
    }
}

请帮助我!

3 个答案:

答案 0 :(得分:0)

除非我误解了你想要完成的任务,否则问题在于你如何声明mySortedLists数组。你希望它像这样声明:

int[] mySortedLists = new int[table.Rows.Count];

要查看数组的长度,可以使用

Console.WriteLine(mySortedLists.Length);

答案 1 :(得分:0)

您声明mySortedLists的长度为table.Rows.Count * table.Columns.Count,但您只使用第一个table.Rows.Count条目。如果你想要每行一个长度值,那么你可能想要:

int[] mySortedLists = new int[table.Rows.Count];

或者,如果你想要每个单元格有一个长度值,那么你要么想要一个二维数组:

int[,] mySortedLists = new int[table.Rows.Count, table.Columns.Count];
...
mySortedLists[i, j] += table.Rows[i][j].ToString().Length;

或者你想要展平数组索引:

mySortedLists[i * table.Columns.Count + j] += table.Rows[i][j].ToString().Length;

答案 2 :(得分:0)

我无法判断您是否尝试获取每行单元格的总长度,或每行中每个单元格的各个长度。您的数组声明的长度将支持后一种情况,但您只为前一种情况分配值。这里有两个Linq方法来获取存储的长度值,第一个是将长度放入一个具有每个字段长度的锯齿状数组中。

int[][] lengths;

using (DataTable table = GetTable())
{
    lengths = (from DataRow row in table.Rows
                select
                (from DataColumn col in table.Columns
                select row[col].ToString().Length).ToArray()).ToArray();
}

foreach (int[] row in lengths)
{
    Console.WriteLine(string.Join(",", row));
}

第二个启动相同,但在第一个.ToArray()之前的末尾执行聚合,因此它获取每个单独行的总长度并将其存储在数组中。

int[] array;

using (DataTable table = GetTable())
{
    array = (from DataRow row in table.Rows
                select
                (from DataColumn col in table.Columns
                select row[col].ToString().Length).Sum()).ToArray();
}

foreach (int value in array)
    Console.WriteLine(value);