Как получить дополнительную информацию, которая появляется из ячейки в DataGrid?
В столбце сетки: существует значение ДА
или НЕТ
. Для значений NO
мне нужно дать объяснение, почему это NO
. Есть ли что-то простое / очевидное, что может сделать это?
Вы всегда можете иметь 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
истинно, и обе границы (с зеленой внутри), если оба истинны.
Пробовали ли вы привязать всплывающую подсказку (условно) к ячейке?
Задайте данные всплывающей подсказки в ItemDataBound (или динамической привязке <% #)
Попробуйте использовать RowDetails; вы можете указать RowDetailsTemplate для отображения подробной информации о строке. Вы можете увидеть пример подробностей строки здесь .
Вы пробовали ASP.NET AJAX PopupControl ? Вы можете всплывать на любом элементе управления, и всплывающее окно так же просто, как размещение элементов управления внутри панели, таких как метки.