日期:2014-05-17  浏览次数:20987 次

关于DataGridView的几个问题
关于DataGridView的几个问题
1、在使用DataGridview中的ComboBox下拉框时,能不能像单纯的ComboBox控件那样能够设置索引。也就说能够使用这样的语句 comboBox1.SelectedIndex = 2,让ComboBox默认选择Item
2、在DataGridview中新增一行(用的是DataGridview中AllowUserAddRow属性),选择完此行的下拉框,接着去选下一行的下拉框时,此时点击下拉框时默认是上一行选择的Item的位置,有没有什么方法,让每个下拉框在点击后,显示位置都是从最顶端显示。
3.在处理DataGridview相关事件时,它的参数有两个,第一个是object sender,第二个是.....EventArg e,在什么情况下使用这两个参数,在参看别人代码时,有时人家用((DataGridview)sender).RowIndex,有时人家用e.RowIndex,所以感觉很迷惑。
4.如果使用DataGridviewComboBox下拉框时,怎么将下拉框这一列绑定到数据库啊?也就是说更新数据库时,下拉框的内容也是就能被更新了。

谢谢各位高手的解答 

------解决方案--------------------

你应该是想在页面加载的时候,有一个默认值吧.
我以前是这么做的,
DataGridViewComboBoxCell cb = (DataGridViewComboBoxCell)dgv.Rows[0].Cells["XXX"];
cb.ValueMember = "id";
cb.DataSource = userList;
cb.DisplayMember = "name";
((DataGridViewComboBoxCell)dgv.Rows[0].Cells["XXX"]).Value = 2;
// 相当于comboBox1.SelectedIndex = 2


至于sender和e,一个是事件监视的对象就是combox,一个是事件相关的信息,具体可以去看msdn

至于你说的第四个问题
可以给dgv的EditingControlShowing订阅事件

dgv.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dgv_EditingControlShowing);
在dgv_EditingControlShowing中
        private void dgvItem_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            if (e.Control is DataGridViewComboBoxEditingControl)
            {
                ((ComboBox)e.Control).SelectedIndexChanged -= new EventHandler(ComboBox_SelectedIndexChanged);
                ((ComboBox)e.Control).SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged);
            }
        }

之后就可以在ComboBox_SelectedIndexChanged中写你想要的操作了
------解决方案--------------------
combox一列的数据绑定数据库,在我相当的方法只能循环,挨个绑定了,不知道还有咩有别的方法