Вы также должны установить поля для таблицы, вот пример кода, как установить поля с данными и используя 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;
Пожалуйста, посмотрите на эту ссылку для больше информации
Я надеюсь, что это поможет вам ....
это функция 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;
}