首页 > 解决方案 > 将数组添加到具有有限列的数据表中

问题描述

我已经知道如何将数组添加到datatable.

string[] months = {"Jan" , "Feb" , "Mar" , "Apr" , "Jun"};
DataTable dt = new DataTable();
dt.Columns.Add("M1");
dt.Columns.Add("M2");
dt.Columns.Add("M3");
dt.Columns.Add("M4");
dt.Columns.Add("M5");
DataRow row = dt.NewRow();

for (int i = 0; i < months.Length; i++)
{
   row[i] = months[i];       
}

dt.Rows.Add(row);

上面的代码完美地工作。但我有一个不同的问题。假设我有一个包含 8 个值的数组。

string[] arr = {"1","2","3","4","5","6","7","8"};

现在我创建了一个新datatable的 4 列。

DataTable dt = new DataTable();

dt.Columns.Add("v1");
dt.Columns.Add("v2");
dt.Columns.Add("v3");
dt.Columns.Add("v4");

DataRow row = dt.NewRow();

现在我想将数组的值添加到列中

arr[0] = v1
arr[1] = v2
arr[2] = v3
arr[3] = v4

arr[4] = v1
arr[5] = v2
arr[6] = v3
arr[7] = v4

更新 1

我有一个函数,我想在其中执行所有这些操作

public string LoadAMIReadings(string startTS, string endTS, string batch, string divCode, string cc_code)
{

    totalRec = 0;
    processedRec = 0;
    this.BATCH = batch;
    this.DIVCODE = divCode;
    this.CCCODE = cc_code;
    this.FROMDATE = startTS;
    this.TODATE = endTS;
    HESservicesDoCommandRequest obj = new HESservicesDoCommandRequest();




DataTable dt = new DataTable();
dt.Columns.Add("Application_No", typeof(string));
dt.Columns.Add("REF_NO", typeof(string));
dt.Columns.Add("METER_SERIAL_NO", typeof(string));
dt.Columns.Add("XMETER_NO", typeof(string));

// here I want to call the modified solution

int rowCount = bill.Length / dt.Columns.Count; // array bill is declared globally with 7780 values in it
for (int rowIndex = 0; rowIndex < rowCount; rowIndex++)
{
    DataRow row = dt.NewRow();
    for (int columnIndex = 0; columnIndex < dt.Columns.Count; columnIndex++)
    {
        // In case of 2 rows:

        // row 1: (0 * 4) + 0 = 0
        // row 1: (0 * 4) + 1 = 1
        // row 1: (0 * 4) + 2 = 2
        // row 1: (0 * 4) + 3 = 3

        // row 2: (1 * 4) + 0 = 4
        // row 2: (1 * 4) + 1 = 5
        // row 2: (1 * 4) + 2 = 6
        // row 2: (1 * 4) + 3 = 7

        row[columnIndex] = bill[(rowIndex * dt.Columns.Count) + columnIndex];
    }

    dt.Rows.Add(row);
}


if (dt != null && dt.Rows.Count > 0)
{
    totalRec = dt.Rows.Count;
    string ReqEnvPath = System.Configuration.ConfigurationManager.AppSettings["ReadEnvPath"].ToString();
    XElement SoapReqEnv = XElement.Load(ReqEnvPath);

    foreach (DataRow dr in dt.Rows)
    {

        string uniqueID = dr["APPLICATION_NO"].ToString();
        string meterNo = dr["METER_SERIAL_NO"].ToString();

        string timestamp = DateTime.UtcNow.ToString("o");
        StringBuilder sbArg0 = new StringBuilder();
        try
        {
            sbArg0.AppendFormat(@"<?xml version=""1.0"" encoding=""UTF-8"" ?>          " + SoapReqEnv.ToString(), uniqueID, startTS, endTS, timestamp, this.HEXURL, this.HEXUID, this.HEXPWD);
            Guid currentGuid = Guid.NewGuid();

            obj.getResponseAsync(sbArg0.ToString(), currentGuid + "$" + uniqueID);
            obj.getResponseCompleted += this.myHandler;
            string delayMS = System.Configuration.ConfigurationManager.AppSettings["DelayMS"].ToString();
            ushort delay = 1000;
            ushort.TryParse(delayMS, out delay);
            System.Threading.Thread.Sleep(delay);


        }
        catch (Exception ex)
        {
            error += "Error for UniqID:" + uniqueID + "Desc:" + ex.Message + "\n";
        }
        finally
        {
            //System.Threading.Thread.CurrentThread.Join();
        }
    }
}

return error;
}

我怎样才能添加它们?

标签: c#arrays

解决方案


我的意思是你可以做这样的事情:

DataRow row = null;
for (int i = 0; i < arr.Length; i++) {
    if (i % 4 == 0)
    {
        row = dt.NewRow();
        dt.Rows.Add(row);
    }
    row[i % 4] = arr[i];
}

编辑:以此为例:

var arr = Enumerable.Range(1, 40).ToArray();

for (int i = 0; i < arr.Length; i++)
{
    if (i % 4 == 0) { Console.WriteLine("new row"); }
    Console.WriteLine($"row[{i % 4}] = arr[{i}];");
}

输出将是:

new row
row[0] = arr[0];
row[1] = arr[1];
row[2] = arr[2];
row[3] = arr[3];
new row
row[0] = arr[4];
row[1] = arr[5];
row[2] = arr[6];
row[3] = arr[7];
new row
row[0] = arr[8];
row[1] = arr[9];
row[2] = arr[10];
row[3] = arr[11];
new row
row[0] = arr[12];
row[1] = arr[13];
row[2] = arr[14];
row[3] = arr[15];
...

哪个是你想要的,对吧?


推荐阅读