我有一个带有PrintPreviewDialog和TabularReport的表单。 我也有一个DataGridView。
我从DataBase中填充DataView对象。现在没关系,但是它有效。 当我在DataGridView上使用DataView时,我可以看到正确的行和颜色。我使用这段代码:
DataView v = new DataView(dTable);
bindingSource1.DataSource = dTable;
grid.DataSource = bindingSource1;
但是当我在TabularReport上使用相同的DataView然后尝试在我的PrintPreviewDialog中看到它时,我得到一个空页面(除了标题)。我使用此代码:
TabularReport1.DataView = v; // here v is the same DataView from the previous code block above
printPreview1.Document = TabularReport1;
//here of course i also set a button to load printPreview1.ShowDialog()
有谁知道为什么我会得到一个空白页面? 谢谢!
答案 0 :(得分:0)
您还必须设置表的边距,这里是一个示例代码,如何使用数据设置边距并使用dataview
DataView m_DataView;
e.HasMorePages = false;
for (rowCounter = currentRow; (rowCounter <= (this.DataView.Count - 1)); rowCounter++)
{
float currentRowHeight = PrintDetailRow(leftMargin, currentPosition, this.MinDetailRowHeight, this.MaxDetailRowHeight, width, e, this.DataView(rowCounter), true);
if ((currentPosition + (currentRowHeight < footerBounds.Y)))
{
// it will fit on the page
currentPosition = (currentPosition + PrintDetailRow(leftMargin, currentPosition, MinDetailRowHeight, MaxDetailRowHeight, width, e, this.DataView(rowCounter), false));
}
else
{
e.HasMorePages = true;
currentRow = rowCounter;
break;
}
}
public DataView DataView {
get {
return m_DataView;
}
set {
m_DataView = value;
}
}
protected object GetField(DataRowView row, string fieldName) {
object obj = null;
if (!(m_DataView == null)) {
obj = row(fieldName);
}
return obj;
}
// relevant snippet out of OnPrintPage
private int rowCounter;
请看一下more info
的链接我希望它会帮助你......
这是printdetailrow函数......
protected virtual float PrintDetailRow(float x, float y, float minHeight, float maxHeight, float width, PrintPageEventArgs e, DataRowView row, bool sizeOnly)
{
Graphics g = e.Graphics;
string detailText;
RectangleF detailTextLayout = new RectangleF(x, y, width, maxHeight);
float detailHeight;
Font detailRowFont;
StringFormat detailStringFormat = new StringFormat(StringFormatFlags.LineLimit);
detailStringFormat.Trimming = StringTrimming.EllipsisCharacter;
ColumnInformation ci;
int cols;
for (cols = 0; (cols
<= (this.ColumnCount - 1)); cols++)
{
// use the provided functions,
// instead of going after the internal ArrayList
// and the CType() work is taken care of for you.
ci = this.GetColumn(cols);
// if a font is not specified, use the DetailFont property of the report class
if ((ci.DetailFont == null))
{
detailRowFont = this.DetailFont;
}
else
{
detailRowFont = ci.DetailFont;
}
detailText = ci.GetString(this.GetField(row, ci.Field));
detailStringFormat.Alignment = ci.Alignment;
detailTextLayout.Width = ci.Width;
if (((detailTextLayout.X - x)
>= width))
{
// none of it will fit onto the page
break;
}
else if (((detailTextLayout.X
+ (detailTextLayout.Width - x))
> width))
{
// some of it won't fit onto the page
detailTextLayout.Width = (width
- (detailTextLayout.X - x));
}
detailHeight = Math.Max(g.MeasureString(detailText, detailRowFont, detailTextLayout.Size, detailStringFormat, 0, 0).Height, detailHeight);
// hmm... no space between columns?
// This code lines the columns up flush,
// but if you wished to add a space between
// them you would need to add it to X here,
// in the check above to determine if the column
// will fit, and in the corresponding parts
// of the next For loop.
detailTextLayout.X = (detailTextLayout.X + detailTextLayout.Width);
}
detailTextLayout.X = x;
detailTextLayout.Height = Math.Max(Math.Min(detailHeight, maxHeight), minHeight);
if (!sizeOnly) {
for (cols = 0; (cols
<= (this.ColumnCount - 1)); cols++) {
ci = this.GetColumn(cols);
if ((ci.DetailFont == null)) {
detailRowFont = this.DetailFont;
}
else {
detailRowFont = ci.DetailFont;
}
detailText = ci.GetString(this.GetField(row, ci.Field));
detailStringFormat.Alignment = ci.Alignment;
detailTextLayout.Width = ci.Width;
if (((detailTextLayout.X - x)
>= width)) {
// none of it will fit onto the page
break;
}
else if (((detailTextLayout.X
+ (detailTextLayout.Width - x))
> width)) {
// some of it won't fit onto the page
detailTextLayout.Width = (width
- (detailTextLayout.X - x));
}
g.DrawString(detailText, detailRowFont, DetailBrush, detailTextLayout, detailStringFormat);
detailTextLayout.X = (detailTextLayout.X + detailTextLayout.Width);
}
detailTextLayout.X = x;
detailTextLayout.Y = y;
detailTextLayout.Height = detailHeight;
detailTextLayout.Width = width;
}
return detailTextLayout.Height;
}