1

ユーザーがデータベースと対話し、必要なもののレポートを作成するアプリケーションがあります。アイテムの価格はデータベースにリストされています。項目を選択したら、Excel 形式でレポートを生成します。[Generate a Report] ボタンをクリックすると、レポートを保存する場所を尋ねられます。これらはすべて良いです。問題は、レポートを保存して [レポートの生成] ボタンをクリックすると、同じ場所に同じ名前のファイルが存在する場合に、同じファイルを同じ名前で同じ場所に保存できることです。基本的に古いものを交換します。ファイルが存在するかどうかを確認するコードを書きましたが、問題は、ファイルを保存しているときに表示されないことです。前に表示されます。私が望むのは、ファイルを任意の場所に保存しようとすると、その瞬間に「

説明が必要な場合は、コメントしてください。私はほとんどの場合オンラインです。

ここにコードがあります

  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);
        }
    }
4

1 に答える 1

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 プロパティなど。

于 2012-09-12T13:13:33.333 に答える