2015-04-03 87 views
-1

我正在做一個Job記者應用程序,直到現在我所做的是,導入CSV文件到網格視圖並通過將其保存在數據表中顯示它,現在我想要的是更新和將記錄保存回csv文件,我沒有使用任何SQL或任何類型的數據庫,是否可以這樣做? 請幫助我,我必須在兩個小時內交付項目。 該項目是C#Win窗體。 也幫我在我如何序列化它上傳到FTP服務器。 代碼在這裏是...... 私人無效openProjectToolStripMenuItem_Click_1(對象發件人,EventArgs的){ CSV到GridView比CRUD操作

 // int size = -1; 
     OpenFileDialog ofd = new OpenFileDialog() 
     { 
      Title = "Choose a File", 
      InitialDirectory = @"c:\dev\", 
      Filter = "Text Files (.txt)|*.txt|XML Files|*.xml|Word Documents (.docx)|*.docx", 
      RestoreDirectory = true, 
      Multiselect = false 
     }; 



     if (ofd.ShowDialog() != System.Windows.Forms.DialogResult.OK) 
     { 
      MessageBox.Show("No file selected!"); 
      return; 
     } 
     using (StreamReader oStreamReader = new StreamReader(ofd.FileName)) 
     { 
      try 
      { 
       Application.DoEvents(); 
       DataSet ds = new DataSet("ApplicationData"); 

       //some updates in the Datatable 
       DataTable JobHeaderDataTable = new DataTable("JobHeaderDataTable"); 
       DataTable JobDate = new DataTable("JobDate"); 
       DataTable JobDateItems = new DataTable("JobDateItems"); 

       ds.Tables.Add(JobHeaderDataTable); 
       ds.Tables.Add(JobDate); 
       ds.Tables.Add(JobDateItems); 

       int rowCount = 0; 

       string[] columnNames = null; 
       string[] oStreamDataValues = null; 

       while (!oStreamReader.EndOfStream) 
       { 
        string oStreamRowData = oStreamReader.ReadLine().Trim(); 
        if (oStreamRowData.Length > 0) 
        { 

         oStreamDataValues = oStreamRowData.Split('-'); 

         if (rowCount == 0 && oStreamDataValues[0].ToString() == "HDR") 

         { 
          rowCount = 1; 
          columnNames = oStreamDataValues; 

          for (int i = 1; i < columnNames.Length; i++) 
          { 
           DataColumn oDataColumn = new DataColumn(columnNames[i].ToUpper(), typeof(string)); 
           oDataColumn.DefaultValue = string.Empty; 
           JobHeaderDataTable.Columns.Add(oDataColumn); 
          } 

          //// For Slider 
          //txtCompany.Text = oStreamDataValues.GetValue(1).ToString(); 
          //txtLocation.Text = oStreamDataValues.GetValue(2).ToString(); 
          //txtRigName.Text = oStreamDataValues.GetValue(3).ToString(); 
          //txtState.Text = oStreamDataValues.GetValue(4).ToString(); 
          //txtCounty.Text = oStreamDataValues.GetValue(5).ToString(); 
          //txtWellName.Text = oStreamDataValues.GetValue(6).ToString(); 
          //txtTownship.Text = oStreamDataValues.GetValue(7).ToString(); 
          //txtDescription.Text = oStreamDataValues.GetValue(8).ToString(); 
          //txtBentHstSub.Text = oStreamDataValues.GetValue(9).ToString(); 
          //txtBilToBend.Text = oStreamDataValues.GetValue(10).ToString(); 
          //txtPadOD.Text = oStreamDataValues.GetValue(11).ToString(); 
          //txtNBStab.Text = oStreamDataValues.GetValue(11).ToString(); 
          //txtJob_ID.Text = oStreamDataValues.GetValue(12).ToString(); 

          //// For Header 

          //txtCompanyHeader.Text = oStreamDataValues.GetValue(1).ToString(); 
          //txtLocationHeader.Text = oStreamDataValues.GetValue(2).ToString(); 
          //txtRigNameHeader.Text = oStreamDataValues.GetValue(3).ToString(); 
          //txtStateHeader.Text = oStreamDataValues.GetValue(4).ToString(); 
          //txtCountyHeader.Text = oStreamDataValues.GetValue(5).ToString(); 
          //txtWellNameHeader.Text = oStreamDataValues.GetValue(6).ToString(); 
          //txtTownshipHeader.Text = oStreamDataValues.GetValue(7).ToString(); 
          //txtDescriptionHeader.Text = oStreamDataValues.GetValue(8).ToString(); 
          //txtBentHstSubHeader.Text = oStreamDataValues.GetValue(9).ToString(); 
          //txtBillToBendHeader.Text = oStreamDataValues.GetValue(10).ToString(); 
          //txtPadODHeader.Text = oStreamDataValues.GetValue(11).ToString(); 
          //txtNBStabHeader.Text = oStreamDataValues.GetValue(11).ToString(); 
          //txtJob_IDHeader.Text = oStreamDataValues.GetValue(12).ToString(); 

         } 


         else 
         { 
          DataRow oDataRow = JobHeaderDataTable.NewRow(); 

          for (int i = 1; i < columnNames.Length; i++) 
          { 
           oDataRow[columnNames[i]] = oStreamDataValues[i] == null ? string.Empty : oStreamDataValues[i].ToString(); 

          } 

          JobHeaderDataTable.Rows.Add(oDataRow); 
         } 
        } 
       } 

       oStreamReader.Close(); 
       oStreamReader.Dispose(); 

       foreach (DataRow dr in JobHeaderDataTable.Rows) 
       { 
        dataGridView2.DataSource = JobHeaderDataTable; 
        dataGridView4.DataSource = JobDate; 
        dataGridView5.DataSource = JobDateItems; 
       } 
      } 
      catch (IOException) 
      { 

      } 

     } 
    } 

回答

0

保存自己的一些頭痛,並檢查了,ClosedXML,並利用這個答案可以Can I save an EXCEL worksheet as CSV via ClosedXML?創建CSV文件。

System.IO.File.WriteAllLines(csvFileName, 
    worksheet.RowsUsed().Select(row => 
     string.Join(";", row.Cells(1, row.LastCellUsed(false).Address.ColumnNumber) 
          .Select(cell => cell.GetValue<string>())) 
));