none
将DataGridView 中DataGridViewComboBoxColumn列的Items内容更新后,首次执行程序界面没有更新的问题 RRS feed

  • 问题

  • 我用WinForm做了一个串口数据采集的上位机软件,

    其中用到DataGridViewComboBoxColumn列来进行多路数据采集时串行端口号的选择控件,

    但是我发现在程序执行时首次单击该列中任何一行,可用串口号都不会更新。

           protected override void OnCellClick(DataGridViewCellEventArgs e)
            {
                base.OnCellClick(e);
                  
                if (e.RowIndex >= 0 && e.RowIndex != -1 && !this.Rows[e.RowIndex].IsNewRow)
                {
                    if (e.ColumnIndex == 2)
                    {
                        (this.Columns[2] as DataGridViewComboBoxColumn).Items.Clear();
                        foreach (string sp in SerialPort.GetPortNames())
                        {
                            (this.Columns[2] as DataGridViewComboBoxColumn).Items.Add(sp);
                        }
                        (this.Columns[2] as DataGridViewComboBoxColumn).Sorted = true;//对串口号进行排序
                    }
                }
            }

    这是我的响应代码,由于这里发图片和代码不太方便,请大虾移步我的blog,我会将工程文件传上去。 求各位大侠给看看啊 先谢过了http://www.cnblogs.com/because/archive/2012/03/01/2376379.html

    2012年3月1日 14:56

答案

  • 您好,請將您的Code搬到playPanel()這個建構子內,就可以了,不用每次按下去時,去清掉又新增,如下,
    public DisplayPanel()
    {
    	//你建構子原本的內容.........
    
    	//請加在這裡 ===
    	(this.Columns[2] as DataGridViewComboBoxColumn).Items.Clear();
    	foreach (string sp in SerialPort.GetPortNames())
    	{
    		(this.Columns[2] as DataGridViewComboBoxColumn).Items.Add(sp);
    	}
    	 
    	(this.Columns[2] as DataGridViewComboBoxColumn).Sorted = true;//?串口??行排序
    	//請加在這裡 ===
    }




    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年3月3日 9:33
  • dear

    你的建构子只有画了DataGrifView,并没有载入资料,

                (this.Columns[2] as DataGridViewComboBoxColumn).Items.Clear();
                foreach (string sp in SerialPort.GetPortNames())
                {
                    (this.Columns[2] as DataGridViewComboBoxColumn).Items.Add(sp);
                }

    另外,并不建议直接操作DataGridView资料,这将会让你陷入麻烦,你应该用BindingSource做资料绑定

    http://www.dotblogs.com.tw/yc421206/archive/2011/04/19/23072.aspx

    http://www.dotblogs.com.tw/yc421206/archive/2011/08/04/32556.aspx


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/

    2012年3月5日 5:09

全部回复

  • 您好,請將您的Code搬到playPanel()這個建構子內,就可以了,不用每次按下去時,去清掉又新增,如下,
    public DisplayPanel()
    {
    	//你建構子原本的內容.........
    
    	//請加在這裡 ===
    	(this.Columns[2] as DataGridViewComboBoxColumn).Items.Clear();
    	foreach (string sp in SerialPort.GetPortNames())
    	{
    		(this.Columns[2] as DataGridViewComboBoxColumn).Items.Add(sp);
    	}
    	 
    	(this.Columns[2] as DataGridViewComboBoxColumn).Sorted = true;//?串口??行排序
    	//請加在這裡 ===
    }




    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年3月3日 9:33
  • dear

    你的建构子只有画了DataGrifView,并没有载入资料,

                (this.Columns[2] as DataGridViewComboBoxColumn).Items.Clear();
                foreach (string sp in SerialPort.GetPortNames())
                {
                    (this.Columns[2] as DataGridViewComboBoxColumn).Items.Add(sp);
                }

    另外,并不建议直接操作DataGridView资料,这将会让你陷入麻烦,你应该用BindingSource做资料绑定

    http://www.dotblogs.com.tw/yc421206/archive/2011/04/19/23072.aspx

    http://www.dotblogs.com.tw/yc421206/archive/2011/08/04/32556.aspx


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/

    2012年3月5日 5:09