введите описание изображения здесьI имеет 2 разных datagrid, первый 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;
}
извините, я забыл, только что добавил, этот код может выбрать только тот же индекс, но мне нужно с тем же именем, а не только индекс.
вы хотите выбрать строку с таким же именем или оставить выбранную предыдущую?
Да, выбирается строка с одинаковым именем одновременно всякий раз, когда я нажимаю на элемент.





Вам необходимо получить доступ к свойству Value из обеих ячеек datagridviews, например
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.
Редактировать:
Если оба столбца datagridviews находятся в другом индексе, вам необходимо предоставить индекс столбца для соответствия значению.
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;
}
}
Выход:
Самый простой способ найти элементы по имени - перебрать элементы во втором списке и вернуть индекс имени, соответствующего вашему запросу.
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.
у вас есть какой-нибудь код?