水晶报表动态改变纸张时,总是出现以下错误“设置打印机发生错误,错误信息为:无效索引。 (异常来自 HRESULT:0x8002000B (DISP_E_BADINDEX))”
代码如下:
              System.Drawing.Printing.PrintDocument pdoc = new System.Drawing.Printing.PrintDocument();
            pdoc.PrinterSettings.PrinterName = comboBoxPrinters.Text.Trim();
            foreach (System.Drawing.Printing.PaperSize size in pdoc.PrinterSettings.PaperSizes)
            {
                if (size.PaperName == listBoxPapers.Text.Trim())
                {
                    rdt.PrintOptions.PaperSize = (CrystalDecisions.Shared.PaperSize)size.RawKind;
                    break;
                }
            }
            rdt.PrintOptions.PrinterName = comboBoxPrinters.Text.Trim();
            crv.ReportSource = rdt;
comboBoxPrinters为ComBoBox控件,用来保存打印机信息
comboBoxPrinters为ComBoBox控件,用来保存打印机纸张信息
第一次是正常显示,以后改变纸张时就出现上面我说的错误。
前一版本程序我也是这么写的,没出现这问题,不知道现在怎么突然出现这问题?
环境:vs2005,水晶报表版本为10.2.3600.0
期待回复

解决方案 »

  1.   

    rdt.PrintOptions.PaperSize = (CrystalDecisions.Shared.PaperSize)size.RawKind; 
    这一句就报错了
      

  2.   

    检查一下RawKind 值PaperSize 枚举成员的整数值。等于 48 或 49 或者大于 118 的值表示自定义纸张大小;但是,RawKind 属性将返回该大小的实际整数值。
      

  3.   

    是这样加载的吗?  for (int i=0;i<PrinterSettings.InstalledPrinters.Count;i++)
    {
      cmbPrint.Items.Add(PrinterSettings.InstalledPrinters[i].ToString());
    }
      

  4.   

     for (int i=0;i<PrinterSettings.InstalledPrinters.Count;i++)
    {
      cmbPrint.Items.Add(PrinterSettings.InstalledPrinters[i].ToString());
    }
    是这样取打印机的,我怀疑是系统DCOM配置有问题,因为以前也是这么做的,都没这问题
      

  5.   

    樓主,我也有有關Crystal Report打印問題,就是我想打印由用戶指定的DataGridView中的某一行,結果系統會打印DataGridView中所有記錄,請問,若只打印用戶選擇的某行記錄怎么寫,謝謝。