在DataGrid的单元格上添加额外信息作为弹出窗口

时间:2010-08-08 06:23:32

标签: c# winforms datagrid

如何从DataGrid中的单元格弹出额外信息?

在网格的列中,有YESNO值。对于NO值,我需要解释为什么它是NO。有没有简单/明显可以做到的事情?

4 个答案:

答案 0 :(得分:1)

您可以始终拥有StatusStrip并使用CellMouseEnterCellMouseLeave事件设置并从状态条中删除(分别)解释。

  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吗?您可以弹出任何控件,弹出窗口就像将控件放在面板(如标签)中一样简单。