Мой PrintListView добавляет мои данные, но не добавляет все это в 1 строку - PullRequest
0 голосов
/ 25 сентября 2019

Я пишу программу, которая включает PrintListView, я получил данные для отображения, однако каждая часть данных находится в отдельной строке.Изображение, помеченное как [1] ​​ниже, содержит мой PrintListView, который показывает данные в каждой отдельной строке, я хочу, чтобы эти данные были только в 1 строке.Я беру DataSet, который затем превращаю в DataTable.Затем я добавляю строки каждого объекта DataTable в список, я проверил это в отладке, и он отображается только с 3 значениями, и это здорово;но они не в одном ряду.Язык программирования: C #.

https://i.stack.imgur.com/XAvEq.png [1]

Если бы вы могли помочь, это было бы удобно.

Большое спасибо.

 public ObjectListView CreateOLVForSingleColumns(DataSet ds)
    {
        var olv = new ObjectListView();
        olv.ShowGroups = false;
        var colHeaders = new List<ColumnHeader>();
        var objectList = new List<DataRow>();

        //Setting the Column Names of the OLV
        var totalOrders = new OLVColumn {AspectName = "Total_Orders", Text = "Total Orders", Width = 250};
        var totalOrderValue = new OLVColumn {AspectName = "Total_Order_Value", Text = "Total Order Value", Width = 250};
        var totalOrdersNotInvoiced = new OLVColumn {AspectName = "Total_Value_Of_Orders_Not_Invoiced", Text = "Total Order Value Not Invoiced", Width = 250};
        colHeaders.AddRange(new ColumnHeader[] {totalOrders, totalOrderValue, totalOrdersNotInvoiced});
        olv.Columns.AddRange(colHeaders.ToArray());


        var dt = ds.Tables["Total Amount of Orders"];
        var dt2 = ds.Tables["Total Value of Orders"];
        var dt3 = ds.Tables["Total Value of Orders Not Invoiced"];

        var dt4 = new DataTable();

        dt4.Merge(dt);
        dt4.Merge(dt2);
        dt4.Merge(dt3);

        for (int i = 1; i <= dt4.Rows.Count; i++)
        {
            var value = dt4.Rows[0];
            var value2 = dt4.Rows[1];
            var value3 = dt4.Rows[2];

            olv.AddObjects(new DataRow[] { value, value2, value3 });

        }

1 Ответ

0 голосов
/ 26 сентября 2019

Я думаю, что ваша проблема с DataTable.Merge, а не с ObjectListView.

Я бы предложил изменить ваш источник данных, чтобы он возвращался в одну таблицу (например, с помощью JOIN, если вы читаете SQL).Тем не менее, вы можете выполнить то, что вы хотите, с помощью чего-то вроде этого:

var dt4 = new DataTable();

//add all the columns
foreach (DataColumn c in 
    dt.Columns.Cast<DataColumn>()
        .Union(dt2.Columns.Cast<DataColumn>())
        .Union(dt3.Columns.Cast<DataColumn>()))
{
    dt4.Columns.Add(c.ColumnName, c.DataType);
}
if(dt.Rows.Count != dt2.Rows.Count|| dt.Rows.Count != dt3.Rows.Count)
    throw new Exception("DataTables had different row counts");

for (int i = 0; i < dt.Rows.Count; i++)
{
    var row = dt4.Rows.Add();

    foreach (DataColumn c in dt.Columns)
        if (dt.Rows[i][c] != DBNull.Value)
            row[c.ColumnName] = dt.Rows[i][c];

    foreach (DataColumn c in dt2.Columns)
        if (dt2.Rows[i][c] != DBNull.Value)
            row[c.ColumnName] = dt2.Rows[i][c];

    foreach (DataColumn c in dt3.Columns)
        if (dt3.Rows[i][c] != DBNull.Value)
            row[c.ColumnName] = dt3.Rows[i][c];
}

Если вы запустите этот код с установочным кодом:

var ds = new DataSet();

var dt = ds.Tables["Total Amount of Orders"] ?? new DataTable();
dt.Columns.Add("A");
dt.Rows.Add("A1");
dt.Rows.Add("A2");

var dt2 = ds.Tables["Total Value of Orders"]?? new DataTable();
dt2.Columns.Add("B");
dt2.Rows.Add("B1");
dt2.Rows.Add("B2");

var dt3 = ds.Tables["Total Value of Orders Not Invoiced"]?? new DataTable();
dt3.Columns.Add("C");
dt3.Rows.Add("C1");
dt3.Rows.Add("C2");

Вы получите

enter image description here

Если вы используете Merge, тогда вы получите

enter image description here

...