Как отключить форматирование столбца равно на другой сетке данных? - PullRequest
0 голосов
/ 09 ноября 2019

Я занимаюсь разработкой приложения Windows Forms для кредитования. Когда я нажимаю зеленую кнопку добавления datagrid1, оборудование добавляется в datagrid2, но я хотел бы, чтобы это происходило только один раз для каждого элемента.

Я использую этот код для передачи данных строки:

private void DataGridEquipamento_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex < 0)
    {
        return;
    }

    if (e.ColumnIndex == 2)
    {
        foreach (DataGridViewRow row in this.dataGridEquipamento.SelectedRows)
        {
            object[] rowData = new object[row.Cells.Count];
            for (int i = 0; i < rowData.Length; ++i)
            {
                rowData[i] = row.Cells[i].Value;
            }
            this.dataGridEmprestimo.Rows.Add(rowData);
        }
    }
}

https://i.stack.imgur.com/jCedC.png

1 Ответ

0 голосов
/ 10 ноября 2019

Есть несколько способов добиться того, о чем вы, я полагаю, просите.

Первый способ - это фактически удалить элемент из первого списка после его добавления во второй. Это препятствует тому, чтобы пользователь даже пытался добавить более одного, и гарантирует, что представляемый интерфейс имеет контекстный смысл.

С учетом сказанного, чтобы точно ответить на вопрос, поскольку вы фактически клонируете строку, выМожно выполнить сравнение, чтобы определить, было ли оно уже добавлено:

    foreach (DataGridViewRow row in this.dataGridEquipamento.SelectedRows)
    {
        object[] rowData = new object[row.Cells.Count];
        for (int i = 0; i < rowData.Length; ++i)
        {
            rowData[i] = row.Cells[i].Value;
        }

        if (!this.dataGridEmprestimo.Rows.Contains(rowData))
        {
            this.dataGridEmprestimo.Rows.Add(rowData);
        }
    }

В плане оптимизации вам может потребоваться проверить только одно значение из строки - например, Id - чтобы определить, было ли оно ужесуществует. Вы могли бы написать простой метод для возврата количества строк с этим идентификатором. Если их нет или если число меньше максимально допустимого, вы можете добавить эту строку.

    public int CountObjectsInRows(string idValue)
    {
        int count = 0;
        if (string.IsNullOrEmpty(idValue))
        {
            return count;
        }

        foreach (DataGridViewRow row in this.dataGridEquipamento.SelectedRows)
        {
            if (row.Cells[0].Value.ToString() == idValue)
            {
                count++;
            }
        }

        return count;
    }

Вы можете использовать этот метод вместо вышеупомянутого "this.dataGridEmprestimo". Rows.Contains (rowData) "условие.

    foreach (DataGridViewRow row in this.dataGridEquipamento.SelectedRows)
    {
        object[] rowData = new object[row.Cells.Count];
        for (int i = 0; i < rowData.Length; ++i)
        {
            rowData[i] = row.Cells[i].Value;
        }

        if (CountObjectsInRows(rowData.Cells[0].ToString()) == 0)
        {
            this.dataGridEmprestimo.Rows.Add(rowData);
        }
    }
...