Подсказка в gridview с использованием словарного метода - PullRequest
1 голос
/ 15 декабря 2009

Вечер всех.

У меня есть следующий код, который мне нужно изучить - в основном я цепляюсь за соломинку здесь. У меня есть сетка, которой я бы хотел назначить всплывающие подсказки.

  protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.Header)
        {
            foreach (TableCell cell in e.Row.Cells)
            {
                foreach (System.Web.UI.Control ctl in cell.Controls)
                {
                    if (ctl.GetType().ToString().Contains("DataControlLinkButton"))
                    {
                        Dictionary<String, String> headerTooltips = new Dictionary<String, String>();
                        headerTooltips["Product ID"] = "A unique product ID";
                        headerTooltips["Product Description"] = "Description of product";

                        String headerText = cell.Text; 
                        cell.Attributes.Add("title", headerTooltips[headerText]);

                    }
                }
            }
        }

    }

По сути, я пытаюсь достичь подсказки, которая появляется в заголовке каждого столбца (т.е. идентификатор продукта и описание продукта).

Однако, когда я использую приведенный выше код, я получаю следующее сообщение об ошибке «Указанный ключ отсутствует в словаре». Это появляется на

cell.Attributes.Add("title", headerTooltips[headerText]);

линия.

Может кто-то указать на ошибку в моих отношениях? Спасибо за любую помощь или предложения.

1 Ответ

1 голос
/ 15 декабря 2009

Ошибка вызвана тем, что вы не добавили в свой словарь запись, соответствующую значению cell.Text. Единственные ключи, которые содержит ваш словарь - это «Идентификатор продукта» и «Описание продукта», поэтому, если у вас нет ячеек, которые на самом деле содержат этот текст, он всегда будет неудачным. Вы могли бы сделать это:

if (headerTooltips.ContainsKey(headerText))
{
    cell.Attributes.Add("title", headerTooltips[headerText]);
}

Что выводит вас за пределы исключения, но не думайте, что оно делает то, что вы пытаетесь достичь.

Редактировать:

Вы просто хотите, чтобы в качестве всплывающей подсказки отображался текст cell.Text? Если да, то сделайте это:

// This is only replacing the foreach part, the rest of your code is still valid
foreach (System.Web.UI.Control ctl in cell.Controls)
{
    if (ctl.GetType().ToString().Contains("DataControlLinkButton"))
    {
        cell.Attributes.Add("title", cell.Text);
    }
}
...