65.9K
CodeProject 正在变化。 阅读更多。
Home

DataGrid 单元格工具提示

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.45/5 (7投票s)

2005年6月3日

1分钟阅读

viewsIcon

98042

downloadIcon

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 将显示所有记录以及上述字段,我们的目标是将当前单元格的数据显示为工具提示。 标题工具提示可以根据需要进行修改。

添加一个名为 pnlTooltipPanel,并根据需要格式化以显示为工具提示。

标题工具提示代码

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();");
  }
}
© . All rights reserved.