我的 Print ListView 添加我的数据,但没有将其全部添加到 1 行

My PrintListView adds my Data, but does not add it all onto 1 row

我正在编写一个涉及 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 });

        }

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

我建议更改您的数据源,以便所有数据都返回一个 table(例如,如果您阅读 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");

你得到

如果你使用 Merge 那么你会得到