Как привязать DatagridView Tooltip вместо текстового поля? - PullRequest
1 голос
/ 20 марта 2012

Я хочу, чтобы подсказка для одного из столбцов использовала текст из obj.sometext вместо добавления нового столбца для obj.sometext.

  dataGridView.DataSource= List<obj>;

Ответы [ 2 ]

3 голосов
/ 27 ноября 2015

Я предлагаю использовать событие CellToolTipTextNeeded. Корректировка примера кода Ганса дает

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;
  }
}
2 голосов
/ 20 марта 2012

Используйте событие CellFormating DataGridView, чтобы установить всплывающую подсказку для ячейки.В вашем пользовательском объекте пометьте свойство «подсказка» как недоступное для просмотра, чтобы дать указание 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;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...