ramy nemer Ответов: 2

Фильтр столбца ComboBox datagridview на основе другого combobox


я искал по веб-сайтам, но не получил никаких результатов,я использую datagridview, имеющий два столбца combobox 1-й столбец имеет datasource isfsectionsbindingsource, value member = isfsectionName и выбранное значение parentISfkey в свойствах.у меня есть одна таблица, содержащая идентификатор родителя и ребенка.
Таблица ISFsections : ISFsectionId,ISFsectionName,ParentISFkey

private void dataGridView2_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
        {


            for (int i = 0; i < iSFsectionsBindingSource.Count; i++)
            {
                if (e.ColumnIndex == 4 && dataGridView2.Rows[i].Cells["Column11"].Value == null)
                {
                    MessageBox.Show("Choose 1st combobox value");
                }
                
                else
                {
                    cnn.Open();
                    DataSet ds = new DataSet();
                    SqlDataAdapter dabank = new SqlDataAdapter();
                    SqlCommand cmd10 = cnn.CreateCommand();
                    cmd10.CommandText = "select ISfsectionId, isfsectionName from ISFsections where ISfsectionId = @ParentISFkey";
                    cmd10.Parameters.AddWithValue("@ParentISFkey", dataGridView2.Rows[i].Cells["Column11"].Value);
                    cmd10.Connection = cnn;
                    cmd10.ExecuteNonQuery();
                    dabank.Fill(ds, "isfsectionName");

                    dataGridView2.Rows[i].Cells["Column23"].DataGridView.DataSource = ds;
                }
    
            }
            }


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

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

2 Ответов

Рейтинг:
1

RickZeeland

Убедиться в этом проще простого решения: фильтрация DataGridView с помощью combobox или textbox[^]

Или смотрите главу "фильтрация" в разделе "Подробное Руководство По Привязке Данных"на CodeProject:
Подробное Руководство По Привязке Данных[^]
Это не совсем то, о чем вы просите, но принцип может быть использован в вашей ситуации, я думаю.


Рейтинг:
0

dada1it

Вы должны привязать обработчик событий , чем вы должны сделать некоторые вещи для заполнения второго combobox.

   // Add the events to listen for
    dataGridView1.CellValueChanged +=
         new DataGridViewCellEventHandler(dataGridView1_CellValueChanged);
    dataGridView1.CurrentCellDirtyStateChanged +=
         new EventHandler(dataGridView1_CurrentCellDirtyStateChanged);

// This event handler manually raises the CellValueChanged event
// by calling the CommitEdit method.
void dataGridView1_CurrentCellDirtyStateChanged(object sender,
    EventArgs e)
{
    if (this.dataGridView1.IsCurrentCellDirty)
    {
        // This fires the cell value changed handler below
        dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
    }
}

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    // My combobox column is the second one so I hard coded a 1, flavor to taste
    DataGridViewComboBoxCell cb = (DataGridViewComboBoxCell)dataGridView1.Rows[e.RowIndex].Cells[1];
    if (cb.Value != null)
    {
           // do stuff
           dataGridView1.Invalidate();
    }
 }


CHill60

Этот вопрос был задан и на него был дан ответ (ясный) более года назад. Ваше решение сбивает с толку и не совсем точно.
Придерживайтесь ответов на новые вопросы, когда ОП все еще нуждается в помощи, и постарайтесь убедиться, что вы ответили на вопрос, который был задан на самом деле.