Data GridView Несколько Combox - PullRequest
       42

Data GridView Несколько Combox

0 голосов
/ 03 января 2012

У меня есть сетевое представление, называемое GridView1, которое имеет два столбца, каждый из которых является комбинированным списком, мне нужно иметь возможность изменять элементы в одном из комбинированных списков на основе первого.Поле со списком создается динамически, а значения связаны с одним набором данных.Первоначально, когда я загружаю форму, все становится идеально, но когда я изменяю значение первого комбинированного списка, значения второго комбинированного списка не меняются.Я попытался с EditingControlShowing событием вида сетки и затем применил SelectedIndexChanged к комбинированному списку, но все еще не мог понять это.

Вид сетки Combox

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
                    }

1 Ответ

0 голосов
/ 03 января 2012

Поскольку вы хотите назначить другой DataSource, вы можете добавить его во второй столбец DataGridViewComboBox или в эту конкретную ячейку,

Так как вы знаете RowIndex и ColumnIndex, вы можете очень хорошо установитьдругой источник данных, основанный на первом выбранном значении

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

РЕДАКТИРОВАТЬ

Так как вам нужно выбрать первый элемент, вы можете добавить это, котороедолжно работать нормально

(studpromo_gv[14, semy] as DataGridViewComboBoxCell).Value = (studpromo_gv[14, semy] as DataGridViewComboBoxCell).Items[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...