C#如何在不同的datagridview中选择两个具有相同名称的项目?

时间:2018-10-10 10:29:27

标签: c# datagridview

enter image description here我有2个不同的数据网格,第一个DG1是我的物品列表,而DG2是已购买物品的物品队列。我的目标是每当我单击DG2中的项目时,也会选择具有相同名称或ID的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 :(得分:0)

您需要从两个datagridviews单元格访问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

编辑:

如果两个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;
    }
}

输出:

enter image description here

答案 1 :(得分:0)

按名称查找项目的最简单方法是循环浏览第二个列表中的项目,并返回与查询匹配的名称的索引。

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,则有一种引用方法可以使您重复该过程。