C# 如何绑定到DatagridView工具提示而不是文本框?

C# 如何绑定到DatagridView工具提示而不是文本框?,c#,winforms,datagridview,C#,Winforms,Datagridview,我想让其中一列的工具提示使用obj.sometext中的文本,而不是为obj.sometext添加新列 dataGridView.DataSource= List<obj>; dataGridView.DataSource=List; 使用DataGridView的CellFormatting事件设置单元格的工具提示。 在自定义对象中,将“tooltip”属性标记为不可浏览,以便指示DataGridView不为该属性生成列 下面是一个小代码示例(设置“名称”列的工具提示): 公

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

  dataGridView.DataSource= List<obj>;
dataGridView.DataSource=List;

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

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

公共类MyObject
{
私有字符串\u名称;
私人互联网;
私有字符串\u工具提示;
公共字符串名
{
获取{return\u name;}
设置{u name=value;}
}
[可浏览(错误)]
公共字符串工具提示
{
获取{return\u tooltip;}
设置{u tooltip=value;}
}
公共信息
{
获取{return\u age;}
设置{u age=value;}
}
}
私有void Form1\u加载(对象发送方、事件参数e)
{
列表=新列表();
列表。添加(新的MyObject)
{Name=“我的名字”,Tooltip=“tooltip1”,年龄=18});
列表。添加(新的MyObject)
{Name=“只是我的另一个名字”,Tooltip=“tooltip2”,年龄=18});
this.dataGridView1.DataSource=list;
}
私有void dataGridView1\u单元格格式(对象发送方,
DataGridViewCellFormattingEventArgs(e)
{
如果((e.ColumnIndex==this.dataGridView1.Columns[“Name”].Index)&&
e、 值!=null)
{
DataGridViewCell单元格=
this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
cell.ToolTipText=
((MyObject)(dataGridView1.Rows[e.RowIndex].DataBoundItem)).Tooltip;
}
}

我建议使用CellToolTiptextRequired事件。调整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;
  }
}
公共类MyObject{
私有字符串\u名称;
私人互联网;
私有字符串\u工具提示;
公共字符串名{
获取{return\u name;}
设置{u name=value;}
}
[可浏览(错误)]
公共字符串工具提示{
获取{return\u tooltip;}
设置{u tooltip=value;}
}
公共信息{
获取{return\u age;}
设置{u age=value;}
}
}
私有void Form1\u加载(对象发送方、事件参数e){
列表=新列表();
列表。添加(新的MyObject)
{Name=“我的名字”,Tooltip=“tooltip1”,年龄=18});
列表。添加(新的MyObject)
{Name=“只是我的另一个名字”,Tooltip=“tooltip2”,年龄=18});
this.dataGridView1.DataSource=list;
}
private void dataGridView1\u CellToolTipTextNeeded(对象发送方,
DataGridViewCellToolTiptextNeedEventArgs(e){
if((e.RowIndex>-1)和&(e.ColumnIndex==this.dataGridView1.Columns[“Name”].Index)){
e、 ToolTipText=
((MyObject)(dataGridView1.Rows[e.RowIndex].DataBoundItem)).Tooltip;
}
}
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;
  }
}