none
[VB2008]DataGridView內容儲存成txt檔 RRS feed

  • 問題

  • 今天在寫VB程式時

    針對DataGridView的資料內容寫回資料庫

    突然想到

    如果我不連結到資料庫

    而是直接將DataGridView所顯示的資料

    直接儲存成txt檔

    並在每個欄位之間加入"," or ";"來區隔

    不知是否可行呢??

    2009年1月3日 上午 11:36

解答

  • ...

    線上手冊就有很多範例,例如:

    ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.cht/dv_fxfund/html/060cbe06-2adf-4337-9e7b-961a5c840208.htm

    HOW TO:將文字寫入檔案

     

    2009年1月6日 下午 05:08
  • 這兩行的意義是一樣的,只是用的變數名不同,你也可以都用 column ,只是 column 是類別名稱,我慣例不用類別名稱當變數名:

                    For Each colObject In table.Columns

     

                            For Each column In table.Columns

     

    而你要做欄名是拿來並排,並非是拿來巢狀:

                    For Each colObject In table.Columns

                    ... FileSave.Write(colObject.Caption & ";")

                    Next

                    FileSave.WriteLine()

     

                     For Each row In table.Rows
                         For Each column In table.Columns

                             FileSave.Write(row(column).ToString() & ";")

                         Next column

                         FileSave.WriteLine()

                     Next row

    2009年1月7日 上午 09:09

所有回覆

  • HI,

     

    如果DataGridView控制項顯示的記錄來自DataSet, 可以利用DataSet類別的WriteXml方法將記錄寫成XML格式的純文字文件:

    http://msdn.microsoft.com/zh-tw/library/system.data.dataset.writexml(VS.80).aspx

     

    tihs

     

    2009年1月3日 下午 01:31
  • 不是很懂

    小弟的程式中

    DataGridView的DataSource是Excel file

    在讀入後顯示於DataGridView中

    並做完欄位順序調整後

    再寫入另外一個Excel file

     

    但如果是寫入txt file

    而為了區分每個欄位

    所以在欄位之間加入"," or ";"

    tihs大大提供的資訊

    小弟看了很久

    也嘗試寫進去程式碼中

    但...就是不會產生想要的結果...

    還請大大指導

    謝謝!!

    2009年1月3日 下午 03:08
  • HI,

     

    我的意思是您將EXCEL FILE當做DataGridView控制項的DataSource, 中間如果有先讀到DataSet, 再顯示到DataGridView控制項, 就可以利用DataSet的WriteXml方法來進行存檔的工作

     

    tihs

    2009年1月4日 上午 02:07
  • 先謝謝tihs大大的指導

    小弟目前已經把資料寫成txt檔了

    但美中不足的是...

    寫出來的狀況並非我想要的

    我想要寫出來的狀況是:

     

    編號;名稱;內容

    1;A;asf

    2;B;afddsff

    3;C;fghstrew

    4;D;bvcxghyj

    5;E;ljh,mn,

    6;F;iuyowtr546

     

    但目前寫出來的txt檔案內容為:

     

    <?xml version="1.0" standalone="yes"?>
    <NewDataSet>
      <Table>
        <編號>1</編號>
        <名稱>A</名稱>
        <內容>asf</內容>
      </Table>
      <Table>
        <編號>2</編號>
        <名稱>B</名稱>
        <內容>afddsff</內容>
      </Table>
      <Table>
        <編號>3</編號>
        <名稱>C</名稱>
        <內容>fghstrew</內容>
      </Table>
      <Table>
        <編號>4</編號>
        <名稱>D</名稱>
        <內容>bvcxghyj</內容>
      </Table>
      <Table>
        <編號>5</編號>
        <名稱>E</名稱>
        <內容>ljh,mn,</內容>
      </Table>
      <Table>
        <編號>6</編號>
        <名稱>F</名稱>
        <內容>iuyowtr546</內容>
      </Table>
    </NewDataSet>

     

    這要怎麼調整呢??

    2009年1月4日 上午 11:44
  • 還是寫不出來

    目前code如下:

            Dim table As DataTable
            Dim row As DataRow
            Dim column As DataColumn

            For Each table In mydataset.Tables
                For Each row In table.Rows
                    For Each column In table.Columns

                        Console.Write(ControlChars.Quote & " " & row(column).ToString())

                    Next column

                    Console.WriteLine()

                Next row

            Next table


            Dim Filename As String = SaveFileInfo.Text
            Dim streamWrite As New System.IO.FileStream(Filename, System.IO.FileMode.OpenOrCreate)

            mydataset.WriteXml(streamWrite)

    目前儲存出來的tx檔案一樣是Xml格式

    不知DataSet有沒有方法能夠直接改成txt格式而不要儲存成Xml格式

    2009年1月6日 上午 09:03
  • WriteXml 本來就是輸出成 xml

     

    你把你 Console 輸出的東西改輸出到檔案就可以了。

     

    2009年1月6日 下午 02:54
  • 我現在改寫成以下狀況:

     

            Dim table As DataTable
            Dim row As DataRow
            Dim column As DataColumn
            Dim Filename As String = SaveFileInfo.Text
            Dim file_no As Integer = FreeFile()

     

            FileOpen(file_no, Filename, OpenMode.Input)

     

            For Each table In mydataset.Tables
                For Each row In table.Rows
                    For Each column In table.Columns

                        Console.Write(ControlChars.Quote & " " & row(column).ToString())

                    Next column

                    Console.WriteLine()

                Next row

            Next table

     

            Sub_Form.Dispose()
            FileClose(file_no)

     

    但是卻不會寫入(不知該在哪邊加入"寫入"的function code)

    能否請大大指導一下

    謝謝!!

    2009年1月6日 下午 03:37
  • ...

    線上手冊就有很多範例,例如:

    ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.cht/dv_fxfund/html/060cbe06-2adf-4337-9e7b-961a5c840208.htm

    HOW TO:將文字寫入檔案

     

    2009年1月6日 下午 05:08
  • 首先謝謝心冷熱情熄大大的指導

    目前可以將資料寫入txt檔了

    不過...欄位名稱並沒有一起寫入

    所以...還需要努力中...

    2009年1月7日 上午 03:41
  •             For Each row In table.Rows

    前面加

    For Each colObject In Table.Columns

    的迴圈來處理。

    colObject.Caption 為欄名。

     

    我個人比較喜歡用

    For i = 0 To Table.Columns.Count - 1

    來處理

    因為 For Each 的迴圈並沒有定序輸出,所以不見得會依序輸出。

    2009年1月7日 上午 06:19
  • 心冷熱情熄大大...

    如果依您給的意見去改寫

    Code如下:

            Dim table As DataTable
            Dim row As DataRow
            Dim column As DataColumn
            Dim Filename As String = SaveFileInfo.Text
            Using FileSave As StreamWriter = File.CreateText(SaveFileInfo.Text)

                For Each table In mydataset.Tables

                    For Each colObject In table.Columns

                        For Each row In table.Rows
                            For Each column In table.Columns

                                FileSave.Write(row(column).ToString() & ";")

                            Next column

                            FileSave.WriteLine()

                        Next row
                    Next colObject

                Next table

            End Using

            Sub_Form.Dispose()

     

    執行出的結果是:

    把原本DataGridView的內容寫了三次

    並沒有出現欄位名稱

    我再嘗試調整看看...

    2009年1月7日 上午 06:37
  • 這兩行的意義是一樣的,只是用的變數名不同,你也可以都用 column ,只是 column 是類別名稱,我慣例不用類別名稱當變數名:

                    For Each colObject In table.Columns

     

                            For Each column In table.Columns

     

    而你要做欄名是拿來並排,並非是拿來巢狀:

                    For Each colObject In table.Columns

                    ... FileSave.Write(colObject.Caption & ";")

                    Next

                    FileSave.WriteLine()

     

                     For Each row In table.Rows
                         For Each column In table.Columns

                             FileSave.Write(row(column).ToString() & ";")

                         Next column

                         FileSave.WriteLine()

                     Next row

    2009年1月7日 上午 09:09
  • 謝謝心冷熱情熄大大的指導

    我再試試看

    謝謝!!

    2009年1月7日 上午 09:15
  • 真的可以耶

    感謝心冷熱情熄大大的指導

    現在要處理寫成txt檔的編碼方式

    目前寫出來的是UTF-8

    想要轉換成Unicode...

    繼續思考...

    2009年1月7日 下午 04:45
  • 風箏惡魔

    我想請問你Code裡面  mydataset.Tables  這部份是什麼以及 Sub_Form.Dispose() 是做什麼用的?


    DataGridView的內容是改成什麼變數名

      
    2009年12月11日 上午 06:27