none
DataGridView 插入一列新資料問題 RRS feed

  • 問題

  • 請教各位大大 如果我的DataGridView  畫面是以下

    CH1    CH2   CH3 .........

    資料    資料    ......

    資料    資料    ......

    資料    資料    ......

    資料    資料    ......

    我測試完一個Channel  資料60筆 ,如果可以我想一列一列將資料插入dataGridView 中,

    另一種做法比較笨就是將CH1 資料刪除等CH2資料出現再將CH1 跟CH2 一起用rows.Add 方式再加入一次>"<

    不知道各位大大有沒有比較好的寫法,因為我等儀器一個Channel 測完才能再顯示 下一個Channel ,

    麻煩各位大大給小弟一點方向跟寫法。


    2017年12月5日 上午 07:10

解答

  • 建議你用 Binding 的方式做, 對著資料修改就好

    範例如下 (三個 Button 和一個 DataGridView)

     public partial class Form1 : Form
        {
            private DataTable _table;
            private BindingSource _source;
            public Form1()
            {
                InitializeComponent();
                _source = new BindingSource();
                CreateDataTable();
                CreateRows();
                _source.DataSource = _table;
                dataGridView1.DataSource = _source;
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <returns></returns>
            private void CreateDataTable()
            {
                _table  = new DataTable();
                _table.Columns.Add("CH1");
                _table.Columns.Add("CH2");
                _table.Columns.Add("CH3");
              
            }
    
            /// <summary>
            /// 假設你有十個 data row
            /// </summary>
            private void CreateRows()
            {
                for(int i =0; i < 10; i++)
                {
                    var row = _table.NewRow();
                    _table.Rows.Add(row);
                }
            }
    
    
            /// <summary>
            /// 模擬 CH1 讀取後修改CH1 Column資料
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button1_Click(object sender, EventArgs e)
            {
              
               for (int i=0; i < 10; i ++)
                {
                    _table.Rows[i][0] = "CH1 -" + i.ToString();
                }
            }
    
            /// <summary>
            /// 模擬 CH2 讀取後修改CH2 Column資料
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button2_Click(object sender, EventArgs e)
            {
                for (int i = 0; i < 10; i++)
                {
                    _table.Rows[i][1] = "CH2 -"+ i.ToString();
                }           
            }
    
            /// <summary>
            /// 模擬 CH3 讀取後修改CH3 Column資料
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button3_Click(object sender, EventArgs e)
            {
                for (int i = 0; i < 10; i++)
                {
                    _table.Rows[i][2] = "CH3 -" + i.ToString();
                }           
            }
        }


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 z4503 2017年12月6日 上午 05:42
    2017年12月5日 下午 04:12
    版主

所有回覆

  • 建議你用 Binding 的方式做, 對著資料修改就好

    範例如下 (三個 Button 和一個 DataGridView)

     public partial class Form1 : Form
        {
            private DataTable _table;
            private BindingSource _source;
            public Form1()
            {
                InitializeComponent();
                _source = new BindingSource();
                CreateDataTable();
                CreateRows();
                _source.DataSource = _table;
                dataGridView1.DataSource = _source;
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <returns></returns>
            private void CreateDataTable()
            {
                _table  = new DataTable();
                _table.Columns.Add("CH1");
                _table.Columns.Add("CH2");
                _table.Columns.Add("CH3");
              
            }
    
            /// <summary>
            /// 假設你有十個 data row
            /// </summary>
            private void CreateRows()
            {
                for(int i =0; i < 10; i++)
                {
                    var row = _table.NewRow();
                    _table.Rows.Add(row);
                }
            }
    
    
            /// <summary>
            /// 模擬 CH1 讀取後修改CH1 Column資料
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button1_Click(object sender, EventArgs e)
            {
              
               for (int i=0; i < 10; i ++)
                {
                    _table.Rows[i][0] = "CH1 -" + i.ToString();
                }
            }
    
            /// <summary>
            /// 模擬 CH2 讀取後修改CH2 Column資料
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button2_Click(object sender, EventArgs e)
            {
                for (int i = 0; i < 10; i++)
                {
                    _table.Rows[i][1] = "CH2 -"+ i.ToString();
                }           
            }
    
            /// <summary>
            /// 模擬 CH3 讀取後修改CH3 Column資料
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button3_Click(object sender, EventArgs e)
            {
                for (int i = 0; i < 10; i++)
                {
                    _table.Rows[i][2] = "CH3 -" + i.ToString();
                }           
            }
        }


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 z4503 2017年12月6日 上午 05:42
    2017年12月5日 下午 04:12
    版主
  • 每次都麻煩Bill 大的,真是不好意思, 原來還有這種做法,我可以隨時彈性加入欄位與資料,正是我想要的功能。

    再次感謝大大的指點。

    2017年12月6日 上午 05:44
  • 論壇就是用來互相討論,沒有甚麼麻煩的。有意思的問題討論起來總是有趣。

    對了, 在 Windows Forms 上, BindingSource 其實挺好用的, 你可以參考以下兩篇文章, 或許可以想到更多的應用方式

    上一筆、下一筆、第一筆、最末筆《BindingSource的應用 (1)》

    BindingNavigator《BindingSource的應用 (2)》


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2017年12月6日 上午 06:54
    版主