2012-09-12 81 views
1

我有一個應用程序,用戶在該應用程序中與數據庫進行交互並準備他需要的報告。物料價格在數據庫中列出。一旦他選擇了這些項目,他就會以Excel格式生成報告。當他打生成報告按鈕,他問哪裏保存報表。這些都很好。問題是,當他保存報告和打生成報告按鈕,他能夠在相同的位置具有相同名稱保存在同一文件時,同名的文件存在於該位置。它基本上取代了舊的。我寫了一個代碼來檢查文件是否存在以及它的工作原理,但問題是,當你保存文件時,它不會在瞬間出現。它出現之前。我要的是,當我嘗試將文件保存在任何位置,它讓我在那一瞬間說:「該文件存在,並且你想用它來取代它」,更像是Windows對話框當您嘗試保存Word文檔轉換成一個文件具有相同名稱的位置。顯示在該位置已存在的文件的對話框

如果有人需要任何澄清請評論,我在大多數時間在線。

這裏是你沒有提供任何代碼,所以我在想代碼

private void btnRunReport_Click(object sender, EventArgs e) 
    { 
     if (cmbReportsList.SelectedIndex != -1) 
     { 
      _qry = new QueryMgt(); 
      OpenProjectDb(); 

      string _sProjectName = (dbManager.ExecuteScalar(CommandType.Text, _qry.GetProjectFileName())).ToString(); 
      CloseProjectDb(); 
      if (cmbReportsList.SelectedIndex == 0) 
      { 


       SaveFile.Filter = "excel 2007 (*.xlsx)|*.xlsx";     
       SaveFile.DefaultExt = "xlsx"; 
       SaveFile.FileName = _sProjectName + " Report1"; 
       strFilepath = System.IO.Path.GetFullPath(SaveFile.FileName); 



        if (SaveFile.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
        { 

         this.Text = System.IO.Path.GetFileName(SaveFile.FileName); 
         strFilepath = System.IO.Path.GetFullPath(SaveFile.FileName); 
         if (strFilepath.Length > 218) { strFilepath = StringMgt.Left(strFilepath, 218); } 

         btnRunReport.Visible = false; 
         bg1804Rpt.RunWorkerAsync(); 
         Application.DoEvents(); 
        } 




      } 
      else if (cmbReportsList.SelectedIndex == 1) 
      { 
       SaveFile.FileName = _sProjectName + " Report2"; 
       SaveFile.Filter = "excel 2007 (*.xlsx)|*.xlsx"; 
       SaveFile.DefaultExt = "xlsx"; 

       if (SaveFile.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
       { 
        //SaveFile.FileName = "Report2"; 
        this.Text = System.IO.Path.GetFileName(SaveFile.FileName); 
        strFilepath = System.IO.Path.GetFullPath(SaveFile.FileName); 
        if (strFilepath.Length > 218) { strFilepath = StringMgt.Left(strFilepath, 218); } 

        btnRunReport.Visible = false; 
        bgMCRpt.RunWorkerAsync(); 
        Application.DoEvents(); 
       } 
      } 
      else if (cmbReportsList.SelectedIndex == 2) 
      { 
       _qry = new QueryMgt(); 
       _formula = new FormulaMgt(); 
       string sSQL; 
       string chrCountryName = ""; 

       OpenProjectDb(); 
       OpenTableDb(); 

       DataSet dsProjectSpec; 
       DataSet dsCountry; 

       sSQL = _qry.GetProjectSpec().ToString(); 
       dsProjectSpec = dbManager.ExecuteDataSet(CommandType.Text, sSQL); 

       sSQL = _qry.GetCountry().ToString(); 
       dsCountry = dbManagerTable.ExecuteDataSet(CommandType.Text, sSQL); 

       foreach (DataRow row in dsCountry.Tables[0].Select("pk_lngCountryID ='" + dsProjectSpec.Tables[0].Rows[0]["lngCountryId"] + "'")) 
       { 
        chrCountryName = row["chrCountryName"].ToString(); 
        break; 
       } 
       SaveFile.FileName = _sProjectName + " Report3"; 

       SaveFile.Filter = "excel 2007 (*.xlsx)|*.xlsx"; 
       SaveFile.DefaultExt = "xlsx"; 
       // SaveFile.Filter = "Microsoft Office Excel Worksheet (*.xlsx)|*.xls|All files (*.*)|*.*"; 
       if (SaveFile.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
       { 
        //SaveFile.FileName = "Report3"; 
        this.Text = System.IO.Path.GetFileName(SaveFile.FileName); 
        strFilepath = System.IO.Path.GetFullPath(SaveFile.FileName); 
        if (strFilepath.Length > 218) { strFilepath = StringMgt.Left(strFilepath, 218); } 

        btnRunReport.Visible = false; 
        bgMDRpt.RunWorkerAsync(); 
        Application.DoEvents(); 
       } 
      } 
     } 
     else if (cmbReportsList.SelectedIndex == -1) 
     { 
      MessageBox.Show("Please select any report", "Info", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
     } 
    } 
+0

打電話給你的代碼,檢查文件是否存在** **之前,你居然保存並提示用戶進行確認。 – James

+0

請出示一些代碼 –

回答

4

但是你使用SaveFileDialog?如果不是,我強烈建議。它提供了這種功能。

SaveFileDialog sfd = new SaveFileDialog(); 
sfd.OverwritePrompt = true; 
if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
{ 
    // Do Something 
    // Access the filename they choose via: ofd.FileName 
} 

如果用戶選擇一個存在的文件,他們會被問到他們是否確定他們想覆蓋它。

SaveFileDialog也有幾個屬性,你可以定義。如用於定義可接受的文件擴展名的Filter屬性。

+0

我已經加入上述 –

+1

的代碼是什麼SaveFile.OverwritePrompt的價值?它應該設置爲true。這是會導致你正在尋找的行爲的財產。過分的我不能完全理解你在找什麼。 –

+0

感謝邁克爾!它的工作 –

相關問題