如何从DataGrid中的单元格弹出额外信息?
在网格的列中,有YES
或NO
值。对于NO
值,我需要解释为什么它是NO
。有没有简单/明显可以做到的事情?
答案 0 :(得分:1)
您可以始终拥有StatusStrip
并使用CellMouseEnter
和CellMouseLeave
事件设置并从状态条中删除(分别)解释。
private void dgvCellMouseEnter(object sender, DataGridViewCellEventArgs e)
{
statusStrip1.Text = (sender as DataGridView)[e.ColumnIndex, e.RowIndex].ToolTipText;
}
private void dgvCellMouseLeave(object sender, DataGridViewCellEventArgs e)
{
statusStrip1.Text = "";
}
作为一项附加功能,您可以通过显示Excel等小标记来显示单元格中有“额外”信息。这是一小段代码,我用它来完成同样的事情:
private void dgvCellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.ColumnIndex != -1) && (e.RowIndex != -1)
{
DataGridViewCell dgvCell = (sender as DataGridView)[e.ColumnIndex, e.RowIndex];
Pen greenPen = new Pen(Color.Green, 2);
Boolean hasTooltip = !dgvCell.ToolTipText.Equals("");
Boolean hasCompleted = (dgvCell.Tag as CellInfo).complete; // CellInfo is a custom class
if (hasTooltip) && (hasCompleted)
{
e.Handled = true;
e.Paint(e.ClipBounds, e.PaintParts);
e.Graphics.DrawRectangle(Pens.Blue, e.CellBounds.Left + 5, e.CellBounds.Top + 2, e.CellBounds.Width - 12, e.CellBounds.Height - 6);
e.Graphics.DrawRectangle(greenPen, e.CellBounds.Left + 1, e.CellBounds.Top + 1, e.CellBounds.Width - 3, e.CellBounds.Height - 3);
}
else if (hasTooltip)
{
e.Handled = true;
e.Paint(e.ClipBounds, e.PaintParts);
e.Graphics.DrawRectangle(Pens.Blue, e.CellBounds.Left, e.CellBounds.Top, e.CellBounds.Width - 2, e.CellBounds.Height - 2);
}
else if (hasCompleted)
{
e.Handled = true;
e.Paint(e.ClipBounds, e.PaintParts);
e.Graphics.DrawRectangle(greenPen, e.CellBounds.Left + 1, e.CellBounds.Top + 1, e.CellBounds.Width - 3, e.CellBounds.Height - 3);
}
}
}
如果hasTooltip
为真,此代码在单元格周围绘制蓝色边框,如果hasCompleted
为真,则为绿色边框;如果两者都为真,则为两个边框(绿色边框内)。
答案 1 :(得分:0)
您是否尝试将tooltip(有条件地)绑定到单元格?
在ItemDataBound(或动态<%#binding)
中设置工具提示数据答案 2 :(得分:0)
尝试使用RowDetails;您可以指定RowDetailsTemplate以显示有关该行的详细信息。您可以看到行详细信息here的示例。
答案 3 :(得分:-1)
你试过ASP.NET AJAX PopupControl吗?您可以弹出任何控件,弹出窗口就像将控件放在面板(如标签)中一样简单。