динамически связывать gridview с меткой и всплывающей подсказкой - PullRequest
1 голос
/ 02 сентября 2011

Я хочу связать gridview с данными в коде позади, и я хочу добавить метку в каждую ячейку в gridview и отобразить всплывающую подсказку на метке их значений ... Я не получаю подсказку .. (Я хочу показать каждое место этой стадии) !!! и хочу всплывающую подсказку и мою сцену может измениться, поэтому я хочу динамически)

помогите мне .. мой код здесь

// Вид сетки привязывается при загрузке страницы это дает мне индекс был вне диапазона. Должен быть неотрицательным и меньшим, чем размер коллекции. Имя параметра: индекс

 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{


            for (int i = 0; i < table.Rows.Count; i++)
            {
                for (int j = 0; j < table.Columns.Count; j++)
                {


                    Label lbl = new Label();
                    lbl.Text = GridView1.DataKeys[e.Row.RowIndex]["LabelText"].ToString();
                    lbl.ToolTip = GridView1.DataKeys[e.Row.RowIndex]["TooltipText"].ToString();
                    e.Row.Cells[0].Controls.Add(lbl);

                }

            }

}

Ответы [ 3 ]

1 голос
/ 02 сентября 2011

Вам необходимо добавить метку в ячейку в каждой строке GridView.Я бы предложил сохранить информацию для метки и всплывающей подсказки в коллекции ключей данных и добавить метку в событие OnRowDataBound.

Опция 1:

EDIT : добавлена ​​разметка, показывающая, как добавить ключи данных

Определите ключи данных, как в примере ниже.Замените LabelTextColumn и TooltipTextColumn фактическим значением, которое вы хотите использовать для текста и всплывающей подсказки.Также обратите внимание, как здесь установлен обработчик события OnRowDataBound:

<asp:GridView ID="GridView1" runat="server" DataKeyNames="LabelTextColumn, TooltipTextColumn" OnRowDataBound="GridView1_RowDataBound" ...>
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
        ...
    </Columns>
</asp:GridView>

EDIT : исправлена ​​ошибка с использованием RowIndex для получения ключей данных

, поскольку вы находитесь в RowDataBoundEventВам не нужно использовать цикл.Событие RowDataBound вызывается из цикла, так как каждая строка привязана к базе данных, поэтому у вас есть доступ к текущей строке с помощью e.Row

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    //we don't need this anymore, because the label is already in the row
    //Label lbl = new Label(); 

    //get the label from the row
    Label lbl = (Label)e.Row.FindControl("Label1");

    --set the text and tooltip text using the datakeys specified in the markup
    lbl.Text = grd.DataKeys[e.Row.RowIndex]["LabelTextColumn"].ToString();
    lbl.ToolTip = grd.DataKeys[e.Row.RowIndex]["TooltipTextColumn"].ToString();

    //we don't need this anymore either, because the label is already added to the row
    //e.Row.Cells[0].Controls.Add(lbl);
}

Опция 2: Использование inlineФункция Eval () для установки текста и текста всплывающей подсказки

<asp:GridView ID="GridView1" runat="server"  ...>
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%#Eval("LabelTextColumn")' Tooltip='<%#Eval("TooltipTextColumn")%>' />
            </ItemTemplate>
        </asp:TemplateField>
        ...
    </Columns>
</asp:GridView>
0 голосов
/ 02 сентября 2011

Реализуйте это в обработчике для Gridview.RowDataBound Event .

0 голосов
/ 02 сентября 2011

Когда вы связываете данные, он уничтожает текущую коллекцию элементов управления и заполняется указанным источником данных.

Для вашего конкретного приложения вам также необходимо присоединиться к событию GridView.RowCreated, а затем вставить нужную подсказку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...