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