MahmoudOmar Ответов: 2

Значение Datagridviewcomboboxcell недопустимо C#


я пишу этот код и не знаю, где ошибка ?


void FillComboboxCarPlace()
        {
            try
            {
                
                dSet = new DataSet();
                if (con.State == ConnectionState.Closed)
                {
                    con.Open();
                }
                s = "select Move_id , Move_Place from Car_Move_Place";
                sCommand = new SqlCommand(s, con);
                sdAdapter = new SqlDataAdapter();
                sdAdapter.SelectCommand = sCommand;
                sdAdapter.Fill(dSet);
                DataRow dr = dSet.Tables[0].NewRow();
                dr.ItemArray = new object[2] { 0, " ---Select--- " };
                dSet.Tables[0].Rows.InsertAt(dr, 0);
                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    int index = 0;
                    var cbxMove = row.Cells[index] as DataGridViewComboBoxCell;
                    //DataGridViewComboBoxCell ContactCombo = (DataGridViewComboBoxCell)(row.Cells["Car_Move_Place"]);
                    ComboMovePlace.ValueMember = "Move_id";
                    ComboMovePlace.DisplayMember = "Move_Place";
                    ComboMovePlace.DataSource = dSet.Tables[0];
                }
                
                if (con.State == ConnectionState.Open)
                {
                    con.Close();
                }

            }
            catch
            {
                return;
            }
        }


Что я уже пробовал:

я хочу немного помочь в этой проблеме и спасибо

[no name]

Если вы не знаете, где ошибка, как мы должны знать ?
Как насчет того, чтобы запустить его через отладчик и сказать нам, где находится исключение ?

MahmoudOmar

отладчик, мне ничего не понятно

[no name]

Во-первых : узнайте, как использовать Visual Studio..

2 Ответов

Рейтинг:
2

OriginalGriff

"отладчик, мне ничего не понятно"
Вероятно, это связано с тем, что вы не использовали данные в своем наборе данных для загрузки DataGridView перед тем, как начать использовать строки. Таким образом, система не знает, какими должны быть ваши столбцы DGV.
Начните с установки точки останова на линии:

dSet.Tables[0].Rows.InsertAt(dr, 0);

И пройдитесь по своему коду.
Посмотреть на переменные, и что именно происходит - это очень путаный код, с петлей на DGV строк, чтобы задать пару не петли переменные cbxMove (которые вы никогда не использовать снова) индекс (который можно использовать один раз, и это не имеет значения) и ComboMovePlace который возвращает то же значение каждый раз, когда цикл завершается.

Я думаю, что вам нужно немного более тщательно подумать о том, что вы пытаетесь сделать - это совсем не очевидно из этого кода - прежде чем вы перейдете к кодированию.


Рейтинг:
1

Karthik_Mahalingam

foreach (DataGridViewRow row in dataGridView1.Rows)
           {
               int index = 0;
               var cbxMove = row.Cells[index] as DataGridViewComboBoxCell;
               cbxMove.ValueMember = "Move_id";
               cbxMove.DisplayMember = "Move_Place";
               cbxMove.DataSource = dSet.Tables[0];
           }


index =0; это позволит рассмотреть first column и он попытается бросить его в DataGridViewComboBoxCell, если он не относится к типу comboboxcell затем error будут брошены
измените значение индекса, чтобы указать столбец ComboBox, это индекс на основе нуля поэтому, если столбец combobox находится в 3-м столбце, вам придется присвоить индекс как 2