Привязка списка внутри списка к GridView - PullRequest
1 голос
/ 01 декабря 2010

У меня есть класс со всеми различными типами элементов данных, включая список строк. Когда я связываю данные с GridView, я хочу иметь возможность разделить список строк на разные столбцы в GridView. Эти строки больше похожи на флаги, максимум 3 флага. Список может быть пустым, если флаги не применяются, или он может содержать только один или два флага. Как я могу выделить эти флаги в разные столбцы GridView? Нужно ли делать это в событии OnRowDataBound?

Ток, мой код aspx выглядит примерно так. Я хочу иметь возможность изменять ImageUrl элементов управления изображением в зависимости от того, установлен флаг или нет.

<asp:TemplateField HeaderText="Tax" SortExpression="Tax">
    <ItemTemplate>
        <asp:Image ID="imgTax" runat="server" />
    </ItemTemplate>
</asp:TemplateField>

    <asp:TemplateField HeaderText="Compliance" SortExpression="Compliance">
    <ItemTemplate>
        <asp:Image ID="imgCompliance" runat="server" />
    </ItemTemplate>
</asp:TemplateField>

    <asp:TemplateField HeaderText="Accounting" SortExpression="Accounting">
    <ItemTemplate>
        <asp:Image ID="imgAccounting" runat="server" />
    </ItemTemplate>
</asp:TemplateField>

Спасибо!

1 Ответ

0 голосов
/ 01 декабря 2010

Можно ли как-то изменить ваши данные, чтобы превратить эти строки в логические? Такое использование строк производит впечатление запаха кода. Лично я бы превратил эти строки в логические свойства класса, который вы используете в качестве источника данных для вашей сетки, и изменил бы их свойства видимости в разметке, а не возвращался в базу данных, чтобы выбрать эти свойства построчно основа строки.

Независимо от этого, да, вы можете использовать событие RowDataBound следующим образом:

yourGrid_RowDataBound(object sender, EventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        YourClass currentClass = (YourClass) e.Row.DataItem;

        for (int i = 0; i < currentClass.stringFlags.Length; i++)
        {
            string currentFlag = currentClass.stringFlags[i];

            if (currentFlag == "Tax")
            {
                Image imgTax = (Image) e.Row.FindControl("imgTax");
                imgTax.Visbile = true;
            }
            else if (currentFlag == "Compliance")
            {
                Image imgCompliance = (Image) e.Row.FindControl("imgCompliance");
                imgCompliance.Visbile = true;
            }
            else if (currentFlag == "Accounting")
            {
                Image imgAccounting = (Image) e.Row.FindControl("imgAccounting");
                imgAccounting.Visbile = true;
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...