如何绑定到DatagridView Tooltip而不是Textbox

本文关键字:Tooltip Textbox DatagridView 何绑定 绑定 | 更新日期: 2023-09-27 18:28:20

我想让其中一列的工具提示使用obj.sometext中的文本,而不是为obj.someext添加新列。

  dataGridView.DataSource= List<obj>;

如何绑定到DatagridView Tooltip而不是Textbox

我建议使用CellToolTipTextNeeded事件。调整Hans的代码示例生成

public class MyObject {
    private string _name;
    private int _age;
    private string _tooltip;
    public string Name {
        get { return _name; }
        set { _name = value; }
    }
    [Browsable(false)]
    public string Tooltip {
        get { return _tooltip; }
        set { _tooltip = value; }
    }
    public int Age {
        get { return _age; }
        set { _age = value; }
    }
}
private void Form1_Load(object sender, EventArgs e) {
   List<MyObject> list = new List<MyObject>();
   list.Add(new MyObject 
            { Name = "my name", Tooltip="tooltip1", Age = 18 });
   list.Add(new MyObject 
            { Name = "just my other name", Tooltip="tooltip2", Age = 18});                                    
   this.dataGridView1.DataSource = list;
}
private void dataGridView1_CellToolTipTextNeeded(object sender, 
  DataGridViewCellToolTipTextNeededEventArgs e)   {
  if ((e.RowIndex > -1) && (e.ColumnIndex == this.dataGridView1.Columns["Name"].Index)) {
    e.ToolTipText = 
           ((MyObject)(dataGridView1.Rows[e.RowIndex].DataBoundItem)).Tooltip;
  }
}

使用DataGridViewCellFormating事件设置单元格的工具提示。在自定义对象中,将"工具提示"属性标记为不可浏览,以指示DataGridView不为该属性生成列。

下面是一个小代码示例(设置"名称"列的工具提示):

public class MyObject
{
    private string _name;
    private int _age;
    private string _tooltip;
    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }
    [Browsable(false)]
    public string Tooltip
    {
        get { return _tooltip; }
        set { _tooltip = value; }
    }
    public int Age
    {
        get { return _age; }
        set { _age = value; }
    }
}
private void Form1_Load(object sender, EventArgs e)
{
   List<MyObject> list = new List<MyObject>();
   list.Add(new MyObject 
            { Name = "my name", Tooltip="tooltip1", Age = 18 });
   list.Add(new MyObject 
            { Name = "just my other name", Tooltip="tooltip2", Age = 18});
   this.dataGridView1.DataSource = list;
}
private void dataGridView1_CellFormatting(object sender, 
                                          DataGridViewCellFormattingEventArgs e)
{
  if ((e.ColumnIndex == this.dataGridView1.Columns["Name"].Index) && 
       e.Value != null)
  {
    DataGridViewCell cell = 
           this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
     cell.ToolTipText = 
           ((MyObject)(dataGridView1.Rows[e.RowIndex].DataBoundItem)).Tooltip;
  }
}