C # Как выбрать два элемента с одинаковыми именами в разных datagridview? - PullRequest
0 голосов
/ 10 октября 2018

введите описание изображения здесь У меня есть 2 разных таблицы данных, первый DG1 - это мой список предметов, а DG2 - очереди предметов для купленных предметов.Моя цель - всякий раз, когда я нажимаю на элемент в DG2, DG1 также выбирается с тем же именем или идентификатором.Я хочу игнорировать индекс, потому что моя очередь элементов отличается от порядка списка элементов.

private void dgItems_CellClick(object sender, DataGridViewCellEventArgs e)
    {

        int rowindex = dgItems.Rows[e.RowIndex].Index;
        int columnindex = dgItems.Columns[e.ColumnIndex].Index;

        dgItemList.Rows[rowindex].Cells[columnindex].Selected = true;
    }

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

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

private int FindRowIndex(DataGridView view, string searchValue)
{
    foreach(DataGridViewRow row in view)
    {
        if(row.Cells[1].Value.ToString().Equals(searchValue))
            return row.Index;
    }
    return -1;
}

Затем вы просто используете это дляконтролировать, какой элемент выбирается во второй таблице.

private void dgItems_CellClick(object sender, DataGridViewCellEventArgs e)
{
    int rowindex = dgItems.Rows[e.RowIndex].Index;
    int columnindex = dgItems.Columns[e.ColumnIndex].Index;

    dgItemList.Rows[rowindex].Cells[columnindex].Selected = true;

    string searchName = dgItemList.Rows[rowindex].Cells.Value.ToString();
    int secondRowIndex = FindRowIndex(dgItemList2, searchName);

    dgItemList2.Rows[secondRowindex].Cells[columnindex].Selected = true;
}

Вы можете повторить основной цикл, чтобы найти альтернативный индекс столбца, если это необходимо.Наличие метода, к которому можно обратиться, дает вам возможность повторить процесс, если вы хотите щелкнуть по элементу в списке 2 и выбрать его из списка 1.

0 голосов
/ 10 октября 2018

Вам необходимо получить доступ к Value свойству из обеих ячеек таблицы данных, например

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    int rowindex = dataGridView1.Rows[e.RowIndex].Index;
    int columnindex = dataGridView1.Columns[e.ColumnIndex].Index;

    foreach (DataGridViewRow row in dataGridView2.Rows)
        row.Selected = false;

    var cellValue1 = dataGridView1.Rows[rowindex].Cells[columnindex].Value;

    foreach (DataGridViewRow row in dataGridView2.Rows)
    {
        var cellValue2 = row.Cells[columnindex].Value;

        if (cellValue1 == cellValue2)
            row.Selected = true;
        else
            row.Selected = false;
    }
}

dataGridView1 это ваш dgItems и dataGridView2 ваш dgItemList.

Редактировать:

Если оба столбца таблицы данных имеют разные индексы, необходимо указать индекс столбца для соответствия значению.

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    int rowindex = dataGridView1.Rows[e.RowIndex].Index;
    int columnindex = dataGridView1.Columns[1].Index;

    foreach (DataGridViewRow row in dataGridView2.Rows)
        row.Selected = false;

    var cellValue1 = dataGridView1.Rows[rowindex].Cells[1].Value;  // 1 <= index of Name column in dgItems

    foreach (DataGridViewRow row in dataGridView2.Rows)
    {
        var cellValue2 = row.Cells[0].Value; // 0 <= index of Name column in dgItemList

        if (cellValue1 == cellValue2)
            row.Selected = true;
        else
            row.Selected = false;
    }
}

Вывод:

enter image description here

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