我的 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
那么你会得到
我正在编写一个涉及 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
那么你会得到