none
请问怎麽实现选中datagridview显示选中那行的信息 RRS feed

  • 问题

  • 我想应该是用tooltip之类的控件来做的,但是我昨晚研究了一晚都没有很好的实现,我想要的效果,鼠标“点击”datagridview某一行显示那行的信息,包含列标题:

    2011年10月17日 12:13

答案

  • 你好,桦仔:)

    简单来说,就是让你处理“CellToolTipTextNeeded”事件。这个事件是专门用于处理对指定单元格进行ToolTip的设定的。其中“DataGridViewCellToolTipTextNeededEventArgs”是一个参数,包含了整个dataGridView的行列等属性(参考DataGridViewCellToolTipTextNeededEventArgs类)。这样你就可以非常灵活动态地去处理这些ToolTip,具体在某个单元格中指定则出现此对应的Tooltip。

    总而言之,MSDN推荐你这样做:

    void dataGridView1_CellToolTipTextNeeded(object sender,
        DataGridViewCellToolTipTextNeededEventArgs e)
    {
        string newLine = Environment.NewLine;
        if (e.RowIndex > -1)
        {
            DataGridViewRow dataGridViewRow1 = dataGridView1.Rows[e.RowIndex];

            // Add the employee's ID to the ToolTipText.
            e.ToolTipText = String.Format("EmployeeID {0}:{1}",
                dataGridViewRow1.Cells["EmployeeID"].Value, newLine);

            // Add the employee's name to the ToolTipText.
            e.ToolTipText += String.Format("{0} {1} {2}{3}",
                dataGridViewRow1.Cells["TitleOfCourtesy"].Value.ToString(),
                dataGridViewRow1.Cells["FirstName"].Value.ToString(),
                dataGridViewRow1.Cells["LastName"].Value.ToString(),
                newLine);

            // Add the employee's title to the ToolTipText.
            e.ToolTipText += String.Format("{0}{1}{2}",
                dataGridViewRow1.Cells["Title"].Value.ToString(),
                newLine, newLine);

            // Add the employee's contact information to the ToolTipText.
            e.ToolTipText += String.Format("{0}{1}{2}, ",
                dataGridViewRow1.Cells["Address"].Value.ToString(), newLine,
                dataGridViewRow1.Cells["City"].Value.ToString());
            if (!String.IsNullOrEmpty(
                dataGridViewRow1.Cells["Region"].Value.ToString()))
            {
                e.ToolTipText += String.Format("{0}, ",
                    dataGridViewRow1.Cells["Region"].Value.ToString());
            }
            e.ToolTipText += String.Format("{0}, {1}{2}{3} EXT:{4}{5}{6}",
                dataGridViewRow1.Cells["Country"].Value.ToString(),
                dataGridViewRow1.Cells["PostalCode"].Value.ToString(),
                newLine, dataGridViewRow1.Cells["HomePhone"].Value.ToString(),
                dataGridViewRow1.Cells["Extension"].Value.ToString(),
                newLine, newLine);

            // Add employee information to the ToolTipText.
            DateTime HireDate =
                (DateTime)dataGridViewRow1.Cells["HireDate"].Value;
            e.ToolTipText +=
                String.Format("Employee since: {0}/{1}/{2}{3}Manager: {4}",
                HireDate.Month.ToString(), HireDate.Day.ToString(),
                HireDate.Year.ToString(), newLine,
                dataGridViewRow1.Cells["Manager"].Value.ToString());
        }
    }

    参考:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.datagridview.celltooltiptextneeded(v=VS.80).aspx


    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年10月18日 2:54
    版主
  • 你的意思是不用dataGridView1_CellFormatting事件,应该用你的dataGridView1_CellToolTipTextNeeded事件?

    如果是绑定ToolTip,微软推荐使用CellToolTipNeeded
    CellFormatting一般用于对某些特定的Cell呈现不同的样式展示使用,不是专门用于处理ToolTip的。
    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年10月19日 1:12
    版主

全部回复

  • 如何:为 Windows 窗体 DataGridView 控件中的单个单元格添加工具提示

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2011年10月17日 20:43
    版主
  • MSDN里说的:将 DataGridView 控件绑定到外部数据源或通过实现虚拟模式提供自己的数据源时,可能会遇到性能问题。 为避免在处理大量数据时损失性能,请处理 CellToolTipTextNeeded 事件而不是设置多个单元格的 ToolTipText 属性。 处理此事件时,获取单元格的 ToolTipText 属性的值会引发该事件并按事件处理程序中的指定返回DataGridViewCellToolTipTextNeededEventArgs.ToolTipText 属性的值

    是什么意思?不是很明白?请大侠指点

    2011年10月18日 1:38
  • 你好,桦仔:)

    简单来说,就是让你处理“CellToolTipTextNeeded”事件。这个事件是专门用于处理对指定单元格进行ToolTip的设定的。其中“DataGridViewCellToolTipTextNeededEventArgs”是一个参数,包含了整个dataGridView的行列等属性(参考DataGridViewCellToolTipTextNeededEventArgs类)。这样你就可以非常灵活动态地去处理这些ToolTip,具体在某个单元格中指定则出现此对应的Tooltip。

    总而言之,MSDN推荐你这样做:

    void dataGridView1_CellToolTipTextNeeded(object sender,
        DataGridViewCellToolTipTextNeededEventArgs e)
    {
        string newLine = Environment.NewLine;
        if (e.RowIndex > -1)
        {
            DataGridViewRow dataGridViewRow1 = dataGridView1.Rows[e.RowIndex];

            // Add the employee's ID to the ToolTipText.
            e.ToolTipText = String.Format("EmployeeID {0}:{1}",
                dataGridViewRow1.Cells["EmployeeID"].Value, newLine);

            // Add the employee's name to the ToolTipText.
            e.ToolTipText += String.Format("{0} {1} {2}{3}",
                dataGridViewRow1.Cells["TitleOfCourtesy"].Value.ToString(),
                dataGridViewRow1.Cells["FirstName"].Value.ToString(),
                dataGridViewRow1.Cells["LastName"].Value.ToString(),
                newLine);

            // Add the employee's title to the ToolTipText.
            e.ToolTipText += String.Format("{0}{1}{2}",
                dataGridViewRow1.Cells["Title"].Value.ToString(),
                newLine, newLine);

            // Add the employee's contact information to the ToolTipText.
            e.ToolTipText += String.Format("{0}{1}{2}, ",
                dataGridViewRow1.Cells["Address"].Value.ToString(), newLine,
                dataGridViewRow1.Cells["City"].Value.ToString());
            if (!String.IsNullOrEmpty(
                dataGridViewRow1.Cells["Region"].Value.ToString()))
            {
                e.ToolTipText += String.Format("{0}, ",
                    dataGridViewRow1.Cells["Region"].Value.ToString());
            }
            e.ToolTipText += String.Format("{0}, {1}{2}{3} EXT:{4}{5}{6}",
                dataGridViewRow1.Cells["Country"].Value.ToString(),
                dataGridViewRow1.Cells["PostalCode"].Value.ToString(),
                newLine, dataGridViewRow1.Cells["HomePhone"].Value.ToString(),
                dataGridViewRow1.Cells["Extension"].Value.ToString(),
                newLine, newLine);

            // Add employee information to the ToolTipText.
            DateTime HireDate =
                (DateTime)dataGridViewRow1.Cells["HireDate"].Value;
            e.ToolTipText +=
                String.Format("Employee since: {0}/{1}/{2}{3}Manager: {4}",
                HireDate.Month.ToString(), HireDate.Day.ToString(),
                HireDate.Year.ToString(), newLine,
                dataGridViewRow1.Cells["Manager"].Value.ToString());
        }
    }

    参考:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.datagridview.celltooltiptextneeded(v=VS.80).aspx


    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年10月18日 2:54
    版主
  • 你的意思是不用dataGridView1_CellFormatting事件,应该用你的dataGridView1_CellToolTipTextNeeded事件?
    2011年10月18日 13:34
  • 你的意思是不用dataGridView1_CellFormatting事件,应该用你的dataGridView1_CellToolTipTextNeeded事件?

    如果是绑定ToolTip,微软推荐使用CellToolTipNeeded
    CellFormatting一般用于对某些特定的Cell呈现不同的样式展示使用,不是专门用于处理ToolTip的。
    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年10月19日 1:12
    版主