0

我有一个名为 GridView1 的数据网格视图,它有两列,每列都是组合框,我需要能够根据第一个组合框更改其中一个组合框中的项目。组合框是动态创建的,并且值与单个数据集绑定。最初,当我加载表单时,一切都很完美,但是当我更改第一个组合框的值时,第二个组合框的值不会改变。我尝试使用gridview 的EditingControlShowing事件,然后将SelectedIndexChanged应用于组合框,但仍然无法弄清楚。

网格视图组合框

DataGridViewComboBoxColumn seccol = new DataGridViewComboBoxColumn();
                    seccol.DataSource = semch.Tables["secall"];
                    seccol.Name = "SSSS";
                    seccol.DisplayMember = "SSSSNAME";
                    seccol.ValueMember = "SSSSID";
                    seccol.HeaderText = "SSSS";
                    seccol.DataPropertyName = "SSSSID";
                    seccol.DefaultCellStyle.Font = new Font("Microsoft Sans Serif", 10, FontStyle.Bold);
                    studpromo_gv.Columns.Add(seccol);
                    studpromo_gv.Columns["SEC"].DisplayIndex = 14;
                    studpromo_gv.Columns[14].HeaderCell.Style.BackColor = Color.LightSeaGreen;

EditingControlShowing 事件

ComboBox cb = e.Control as ComboBox;
            if (cb != null)
            {
                cb.SelectedIndexChanged -= new EventHandler(cb_SelectedIndexChanged);
                cb.SelectedIndexChanged += new EventHandler(cb_SelectedIndexChanged);
            }

更新代码

if (studpromo_gv.CurrentCell.ColumnIndex == 13)
            {
                ComboBox cmbBox = (ComboBox)sender;
                //int semx = Convert.ToInt32(cmbBox.SelectedValue);
                int semy = studpromo_gv.CurrentRow.Index;
                if (cmbBox != null)
                {
                    try
                    {
                        using (MySqlConnection conn = new MySqlConnection(MySQLconnection))
                        {
                            conn.Open();
                            MySqlDataAdapter secgvda = new MySqlDataAdapter("SELECT ID,NAME FROM STABLE WHERE SID='" + cmbBox.SelectedValue + "'", conn);
                            DataSet semch = new DataSet();
                            secgvda.Fill(semch, "secall");

                            (studpromo_gv[14, semy] as DataGridViewComboBoxCell).DataSource = semch.Tables["secall"];
                            (studpromo_gv[14, semy] as DataGridViewComboBoxCell).DisplayMember = "NAME";
                            (studpromo_gv[14, semy] as DataGridViewComboBoxCell).ValueMember = "ID";

                            conn.Close();
                            conn.Dispose();
                        }
                    }
                    catch (Exception)
                    {
                        //Some Statements
                    }
4

1 回答 1

0

由于您要分配不同的DataSource,您可以选择将其添加到第二个 DataGridViewComboBox 列本身或该特定单元格,

由于您会知道 RowIndex 和 ColumnIndex 您可以很好地根据选择的第一个值设置不同的 DataSource

(dataGridView1[0,0] as DataGridViewComboBoxCell).DataSource = list of states

编辑

由于您需要选择第一项,您可以添加它应该可以正常工作

(studpromo_gv[14, semy] as DataGridViewComboBoxCell).Value = (studpromo_gv[14, semy] as DataGridViewComboBoxCell).Items[0]
于 2012-01-03T08:55:07.600 回答