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

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

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

Ответы [ 4 ]

1 голос
/ 11 августа 2010

Вы всегда можете иметь 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 истина, и обе границы (с зеленой внутри), если оба истинны.

0 голосов
/ 18 августа 2010

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

0 голосов
/ 18 августа 2010

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

0 голосов
/ 08 августа 2010

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

Установить данные всплывающей подсказки в ItemDataBound (или динамическое <% # связывание) </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...