我的PrintListView添加了我的数据,但未将其全部添加到1行中

问题描述 投票:-2回答:1

我正在编写一个包含PrintListView的程序,我已经获得了要显示的数据,但是数据的每个部分都在不同的行上。下面标记为[1]的图像包含我的PrintListView,它在每个不同的行上显示数据,我希望此数据仅在1行上。我正在使用一个数据集,然后将其变成一个数据表。然后,我将每个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 });

        }
c# visual-studio objectlistview
1个回答
0
投票

我认为您的问题是DataTable.Merge而不是ObjectListView。

我建议更改您的数据源,以使所有数据源都返回到一个表中(例如,如果您读取的是SQL,则使用JOIN)。也就是说,您可以通过以下方式完成您想要的事情:

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

© www.soinside.com 2019 - 2024. All rights reserved.