2012-09-12 5 views
1

사용자가 데이터베이스와 상호 작용하고 필요한 보고서를 작성하는 응용 프로그램이 있습니다. 품목 가격은 데이터베이스에 나열됩니다. 일단 항목을 선택하면 Excel 형식으로 보고서를 생성합니다. 보고서 생성 버튼을 클릭하면 보고서를 저장할 위치를 묻습니다. 이것들은 모두 좋다. 문제는 보고서를 저장하고 보고서 생성 버튼을 누를 때 같은 이름의 파일이 해당 위치에있을 때 동일한 위치에 같은 이름의 동일한 파일을 저장할 수 있다는 것입니다. 그것은 기본적으로 이전 것을 대체합니다. 파일이 있는지를 확인하는 코드를 작성했는데 작동하지만 문제는 파일을 저장할 때 순간에 나타나지 않는다는 것입니다. 전에 나타납니다. 내가 원하는 것은 파일을 어느 위치에 저장하려고 할 때입니다. 즉, "파일이 있고 그 파일로 바꾸시겠습니까?"라는 인스턴트 메시지가 나타납니다. 단어를 저장할 때 Windows 대화 상자와 비슷합니다. 같은 이름의 문서가있는 위치.이미 존재하는 파일의 대화 상자 표시 위치

누군가 설명이 필요하면 의견을 말하십시오, 나는 대부분 온라인 상태입니다.

여기에 당신은 너무 궁금 왼쪽하고 코드를 제공하지 않은 코드

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

Thanks Michael !! 그것은 작동했습니다 –