none
讀取檔案到datagridview疑問 RRS feed

  • 問題

  • 若干疑問,尋求建議

    這是文字檔中的內容.....

    槽位

    參考

    時間

    料號

    批號

    數量

    面積

    設定

    溫度

    1#槽

    2#槽

    3#槽

    4#槽

    5#槽

    6#槽

    7#槽

    8#槽

    9#槽

    10#槽

    將以上的內容讀取並變成datagridview ~

     槽位   參考  時間   料號  批號  數量  面積   設定  溫度       (上方欄位名稱)

    1#槽    ( 左方欄位名稱)

    2#槽

    3#槽

    4#槽

    5#槽

    6#槽

    7#槽

    8#槽

    9#槽

    10#槽

                ArrayList ar = new ArrayList();
                DataTable dt = new DataTable("BoradDT");
                DataColumn dc = new DataColumn();
               try
                {
                    using (StreamReader sr = new StreamReader(@"NAME.DAT", System.Text.Encoding.GetEncoding("BIG5")))
                    {
                        while (!sr.EndOfStream)
                        {
                            string str = sr.ReadLine();
                            ar.Add(str+"\r\n");
                           
                        }
                        int rc = ar.Count;
                       
                        for (int i = 0; i < rc; i++)
                        {
                           
                          //dc.ColumnName+=  ar[i].ToString();
                          //dt.Columns.Add(dc);
                        }
     
                    }
                }
                catch (Exception ex)
                {
     
                    MessageBox.Show(ex.ToString());
                }
    1.疑問一 : dat檔案內容以存進arraylist 但不清楚 dt.Columns.Add(dc); 填入到datatable 中會跳入Exception
    2.疑問二 : 左方欄位名稱應該要用什麼樣的方式,才能依序打入datatable 中 

    2011年9月27日 上午 02:30

解答

  • 1.

                        for (int i = 0; i < rc; i++)
                        {
                           
                          //dc.ColumnName+=  ar[i].ToString();
                          //dt.Columns.Add(dc);
                        }

    改成

                        for (int i = 0; i < rc; i++)
                        {
                            dt.Columns.Add(ar[i].ToString());
                        }

    2. 從你的檔案內容中,如何判斷是 Column 還是 Row ?


    歡迎參觀我的Blog.NET菜鳥自救會

    2011年9月27日 上午 02:54
    版主

所有回覆

  • 1.

                        for (int i = 0; i < rc; i++)
                        {
                           
                          //dc.ColumnName+=  ar[i].ToString();
                          //dt.Columns.Add(dc);
                        }

    改成

                        for (int i = 0; i < rc; i++)
                        {
                            dt.Columns.Add(ar[i].ToString());
                        }

    2. 從你的檔案內容中,如何判斷是 Column 還是 Row ?


    歡迎參觀我的Blog.NET菜鳥自救會

    2011年9月27日 上午 02:54
    版主
  • 感謝指正 ~ 

     槽位   參考  時間   料號  批號  數量  面積   設定  溫度       (上方欄位名稱)

     

    1#槽    ( 左方欄位名稱)

    2#槽

    3#槽

    4#槽

    5#槽

    6#槽

    7#槽

    8#槽

    9#槽

    10#槽

     

     		    for (int i = 0; i < 9; i++)
                        {                      
                            dt.Columns.Add(ar[i].ToString());
                        }
     
                       
                        
                        //DataRow dr1 = dt.NewRow();
                        //dr1[0] = ar[9].ToString();
                        //dt.Rows.Add(dr1);
                        //DataRow dr2 = dt.NewRow();
                        //dr2[0] = ar[10].ToString();
                        //dt.Rows.Add(dr2);
                        //DataRow dr3 = dt.NewRow();
                        //dr3[0] = ar[11].ToString();
                        //dt.Rows.Add(dr3);

    創造新列這樣的方式~挺麻煩~ 正在想個新方式解決

    2011年9月27日 上午 04:29
  • 檔案能存成csv嗎? 可以的話,就可以像讀db這樣,把資料一次都讀出來!
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
    2011年9月27日 上午 04:52
  • 		    for (int i = 0; i < 9; i++)
                        {                      
                            dt.Columns.Add(ar[i].ToString());
                        }
     
                       
     
                        for (int i = 9; i < rc; i++)
                        {
                              DataRow dr = dt.NewRow();
                              dr[0] = ar[i].ToString();
                              dt.Rows.Add(dr);
                        }
    這樣就可以打到datatable了 ...
    變成自訂預設的欄位 .... gridview1.datasource = dt ; 
    回覆 ~ 亂馬客  這樣的方式,存成csv會比較方便? 

    2011年9月27日 上午 05:09
  • 可以自訂檔案內容格式的話,可以考慮 XML

    DataTable.ReadXml 方法

    http://msdn.microsoft.com/zh-tw/library/fkefbt5d(v=VS.80).aspx

    DataTable.WriteXml 方法

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


    歡迎參觀我的Blog.NET菜鳥自救會
    2011年9月27日 上午 05:14
    版主
  •   for (int i = 9; i < rc; i++)
                        {
                              DataRow dr = dt.NewRow();
                              dr[0] = ar[i].ToString();
                              dt.Rows.Add(dr);
                        }
    想到~這樣的方式,左方變成rows ... 可是左方若變成也是欄位,應該是????
    2011年9月27日 上午 05:24
  • 請參考以下的資訊

    Using OleDb to Import Text Files (tab, CSV, custom)

    希望對您有幫助!


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
    2011年9月27日 上午 05:31
  • 因為左方欄位[0]是用rows打出來的,為了避免被誤會這是格子,所以下了以下參數 ~ 不過不知道各位是否有更好的解法就是

     

                string ii =ar[0].ToString();
                dataGridView1.DataSource = dt;
                dataGridView1.Columns[ii].ReadOnly = true;
                dataGridView1.Columns[ii].SortMode = DataGridViewColumnSortMode.NotSortable; 

    2011年9月27日 上午 06:30
  • 沒遇到還真不知道~當你按照數量打出你要的datatable 但 datagridview 最後畫面就是會多出一列 rows

     

    這時debug~怪怪 明明數量沒錯啊~  但他就是自作聰明的跑出一列

     

    此時請下 dataGridView1.AllowUserToAddRows = false

    請參考 http://www.4ucode.com/Study/Topic/1004691 

     

    感謝大家的建議~

    2011年9月27日 上午 06:48