日期:2014-05-18  浏览次数:20986 次

winform下面datagridview的下拉菜单加载问题。
有一个datagridview,里面只有2列,都是下菜单。而且根据第一列下拉菜单选项加载第二列的下拉菜单,现在问题如何获得第二列的这个下拉控件。
谢谢

------解决方案--------------------
你把第二列加个RowCommand,比如RowCommand = "GetCommand"
然后在GridView_RowCommand事件中这样获取第二列的下拉控件:
GridView.Rows[Int32.Parse(e.CommandArgument.ToString())].Cells[1];
------解决方案--------------------
可以在dataGridView 的EditingControlShwoing事件中写
C# code

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            if (sender != null)
            {
                if(((DataGridView)sender).SelectedCells[0].ColumnIndex==0) //编辑的是第0列
                {
                 //设置第一列的数据源
                 //((ComboBox)e.Control).DataSource = ds.Tables[0];
                    //((ComboBox)e.Control).DisplayMember = "Display";
                    //((ComboBox)e.Control).ValueMember = "Value";
                    ////当DataGridView中的ComboBox值变化时,生成如下事件
                   ((ComboBox)e.Control).SelectedIndexChanged += new EventHandler(DataGridViewCombox_SelectedIndexChanged);
                }
                    
             }
        }
/// <summary>
        /// ////当DataGridView中的ComboBox值变化时触发如下事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DataGridViewCombox_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (sender != null&&dataGridView1.SelectedCells[0].ColumnIndex==0)//确定发生值变化的是第0列。可根据实际情况调整。
            {
                
                
                int rowIndex =dataGridView1.SelectedCells[0].RowIndex;
                //获取第rowIndex行,第1列的Cell
                DataGridViewComboBoxCell dgvcbc=(DataGridViewComboBoxCell) dataGridView1.Rows[rowIndex].Cells[1];
                
                dgvcbc.Items.Clear();//清空DataGridViewComboxCell
                ///////////////////往里填充新的数值。
                for (int i = 0; i < 10; i++)
                {
                    dgvcbc.Items.Add(((ComboBox)sender).SelectedItem.ToString() + i.ToString());
                }
                
            }
        }