Объединенное значение 2 столбцов в datagridview (winform) - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть сетевое представление, которое содержит связанный и несвязанный столбец, и я хочу объединить значение 2 желаемого связанного столбца (a и b), чтобы столбец c (который является несвязанным) содержал значение из a и b

Возможно ли это?

Примечание: извините, я не могу опубликовать фотографии для лучшего объяснения

Спасибо

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

вы можете генерировать значение для ячеек столбца "c" по требованию в событии CellFormatting:

private void Grid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    if (e.RowIndex < 0) return;

    int cIndex = 2;
    if (e.ColumnIndex != cIndex) return;

    var grid = (DataGridView)sender;
    int aIndex = 0, bIndex = 1, row = e.RowIndex;

    e.Value = String.Format("{0} {1}", grid[aIndex, row].Value, grid[bIndex, row].Value);
    e.FormattingApplied = true;
}
0 голосов
/ 11 декабря 2018

Это возможно по-разному.Возможно, проще всего было бы использовать DataTable с 3 столбцами a, b и c, где c является столбцом выражений с a + b в качестве выражения.

Другим вариантом является использование RowPrePaint события DataGridView.(Вы также можете использовать некоторые другие события, такие как CellFormatting.)

Пример - столбец выражений

var dt = new DataTable();
dt.Columns.Add("A", typeof(int));
dt.Columns.Add("B", typeof(string));
dt.Columns.Add("C", typeof(string), "CONVERT(A, System.String) + B");
dt.Rows.Add(1, "One");
dt.Rows.Add(2, "Two");
dataGridView1.DataSource = dt;

Пример - RowPrePaint

dataGridView1.Columns.Add("A", "A");
dataGridView1.Columns.Add("B", "B");
dataGridView1.Columns.Add("C", "C");
dataGridView1.Rows.Add(1, "One");
dataGridView1.Rows.Add(2, "Two");
dataGridView1.RowPrePaint += (s, a) =>
{
    if (a.RowIndex >= 0)
    {
        var g = (DataGridView)s;
        g["C", a.RowIndex].Value = $"{g["A", a.RowIndex].Value}{g["B", a.RowIndex].Value}";
    }
};
...