连接datagridview(winform)中2列的值

时间:2018-12-11 14:54:29

标签: winforms datagridview datagridviewcolumn

我有一个包含绑定列和未绑定列的datagridview,我想合并2个所需绑定列(a和b)的值,因此列c(未绑定)包含a和b的值

有可能吗?

Nb:很抱歉,我无法发布照片以获得更好的解释

谢谢

2 个答案:

答案 0 :(得分:0)

可能有不同的方式。最简单的方法可能是使用具有3列a,b和c的DataTable,其中c是具有a + b作为表达式的expression column

另一个选择是使用DataGridView的{​​{3}}事件。 (您还可以使用其他一些事件,例如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}";
    }
};

答案 1 :(得分:0)

您可以在CellFormatting事件中根据需要为“ c”列单元格生成值:

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;
}