在DatagridView中,按列,我想让列的ToolTipText从同一行中的其他列收集数据?

时间:2013-02-11 03:41:59

标签: c# winforms datagridview datagridviewcolumn

我有一个列有约会开始的时间,有两到三个其他行的约会长度,具体取决于类型。我想设置开始时间的工具提示,以显示该约会的结束时间等于开始时间+ columna.int + columnb.int + columnc.int。是否有可能以相对简单的方式让工具提示显示约会应该结束的时间?它将基于同一行中的另一列。

感谢您的帮助, 斯科特巴顿

2 个答案:

答案 0 :(得分:0)

您可以以编程方式将工具提示设置为可以以编程方式访问的任何内容。 我不确定这是不错的编程习惯。工具提示需要一些时间才能显示。

在下面的示例中,我创建了一些数据集来填充数据网格视图。我没有使用日期时间,只是为第2列和第3列中字符串总和的第一列组成了工具提示。

 DataTable dt = new DataTable();

    private void button1_Click(object sender, EventArgs e)
    {
        //put some data into a table
        int[,] time = new int[,] { { 0, 4, 1 }, { 1, 5, 2 }, { 15, 10, 3 } };

        dt.Columns.Add("x");
        dt.Columns.Add("y");
        dt.Columns.Add("z");

        for (int i = 0; i < 3; i++)
        {
            DataRow dr = dt.NewRow();
            dr[0] = time[i, 0];
            dr[1] = time[i, 1];
            dr[2] = time[i, 2];
            dt.Rows.Add(dr);
        }

       dataGridView1.DataSource = dt;

    }


    private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
    {
        dataGridView1.ShowCellToolTips = true;

        Point loc = dataGridView1.CurrentCellAddress;
        if (loc.X == 0)
        {
            dataGridView1.CurrentCell.ToolTipText = String.Format("{0} ",
                dt.Rows[loc.Y][loc.X + 1].ToString() + dt.Rows[loc.Y][loc.X + 2].ToString());
        }
    }

答案 1 :(得分:0)

您可以在.MouseMove活动和.HitTest Method

中完成任务
    private void dataGridView1_MouseMove(object sender, MouseEventArgs e)
    {
        var hitTest = dataGridView1.HitTest(e.X, e.Y);
        if (hitTest.Type == DataGridViewHitTestType.ColumnHeader)
        {
            List<string> data = new List<string>();
            //var getRows = dataGridView1.Rows.Cast<DataGridViewRow>().ToList();
            //foreach (var item in getRows)
            //    data.Add(item.Cells[1].EditedFormattedValue.ToString());

            if (dataGridView1.CurrentCell == null) return;
            var currentRowIndex = dataGridView1.CurrentCell.RowIndex;
            var getRows = dataGridView1.Rows[currentRowIndex].Cells.Cast<DataGridViewCell>().ToList();
            foreach (var item in getRows)
                data.Add(item.EditedFormattedValue.ToString());

            string[] data1 = data.ToArray();
            dataGridView1.Columns[hitTest.ColumnIndex].ToolTipText = string.Join(", ", data1);
        }
    }