作者 主題: 求助 [VB2008] DataGridView內容儲存成txt檔  (閱讀 10476 次)

0 會員 與 1 訪客 正在閱讀本文。

randyxyz

  • 可愛的小學生
  • *
  • 文章數: 7
    • 檢視個人資料
請問各位前輩:
我使用VB2008中LINQ技術,查詢了SQL資料庫中的資料後,將查詢結果放入DataGridView中,
但是我想將DataGridView內容儲存成txt檔
程式碼如下:

If SaveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
            Dim fileName As String = SaveFileDialog1.FileName
            Dim fileNum As Integer = FreeFile()
            FileOpen(fileNum, fileName, OpenMode.Output)
            Write(fileNum, DataGridView1.DataSource)
            FileClose(fileNum)
            Me.Text = fileName & "-記事本"
        End If

但是在Write(fileNum, DataGridView1.DataSource這行他會出錯說無效的程序呼叫或引數

但是這行裡面將 DataGridView1.DataSource 用 Textbox.text 就可以將資料存出來

洋蔥叔叔

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 830
    • 檢視個人資料
    • 洋蔥叔叔的隨意漫談電腦、網路、.NET、軟體本地化、雜七雜八
回覆: 求助 [VB2008] DataGridView內容儲存成txt檔
« 回覆 #1 於: 2009-12-12 21:14 »
用 Write 的時候要自行將 DataGridView1.DataSource 轉成 String。

randyxyz

  • 可愛的小學生
  • *
  • 文章數: 7
    • 檢視個人資料
回覆: 求助 [VB2008] DataGridView內容儲存成txt檔
« 回覆 #2 於: 2009-12-13 10:51 »
Dear 洋蔥叔叔
你所說的用 Write 的時候要自行將 DataGridView1.DataSource 轉成 String,我不是很清楚要怎麼處理可以請你教我嗎?

我在Write(fileNum, DataGridView1.DataSource.ToString)這行加入ToString
但是存出來的東西並不是查詢得到的資料,存出來的東西變成事傳送SQL查詢的語法。

我是初學者邊看書邊學,很多東西都不很懂,麻煩各位前輩多多指教。

                                                                                          感謝你的回覆

洋蔥叔叔

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 830
    • 檢視個人資料
    • 洋蔥叔叔的隨意漫談電腦、網路、.NET、軟體本地化、雜七雜八
回覆: 求助 [VB2008] DataGridView內容儲存成txt檔
« 回覆 #3 於: 2009-12-15 13:23 »
至少有兩個做法,一是直接把資料庫抓出來的結果寫到檔案,二是把 DataGridView 裏面的資料寫到檔案。
你用 LINQ to SQL 的話需要知道你上面 query 是怎麼建立的,要不然因為它是強式型別,無法直接寫所有欄位轉成字串的程式碼。
直接抓 DataGridView 的話可以參考下面:

代碼: [選擇]
If SaveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
            Dim fileName As String = SaveFileDialog1.FileName
            Dim fileNum As Integer = FreeFile()
            FileOpen(fileNum, fileName, OpenMode.Output)

            Write(fileNum, DgToText(DataGridView1))

            FileClose(fileNum)
            Me.Text = fileName & "-記事本"
        End If

   Private Function DgToText(ByVal dg As DataGridView) As String
        Dim sb As New System.Text.StringBuilder()
        For Each row As DataGridViewRow In dg.Rows
            If Not row.IsNewRow Then
                For Each cell As DataGridViewCell In row.Cells
                    If cell.Value IsNot Nothing Then
                        sb.Append(cell.Value.ToString())
                    End If
                    If cell IsNot row.Cells(row.Cells.Count - 1) Then
                        sb.Append(vbTab)
                    End If
                Next
                sb.AppendLine()
            End If 
        Next
        Return sb.ToString()
    End Function

randyxyz

  • 可愛的小學生
  • *
  • 文章數: 7
    • 檢視個人資料
回覆: 求助 [VB2008] DataGridView內容儲存成txt檔
« 回覆 #4 於: 2009-12-21 20:12 »
Dear 洋蔥叔叔:
我使用您所寫的程式碼後已經可以順利的將資料存成txt檔了,但是資料的欄位名稱並沒有跟著出現,想請教也利用類似For Each的方法寫嗎? 正在努力的嘗試,感謝您的指導

洋蔥叔叔

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 830
    • 檢視個人資料
    • 洋蔥叔叔的隨意漫談電腦、網路、.NET、軟體本地化、雜七雜八
回覆: 求助 [VB2008] DataGridView內容儲存成txt檔
« 回覆 #5 於: 2009-12-22 15:46 »
DataGridView 有個屬性叫 Columns,你可以用那個抓。

randyxyz

  • 可愛的小學生
  • *
  • 文章數: 7
    • 檢視個人資料
回覆: 求助 [VB2008] DataGridView內容儲存成txt檔
« 回覆 #6 於: 2009-12-28 14:36 »
Dear 洋蔥叔叔:
不好意思,我還是試不出來你可以跟我說一下怎麼寫嗎?
                                                       感謝您的指導

洋蔥叔叔

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 830
    • 檢視個人資料
    • 洋蔥叔叔的隨意漫談電腦、網路、.NET、軟體本地化、雜七雜八
回覆: 求助 [VB2008] DataGridView內容儲存成txt檔
« 回覆 #7 於: 2009-12-28 15:54 »
代碼: [選擇]
        ' Column headers
        For Each col As DataGridViewColumn In dg.Columns
            sb.Append(col.HeaderText)
            If col IsNot dg.Columns(dg.Columns.Count - 1) Then
                sb.Append(vbTab)
            End If
            sb.AppendLine()
        Next

randyxyz

  • 可愛的小學生
  • *
  • 文章數: 7
    • 檢視個人資料
回覆: 求助 [VB2008] DataGridView內容儲存成txt檔
« 回覆 #8 於: 2009-12-29 11:04 »
Dear 洋蔥叔叔:
  我測試了一下抓取欄位名稱的程式碼,然後把它插入之前的程式碼,它存成txt檔案時會寫成
<欄位1>   123      222
<欄位2>   456      333
<欄位3>   789      444

但想要寫出來的狀況是:
 <欄位1>    <欄位2>    <欄位3>
  123            456          789
  222            333          444

想請問要怎麼把程式碼插入 修改
                                                                       感謝您的指導與幫助

洋蔥叔叔

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 830
    • 檢視個人資料
    • 洋蔥叔叔的隨意漫談電腦、網路、.NET、軟體本地化、雜七雜八
回覆: 求助 [VB2008] DataGridView內容儲存成txt檔
« 回覆 #9 於: 2009-12-29 11:07 »
你加在那裡?  
代碼: [選擇]
Private Function DgToText(ByVal dg As DataGridView) As String
        Dim sb As New System.Text.StringBuilder()

        ' Column headers
        For Each col As DataGridViewColumn In dg.Columns
            sb.Append(col.HeaderText)
            If col IsNot dg.Columns(dg.Columns.Count - 1) Then
                sb.Append(vbTab)
            End If 
        Next
     sb.AppendLine()

        For Each row As DataGridViewRow In dg.Rows
            If Not row.IsNewRow Then
                For Each cell As DataGridViewCell In row.Cells
                    If cell.Value IsNot Nothing Then
                        sb.Append(cell.Value.ToString())
                    End If
                    If cell IsNot row.Cells(row.Cells.Count - 1) Then
                        sb.Append(vbTab)
                    End If
                Next
                sb.AppendLine()
            End If  
        Next
        Return sb.ToString()
    End Function
抄別人程式碼的時候,最好搞懂它在做什麽,要不然弄出來交差了還是不懂得話,其實沒啥意義,下次要改也不會改。
« 上次編輯: 2009-12-29 22:42 由 洋蔥叔叔 »

randyxyz

  • 可愛的小學生
  • *
  • 文章數: 7
    • 檢視個人資料
回覆: 求助 [VB2008] DataGridView內容儲存成txt檔
« 回覆 #10 於: 2010-01-04 16:21 »
Dear 洋蔥叔叔:
      謝謝你的指導,我會好好的把程式的內容好好的搞清楚。