Добавить дополнительную информацию в виде всплывающего окна на ячейка DataGrid

Как получить дополнительную информацию, которая появляется из ячейки в DataGrid?

В столбце сетки: существует значение ДА или НЕТ . Для значений NO мне нужно дать объяснение, почему это NO . Есть ли что-то простое / очевидное, что может сделать это?

7
задан Jesse 15 April 2013 в 23:43
поделиться

4 ответа

Вы всегда можете иметь 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
ответ дан 8 December 2019 в 01:41
поделиться

Пробовали ли вы привязать всплывающую подсказку (условно) к ячейке?

Задайте данные всплывающей подсказки в ItemDataBound (или динамической привязке <% #)

0
ответ дан 8 December 2019 в 01:41
поделиться

Попробуйте использовать RowDetails; вы можете указать RowDetailsTemplate для отображения подробной информации о строке. Вы можете увидеть пример подробностей строки здесь .

0
ответ дан 8 December 2019 в 01:41
поделиться

Вы пробовали ASP.NET AJAX PopupControl ? Вы можете всплывать на любом элементе управления, и всплывающее окно так же просто, как размещение элементов управления внутри панели, таких как метки.

-1
ответ дан 8 December 2019 в 01:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: