- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 printdocument 从数据库中打印数据,我将其打印到指定范围内的数据,但仍有两处出错
仍然没有按预期工作的事情是
这是我必须调用打印文档的代码
private void button3_Click(object sender, EventArgs e)//print
{
range();
try
{
if (artikel == true)
{
itemperpage = totalnumber = 0;
printPreviewDialog1.Document = printDocument1;
print = true;
printDocument1.Print();
// this.Close();
}
}
catch (Exception q) { MessageBox.Show("" + q); }
}
这是打印文档的代码
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
if (artikel == true)
{
Font messageFont = new Font("Arial", 14, System.Drawing.GraphicsUnit.Point);
float currentY = 10;// declare one variable for height measurement
e.Graphics.DrawString(" I N K O O P A R T I K E L E N ", DefaultFont, Brushes.Black, 10, currentY);//this will print one heading/title in every page of the document
currentY += 15;
SqlCommand artprint = new SqlCommand("select * from ART WHERE ART BETWEEN @range AND @range2 ORDER BY ART ASC", Connectie.connMEVO_ART);
if (comboBox1.SelectedIndex <= comboBox2.SelectedIndex)
{
artprint.Parameters.Add("@range", SqlDbType.VarChar).Value = comboBox1.SelectedItem;
artprint.Parameters.Add("@range2", SqlDbType.VarChar).Value = comboBox2.SelectedItem;
}
else if (comboBox2.SelectedIndex <= comboBox1.SelectedIndex)
{
artprint.Parameters.Add("@range", SqlDbType.VarChar).Value = comboBox2.SelectedItem;
artprint.Parameters.Add("@range2", SqlDbType.VarChar).Value = comboBox1.SelectedItem;
}
drART = artprint.ExecuteReader();
try
{
while (totalnumber <= amount - 1 && drART.Read())
{// check the number of items
tostring();//SQL data to string
row = row + Environment.NewLine + "ART LEV LTD MVRD SGR INK CRNI " + " VALUTA KOR ";
row = row + Environment.NewLine + aa + " " + a + " " + b + " " + c + " " + d + " " + m + " " + f + " " + g + " " + h;
row = row + Environment.NewLine + "EH2 EH1 EF OMS ";
row = row + Environment.NewLine + j + " " + k + " " + l + " " + i;
row = row + Environment.NewLine;
e.Graphics.DrawString(row, DefaultFont, Brushes.Black, 50, currentY);//print each item
Debug.WriteLine("" + row);
row = "";
currentY += 80; // set a gap between every item
totalnumber += 1; //increment count by 1
if (itemperpage <= 12)
{
itemperpage += 1; // increment itemperpage by 1
e.HasMorePages = false; // set the HasMorePages property to false , so that no other page will not be added
}
else // if the number of item(per page) is more than 12 then add one page
{
itemperpage = 0; //initiate itemperpage to 0 .
e.HasMorePages = true; //e.HasMorePages raised the PrintPage event once per page .
return;//It will call PrintPage event again
}
}
}
catch (Exception ef)
{
MessageBox.Show("" + ef);
}
artprint.Dispose();
}
}
private void tostring()
{
aa = drART["ART"].ToString();
for (int ss = aa.Length; ss < 8; ss++) { aa = aa + " "; }
a = drART["LEV"].ToString();
for (int ss = a.Length; ss < 10; ss++) { a = a + " "; }
b = drART["LTD"].ToString();
for (int ss = b.Length; ss < 10; ss++) { b = b + " "; }
c = drART["MVRD"].ToString();
for (int ss = c.Length; ss < 10; ss++) { c = c + " "; }
d = drART["SGR"].ToString();
for (int ss = d.Length; ss < 10; ss++) { d = d + " "; }
m = drART["INK"].ToString();
for (int ss = m.Length; ss < 10; ss++) { m = m + " "; }
f = drART["CRNI"].ToString();
for (int ss = f.Length; ss < 10; ss++) { f = f + " "; }
g = drART["VALUTA"].ToString();
for (int ss = g.Length; ss < 3; ss++) { g = g + " "; }
h = drART["KOR"].ToString();
for (int ss = h.Length; ss < 10; ss++) { h = h + " "; }
i = drART["OMS"].ToString();
j = drART["EH2"].ToString();
for (int ss = j.Length; ss < 3; ss++) { j = j + " "; }
k = drART["EH1"].ToString();
for (int ss = k.Length; ss < 3; ss++) { k = k + " "; }
l = drART["EF"].ToString();
for (int ss = l.Length; ss < 10; ss++) { l = l + " "; }
}
最佳答案
您写道您使用了来自网络的资源,我想这表明了这一点。我们都这样做,但对它们的质量持怀疑态度真的很重要。当然,结合两个来源很可能根本行不通。
我将首先讨论您的代码的几个问题,然后向您展示如何在多个页面上打印 DB 中的项目的示例。
请帮自己一个忙,小心选择变量的名称!是的,这需要更长的时间,但它会付出代价,相信我。 (如果你不能想出任何令人信服的东西,退后一步!这通常表明你对问题的理解不够透彻......)
我们来看一些:有currentY
,挺好的。而且还有itemperpage
,totalnumber
和amount
,这都太可怕了!他们要么完全不清楚,要么甚至具有误导性!
让我们设置一些更好的名字:
// layout variables
int itemsPerPage = 40; // how many items fit on one page
int itemHeight = 25; // height of one item in the chosen unit
// print job variables
int totalNumber = -1; // total number of records/items coming from the dbms
int itemsToPrint = 75; // total number of items we want to print
// print progress variables
int itemsPrinted = 0; // number of items printed so far
int pagesPrinted = 0; // number of pages printed
另一个问题是你选择的单位,或者准确地说是没有选择单位。默认 GraphicsUnit
是 Display
打印总计 1/100 英寸。如果你喜欢,我建议用代码编写它来记录它。这个单元将在整个布局过程中使用,所以它应该在代码中可见!我个人更喜欢毫米。还有其他几个单位..选择你的但记录下来!
您应该查看的另一件事是 String.Format()
和 string.PadLeft()
.它们比 tostring()
方法中的循环要好得多!
现在让我们看看您的具体问题:
一旦我们使用了足够多的变量,这些变量的名称无需学习就可以真正理解。
另一个问题是您设置 DB 读取的方式:您需要在开始打印的位置而不是在 PrintPage
循环中设置读取器。注意:这些实际上是两个循环:一个是可见的while (...reader.Read() )
,另一个是隐式:整个 PrintPage
事件本身就是循环体。
首先让我们看一下range()
代码。我已经把它变成了一个返回最大记录数的函数。我第一步获取计数。然后我为真正的读取设置了 DataReader
,这将在 PrintPage
事件中发生:我枚举字段以便我可以控制它们的顺序并且不拉入我不需要的东西。
请注意,我使用的是 MySql
,但类几乎相同,只是带有 MySQl
前缀。我不在此处包括连接代码。当然,我是从我自己的数据库中读取的……
MySqlConnection DBC = new MySqlConnection("");
MySqlCommand CMD = null;
MySqlDataReader DR = null;
int range ()
{
CMD = new MySqlCommand("select count(0) from test.artists ", DBC);
var count = CMD.ExecuteScalar();
int counter = Convert.ToInt32(count);
CMD = new MySqlCommand("select artist_ID, artist, genres from test.artists ", DBC);
DR = CMD.ExecuteReader();
return (int)counter;
}
现在让我们看看打印命令,使用上面的变量:
private void cb_print_Click(object sender, EventArgs e)
{
totalNumber = range();
try
{
if (DBC.State == ConnectionState.Open)
{
pagesPrinted = 0;
printPreviewDlg.Document = printDocument1;
printPreviewDlg.ShowDialog();
}
} catch (Exception q) { MessageBox.Show("" + q); }
DR.Dispose();
}
请注意,Reader
是在 range
调用中创建的!
最后是 PrintPage
事件:
private void printDocument1_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
{
// my page unit
e.Graphics.PageUnit = GraphicsUnit.Millimeter;
// starting a new page
int itemsOnPage = 0;
pagesPrinted++;
float currentY = 12;
e.Graphics.DrawString(String.Format(
"HEADER - printing {0} items of {1} - Page {2}",
itemsToPrint, totalNumber, pagesPrinted),
Font, Brushes.Black, 1, currentY);
currentY += 30; // header height
try
{
// page is not full and we want to print more items
while (itemsOnPage < itemsPerPage && itemsPrinted < itemsToPrint - 1
&& DR.Read())
{
string row = String.Format("{0,5:000} Artist: {1,20} ({2}) ",
DR[0], DR[1], DR[2]);
e.Graphics.DrawString(row, DefaultFont, Brushes.Black, 50, currentY);
// Console.WriteLine("" + row);
currentY += itemHeight;
itemsPrinted++;
itemsOnPage++;
// we want to print more items but now the page is full
if ( itemsPrinted < itemsToPrint && itemsOnPage >= itemsPerPage)
{
itemsOnPage = 0;
e.HasMorePages = true;
return;
}
else
{
// this will only be used after all data are printed
e.HasMorePages = false;
}
}
} catch (Exception ef)
{
MessageBox.Show("" + ef);
}
}
关于c# - printdocument 添加空白页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28624951/
我正在寻找 css 属性以隐藏带或不带 css 类的段落,如果它包含空格 ( ) 或空白,但我想至少保留一个带或不带的段落,如果有更多的话。 隐藏段落,如果它是空白的或包含 white-space(
在 ruby 中对空白有不同的敏感度/设置吗? 我有一个 RoR 项目,其中一个事件记录调用有很多组件: max_stuff = FooSummary.select("max(stuff)
如何在脚注中的数字后留空? 一般来说,对于所有脚注! 例子: 好 : 1 Hello World 坏:1Hello World 最佳答案 正确答案是不要重新定义\thefootnote ,因为这会在脚
我有这段代码,每次第一个 for 循环再次开始时,我希望它将数组重置为空白,因为它正在使用新用户,但我得到的输出包含一个数组中的所有值。 var items = []; for (var i
我试图在CakePHP中生成一个动态xml文档,以输出到浏览器。 这是我的 Controller 代码: Configure::write ('debug', 0); $this->layout =
当我尝试在 nxos 设备上运行某些命令时,输出末尾有一个空格。我必须将输出与现有变量列表进行比较。末尾的空格导致比较错误。如何在字符串列表中使用 .strip() 函数? - name: Curre
我对 Elasticsearch 相当陌生,我一直在尝试对我的数据进行搜索,并且总是让点击部分为空。即使在数据上传和索引之后也会发生这种情况。我的映射如下: { "mappings":{
我想将about:blank页面更改为firefox插件首页页面的url。 如何更改默认的新标签页网址或可以为新标签页提供默认网址? 我正在使用Firefox附加SDK。 最佳答案 您可以结合使用Ta
我正在使用 R 并具有以下数据框示例,其中所有变量都是因子: first second third social birth control high
如何清空显示对话框的页面。下面是我的代码HTML: .ui-dialog, .ui-dialog-content { border:1px solid #cde68c; border-botto
更新“他的问题是要求我只运行一次 str ,他们已经告诉我该函数只需要一个参数)” 我试图返回第一个不重复的字符,例如:“blazqnqbla”->第一个不重复的字符是“z”,因此函数需要返回z。现在
我的登录验证有问题。问题是当我尝试使用管理员登录时,页面停止在 checklogin.php 上并且不会告诉它是否成功。这是我的代码。 索引.html Aplik
我的查询是这样的 SELECT Distinct tm.teamid,tm.Team_Name,CONCAT_WS(' ',tu.FirstName+' '+tu.LastName) as Leade
我正在创建指向页面的超链接 url 由用户输入决定,因此由查询字符串决定 ; 问题是变量状态由两个或多个单词组成。因此,当我尝试单击证明表单中输入的超链接时,仅获取状态变量的第一个单词。浏览器将另一个
该问题在每个浏览器中的表现都不同,例如在 Firefox 中大约一个空格如果您再次滚动到顶部,则会出现具有相同高度的滚动框。在 chrome 中,滚动时框会变得狭窄等等...... 使用的调用是:
我对菜单栏文字之间的 CSS 空白有疑问。我尝试了很多方法,但仍然无法解决。有人可以帮我吗? 菜单问题图片如下: http://imageshack.us/photo/my-images/201/44
我对 有疑问.其中的插入符根据是否为空具有不同的垂直位置: 我的代码: textarea { padding: 0 5px; border: none; outline: n
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Ignore whitespace in HTML 我想在网页上将图片并排放置。这是我的 HTML:
每当我尝试检查元素时,什么都没有出现。我在使用 Chrome。我明白了 Elements | Network | Sources | Timeline | Profiles | Resources |
我在使用 Chrome、Firefox 和 IE 时遇到了一个奇怪的问题。我正在为我的投资组合网站/博客构建一个 WordPress 主题,一切都很好,直到今天,当我在 chrome 中查看该网站时,
我是一名优秀的程序员,十分优秀!