Изменить значение в DataGridView в выбранной строке, в которой был сделан выбор - PullRequest
0 голосов
/ 03 августа 2020

У меня следующая проблема. У меня DatagridView с ComboBoxColumns. Когда я изменяю первый ComboBox, второй будет заполнен данными, а когда я выберу первые два, будет заполнено третье.

До сих пор все работает нормально. Моя проблема в том, что у меня есть кнопка добавления для новых строк, и когда я выбираю первый ComboBoxColumn на новом (втором) Row, он также запускает значения на первом Row и обновляет второй ComboBoxColumn на этом строка, но я хочу изменить значения в строке не на всех Rows.

Есть ли у кого-нибудь идея?

Я пытался сохранить строку номер, откуда пришло изменение, но я ни на что не повлиял.

Вот что у меня есть:

private String id;
private int row_number;

//Fill first Combo
private void fill_first_combo()
        {
            datagridview_col1.Items.Clear();

            if (datagridview.SelectedRows.Count > 0)
            {
                string rcs = db_conn.connection();

                using (var OraConn = new OracleConnection(rcs))
                {
                    using (var OraCmd = OraConn.CreateCommand())
                    {
                        try
                        {
                            OraConn.Open();
                            OraCmd.BindByName = true;

                            OraCmd.CommandText = "Oracle Command"
                            OracleDataReader OraDataReader = OraCmd.ExecuteReader();
                            if (OraDataReader.Read() == false)
                            {
                                //MessageBox
                            }
                            else
                            {
                                using (var OraDat = new OracleDataAdapter(OraCmd))
                                {
                                    using (var table = new DataTable())
                                    {
                                        OraDat.Fill(table);

                                        foreach (DataRow row in table.Rows)
                                        {
                                            foreach (DataColumn column in table.Columns)
                                            {
                                                if (row[column] != null)
                                                {
                                                    if (column.ColumnName == "COLUMNNAME")
                                                    {
                                                        datagridview_col1.Items.Add(row[column.ColumnName].ToString());
                                                        id = row[column.ColumnName].ToString().Substring(0, 6);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        catch (OracleException ex)
                        {
                           //Exceptions
                        }
                        finally
                        {
                            OraConn.Dispose();
                        }
                    }
                }
            }
            else
            {
                //MessageBox
            }
        }

//Fill 2nd ComboBoxColumn
private void fill_combobox2(int row_number)
        {
            datagridview_col2.Items.Clear();

            string rcs = db_conn.connection();

            using (var OraConn = new OracleConnection(rcs))
            {
                using (var OraCmd = OraConn.CreateCommand())
                {
                    try
                    {
                        OraConn.Open();
                        OraCmd.BindByName = true;

                        OraCmd.CommandText = "Oracle Command with id as a Parameter";

                        var id_param = new OracleParameter("id", id);
                        OraCmd.Parameters.Add(id_param);

                        OracleDataReader OraDataReader = OraCmd.ExecuteReader();
                        if (OraDataReader.Read() == false)
                        {
                            //MessageBox
                        }
                        else
                        {
                            using (var OraDat = new OracleDataAdapter(OraCmd))
                            {
                                using (var combo2_table = new DataTable())
                                {
                                    OraDat.Fill(combo2_table);

                                    foreach (DataRow row in combo2_table.Rows)
                                    {
                                        foreach (DataColumn column in combo2_table.Columns)
                                        {
                                            if (row[column] != null)
                                            {
                                                if (column.ColumnName == "BUILDING_LESS")
                                                {
                                                        datagridview_col2.Items.Add(row[column.ColumnName].ToString());
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    catch (OracleException ex)
                    {
//Catch Exceptions
                    }
                    finally
                    {
                        OraConn.Dispose();
                    }
                }
            }
        }


//Trigger SelectionChange
private void datagridview_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            ComboBox cb = e.Control as ComboBox;
            if (cb != null)
            {
                cb.SelectedIndexChanged -= new EventHandler(selectionchange);

                cb.SelectedIndexChanged += selectionchange;
            }
        }


        private void selectionchange(object sender, EventArgs e)
        {
            try
            {
                //ComboBox cb = (ComboBox)sender;
                String selected = (sender as ComboBox).SelectedItem.ToString();

                if (datagridview.CurrentCell.ColumnIndex == 0)
                {
                    row_number = datagridview.CurrentCell.RowIndex;
                    id = selected.Substring(0, 6);
                    if (!String.IsNullOrEmpty(id))
                    {
                        fill_combobox2(row_number);
                    }
                    else if (String.IsNullOrEmpty(id))
                    {
                        //MessageBox);
                    }
                }
                else if (datagridview.CurrentCell.ColumnIndex == 1)
                {
                    section = selected.Substring(0, 2);
                    if (!String.IsNullOrEmpty(id) && !String.IsNullOrEmpty(value2))
                    {
                        //MessageBox
                    }
                    else if (String.IsNullOrEmpty(id) && !String.IsNullOrEmpty(value2))
                    {
                        //MessageBox
                    }
                    else if (String.IsNullOrEmpty(id) && String.IsNullOrEmpty(value2))
                    {
                        //MessageBox
                    }
                }
            }
            catch (Exception ex)
            {
                //MessageBox
            }
        }

1 Ответ

1 голос
/ 03 августа 2020

вы пробовали использовать событие CellValueChange для управления этим? Затем вы можете сделать что-то вроде. Код находится в VB, но вы можете преобразовать его в C# с помощью онлайн-инструмента

Try
        Dim _ColumnIndex As Integer = datagridview.Columns("Combo1").Index
        Dim _ColumnIndex2 As Integer = datagridview.Columns("Combo2").Index
        If e.ColumnIndex = _ColumnIndex Then


          '----your formula----

 
        End If
    Catch ex As Exception

    End Try
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...