0

以下のコードを使用してデータベースからファイルを取得し、ドロップダウンリストに入力されたインストール済みプリンターから選択したプリンターで印刷しています。私の問題は、Printjob.Start()の使用中に例外がスローされ、指定されたファイルが見つかりません。

私のコードは、

protected void ggvqpdetail_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName.ToUpper().ToString() == "PRINTREC")
    {
        try
        {
            // Set the printer to a printer in the dropdown box when the selection changes. 
            PrintDocument printDoc = new PrintDocument();
            string a = TextBox1.Text + TextBox2.Text + TextBox3.Text;
            DataSet ds = ExamManagement.SP.Eval_QP_PrintSelect(a).GetDataSet();
            if (ddlprint.SelectedIndex != -1 && ds.Tables[0].Rows.Count > 0)
            {
                // The dropdown box's Text property returns the selected item's text, which is the printer name.
                printDoc.PrinterSettings.PrinterName = ddlprint.Text;

                Process printJob = new Process();
                printJob.StartInfo.FileName = ds.Tables[0].Rows[0]["Data"].ToString();
                printJob.StartInfo.UseShellExecute = true;
                printJob.StartInfo.Verb = "printto";
                printJob.StartInfo.CreateNoWindow = true;
                printJob.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                printJob.StartInfo.Arguments = ddlprint.Text;
                printJob.StartInfo.WorkingDirectory = Path.GetDirectoryName(ds.Tables[0].Rows[0]["Data"].ToString());
                printJob.Start();
            }
        }
        catch(Exception ex)
        {
            Lblmsg.Visible = true;
            Lblmsg.Text = ex.Message;
        }
    }
}
4

1 に答える 1

2

明らかに問題は、実際にその中に配置することに依存しますprintJob.StartInfo.FileName。値はデータベースから取得されるため、それを調査できるのはあなただけです。あなたが持っているファイル名を見て、存在するファイルであり、印刷しようとしているローカルクライアントds.Tables[0].Rows[0]["Data"]にアクセスできることを確認してください。もちろん、それは、ファイル名をデータベースに保存し、その名前が各クライアントの有効なローカル ファイルであることを期待しているように見えるソリューションの弱点も明らかにします。真実である可能性は非常に低いです。

于 2013-05-28T09:37:00.070 に答える