我需要在带有某些列合并行的gridview中显示数据。 来自数据库的原始数据,例如:
请帮助我显示网格视图,如:
使用C#,如何准备该格式的gridview?请帮助我。
答案 0 :(得分:1)
我刚刚选择了在this topic上发布的回复,并添加了一行来实现您想要的。
bool IsTheSameCellValue(int column, int row)
{
// To compare only values on 1st and 2nd column (TGL, TRANSAKSI)
if (column > 1) return false;
DataGridViewCell cell1 = dataGridView[column, row];
DataGridViewCell cell2 = dataGridView[column, row - 1];
if (cell1.Value == null || cell2.Value == null)
{
return false;
}
return cell1.Value.ToString() == cell2.Value.ToString();
}
private void dataGridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
e.AdvancedBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.None;
if (e.RowIndex < 1 || e.ColumnIndex < 0)
return;
if (IsTheSameCellValue(e.ColumnIndex, e.RowIndex))
{
e.AdvancedBorderStyle.Top = DataGridViewAdvancedCellBorderStyle.None;
}
else
{
e.AdvancedBorderStyle.Top = dataGridView.AdvancedCellBorderStyle.Top;
}
}
private void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.RowIndex == 0)
return;
if (IsTheSameCellValue(e.ColumnIndex, e.RowIndex))
{
e.Value = "";
e.FormattingApplied = true;
}
}
但是,使用此解决方案不可能在合并的单元格中垂直居中放置文本,因为它只会擦除边框而不会完全重绘组件。
答案 1 :(得分:1)
我建议您仔细阅读文档-Tutorial: Cell Merging
要实现自定义单元格合并,请使用GridView.CellMerge事件 处理程序。首先,检查是否正在处理正确的列。然后, 获取要比较的两个单元格的显示文本。最后, 指示如果单元格的显示文本匹配,则将合并它们。组 将CellMergeEventArgs.Handled参数设置为true可以覆盖 网格对此列的默认处理。
示例:
using DevExpress.XtraGrid.Views.Grid;
// ...
private void gridView1_CellMerge(object sender, DevExpress.XtraGrid.Views.Grid.CellMergeEventArgs e) {
GridView view = sender as GridView;
if(view == null) return;
if (e.Column == colCreatorID) {
string text1 = view.GetRowCellDisplayText(e.RowHandle1, colCreatorID);
string text2 = view.GetRowCellDisplayText(e.RowHandle2, colCreatorID);
e.Merge = (text1 == text2);
e.Handled = true;
}
}
在处理列时使用您自己的条件。例如取transaksi 005
,在这种情况下,检查第5行和第6行的值,然后比较是否为相等而创建的列取决于您的条件,将e.Merge
设置为true
。