屁股一直很痛苦,但我一直在使用TableLayoutPanel
来显示一些数据,如下面的屏幕截图所示。但有几次有人提出这可以轻松完成 DataGridView
。
所以我的问题是,可以使用DataGridView
在Windows窗体中完成以下屏幕截图吗?我在网上搜索过,没有类似下面的内容。
答案是&#34;是的,它可以。&#34; 或&#34;不,它是不可能的。&#34; < / strong>即可。但请不要发布替代方案,因为问题的目的是最终知道这样的事情是否可以通过DataGridView
完成。
DataTable
如下所示:
BG_Color EmpId ColNum RowNum
Yellow 4304 1 1
Yellow 8464 2 1
Yellow 2012 3 1
Blue 4593 1 2
Blue 3515 2 2
Blue 0546 3 2
Green 4346 1 3
Green 5426 2 3
Green 0551 3 3
结果如下。它只显示,无法点击此处:
DataGridView
如何实现这一目标?我甚至已经将RowNum
和ColNum
包含在每个单元格的确切位置,以防万一。
或者如果有人可以在类似的东西上分享链接,我们将不胜感激。
感谢。
答案 0 :(得分:2)
是的,您可以使用http
:
DataGridView
和RowCount
。ColumnCount
CellFormatting
事件进行处理,然后在那里设置单元格的值和背景颜色。以下是您的示例数据的工作示例:
DataGridView
答案 1 :(得分:1)
正如我在问题评论中提到的那样,很容易实现这一点,但只有一个条件:存储在数据表中的数据必须被转动。怎么样?看看例子:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//create DataTable
DataTable dt = CreateCustomDataTable();
var pivotDt = dt.AsEnumerable()
.GroupBy(x => x.Field<int>("RowNum"))
.Select(grp => new
{
BG_Color = grp.First().Field<string>("BG_Color").ToLower(), //System.Drawing.Color.FromName(grp.First().Field<string>("BG_Color")),
Emp1 = grp.Where(e => e.Field<int>("ColNum") == 1).Select(a => a.Field<int>("EmpId")).SingleOrDefault(),
Emp2 = grp.Where(e => e.Field<int>("ColNum") == 2).Select(a => a.Field<int>("EmpId")).SingleOrDefault(),
Emp3 = grp.Where(e => e.Field<int>("ColNum") == 3).Select(a => a.Field<int>("EmpId")).SingleOrDefault()
}).ToList();
dataGridView1.DataSource = pivotDt;
dataGridView1.Columns[0].Visible = false;
}
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
DataGridView dgv = (DataGridView)sender;
e.CellStyle.BackColor = Color.FromName(dgv.Rows[e.RowIndex].Cells[0].Value.ToString());
e.CellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
e.CellStyle.SelectionBackColor = Color.Transparent;
}
//...
}
结果:
对于这样的数据量,性能损失的风险等于零。
最终说明 关于您的主要问题:
(...)可以使用datagridview在Windows窗体中完成以下屏幕截图吗?
答案是肯定的,它可以或不,它是不可能的。 (...)
是。这是可能的 - 非常容易。