DataGrid 单元格工具提示






1.45/5 (7投票s)
2005年6月3日
1分钟阅读

98042

2
每个单元格值的简单 DataGrid 工具提示和表头工具提示。
引言
有很多关于工具提示的示例和文章,但我没有找到任何一个能够动态显示 DataGrid
中当前单元格的内容。 我查阅了不同的文章,最终找到了一种解决方案,想和大家分享。
本文档描述了如何使用 C# 和 JavaScript 创建动态工具提示。 在这种模式下,我们可以将当前单元格的数据显示为工具提示。 由于它将是一个可以自定义的 .NET 组件,因此我们可以根据需要更改工具提示的外观。
实现代码
有两种方法可以实现相同的功能。 如果我们需要显示为默认 Windows 工具提示,这非常简单。 只需编写下面提到的五行代码(方法 1),就足够了。 或者,如果您想要具有不同外观的自定义工具提示,请使用方法 2。
方法 1
在 ItemDataBound
方法中,添加以下代码
if(e.Item.ItemType==ListItemType.Item ||
e.Item.ItemType==ListItemType.AlternatingItem)
{
for(int i=0;i<e.Item.Cells.Count;i++)
{
e.Item.Cells[i].ToolTip =e.Item.Cells[i].Text;
}
}
方法 2
以下是绑定到 DataGrid
的数据库字段。
empid
empname
designation
interests
technology
location
remarks
因此,DataGrid
将显示所有记录以及上述字段,我们的目标是将当前单元格的数据显示为工具提示。 标题工具提示可以根据需要进行修改。
添加一个名为 pnlTooltip
的 Panel
,并根据需要格式化以显示为工具提示。
标题工具提示代码
private string GetHeaderTooltipText(int idx)
{
switch (idx)
{
case 0:
return "Employee ID";
case 1:
return "Name of employee";
case 2:
return "Employee Designation";
case 3:
return "Interests";
case 4:
return "Technology";
case 5:
return "Location";
case 6:
return "Remarks";
default:
throw new ArgumentException("Unknown header column index", "Index");
}
}
在 ItemCreated
事件中,添加以下代码,然后在 HTML head
标签中添加 JavaScript。
对于 DataGrid
单元格,添加 ItemDataBound
事件。
希望这能帮到你。 享受编码的乐趣。
private void dgEmployee_ItemCreated(object sender,
System.Web.UI.WebControls.DataGridItemEventArgs e)
{
int idx = 0;
string tip = "";
foreach (TableCell cl in e.Item.Cells)
{
tip = this.GetHeaderTooltipText(idx);
cl.Attributes.Add("onmouseover", "ShowTooltip('" + tip + "');");
cl.Attributes.Add("onmouseout", "HideTooltip();");
idx++;
}
}
<script language=javascript>
function ShowTooltip(name)
{
document.getElementById("pnlTooltip").style.visibility = "visible";
document.getElementById("pnlTooltip").innerText = name;
document.getElementById("pnlTooltip").style.pixelLeft = event.clientX + 10;
document.getElementById("pnlTooltip").style.pixelTop = event.clientY + 10;
}
function HideTooltip()
{
document.getElementById("pnlTooltip").style.visibility = "hidden";
}
</script>
<script language="javascript">
function ShowTooltip(name)
{
document.getElementById("pnlTooltip").style.visibility = "visible";
document.getElementById("pnlTooltip").innerText = name;
document.getElementById("pnlTooltip").style.pixelLeft = event.clientX + 10;
document.getElementById("pnlTooltip").style.pixelTop = event.clientY + 10;
}
function HideTooltip()
{
document.getElementById("pnlTooltip").style.visibility = "hidden";
}
</script>
// The following code to dispaly the tooltip of each cell in the datagrid
private void dgEmployee_ItemDataBound(object sender,
System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if (e.Item.DataItem != null)
{
int idx = 0;
foreach (TableCell tc in e.Item.Cells)
{
switch (idx)
{
case 0:
tc.Attributes.Add("onmouseover", "ShowTooltip('" +
DataBinder.Eval(e.Item.DataItem,
"empid").ToString() + "');");
break;
case 1:
tc.Attributes.Add("onmouseover", "ShowTooltip('" +
DataBinder.Eval(e.Item.DataItem,
"empname").ToString() + "');");
break;
case 2:
tc.Attributes.Add("onmouseover", "ShowTooltip('" +
DataBinder.Eval(e.Item.DataItem,
"designation").ToString() + "');");
break;
case 3:
tc.Attributes.Add("onmouseover", "ShowTooltip('" +
DataBinder.Eval(e.Item.DataItem,
"interests").ToString() + "');");
break;
case 4:
tc.Attributes.Add("onmouseover", "ShowTooltip('" +
DataBinder.Eval(e.Item.DataItem,
"technology").ToString() + "');");
break;
case 5:
tc.Attributes.Add("onmouseover", "ShowTooltip('" +
DataBinder.Eval(e.Item.DataItem,
"location").ToString() + "');");
break;
case 6:
tc.Attributes.Add("onmouseover", "ShowTooltip('" +
DataBinder.Eval(e.Item.DataItem,
"remarks").ToString() + "');");
break;
default:
break;
}
idx ++;
}
e.Item.Attributes.Add("onmouseout", "HideTooltip();");
}
}