Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我的PrintListView会添加我的数据,但不会将其全部添加到一行_C#_Visual Studio_Objectlistview - Fatal编程技术网

C# 我的PrintListView会添加我的数据,但不会将其全部添加到一行

C# 我的PrintListView会添加我的数据,但不会将其全部添加到一行,c#,visual-studio,objectlistview,C#,Visual Studio,Objectlistview,我正在写一个包含PrintListView的程序,我已经得到了要显示的数据,但是数据的每一部分都在不同的行上。下面标记为[1]的图像包含我的PrintListView,它显示每个不同行上的数据,我希望此数据仅位于1行上。我获取一个数据集,然后将其转换为数据表。然后我将每个DataTable的行添加到一个列表中,我在debug中对此进行了检查,它只显示了3个值,这很好;但他们不在同一排。编程语言是C# [1] 如果你能帮忙,那就方便了 非常感谢 public ObjectListView Cre

我正在写一个包含PrintListView的程序,我已经得到了要显示的数据,但是数据的每一部分都在不同的行上。下面标记为[1]的图像包含我的PrintListView,它显示每个不同行上的数据,我希望此数据仅位于1行上。我获取一个数据集,然后将其转换为数据表。然后我将每个DataTable的行添加到一个列表中,我在debug中对此进行了检查,它只显示了3个值,这很好;但他们不在同一排。编程语言是C#

[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 });

        }
public ObjectListView CreateOLVForSingleColumns(数据集ds)
{
var olv=newObjectListView();
olv.ShowGroups=false;
var colHeaders=新列表();
var objectList=新列表();
//设置OLV的列名
var totalOrders=newolvcolumn{AspectName=“Total_Orders”,Text=“Total Orders”,Width=250};
var totalOrderValue=newolvcolumn{AspectName=“Total\u Order\u Value”,Text=“Total Order Value”,Width=250};
var TotalOrdersNotVoiced=新OLV列{AspectName=“未开具发票的订单总值”,Text=“未开具发票的订单总值”,宽度=250};
AddRange(新的ColumnHeader[]{totalOrders,totalOrderValue,TotalOrdersNotVoiced});
olv.Columns.AddRange(colHeaders.ToArray());
var dt=ds.表格[“订单总额”];
var dt2=ds.表格[“订单总值”];
var dt3=ds.表格[“未开具发票的订单总值”];
var dt4=新数据表();
dt4.合并(dt);
dt4.合并(dt2);
dt4.合并(dt3);

对于(int i=1;i我认为您的问题在于
DataTable。Merge
而不是ObjectListView

我建议更改您的数据源,使其全部返回到一个表中(例如,如果您正在阅读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];
}
你得到

如果您使用
Merge
,则


请不要在代码中包含截图,将其发布到问题本身。@CalIrvine我刚刚编辑了这个问题。非常感谢!我一直在尽力找到答案,你也帮了我的忙,我确实怀疑是DataTable。合并,但找不到解决方法!
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");