将List内的List绑定到GridView

时间:2010-12-01 18:51:29

标签: c# asp.net data-binding gridview

我有一个包含所有不同类型数据成员的类,包括字符串列表。当我将数据绑定到GridView时,我希望能够将字符串列表分离到GridView中的不同列中。这些字符串更像是标志,最多有3个标志。如果没有适用的标志,则列表可以为空,或者它可以只包含一个或两个标志。如何将这些标志分成不同的GridView列?我是否需要在OnRowDataBound事件中执行此操作?

目前,我的aspx代码看起来像这样。我希望能够根据标志是否被引发来更改Image控件的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 :(得分:0)

您有什么方法可以修改数据以将这些字符串转换为布尔值吗?以这种方式使用字符串会让我感觉像代码味。就个人而言,我会将这些字符串转换为您用作网格数据源的类的布尔属性,并在标记中修改其可见性属性,而不是返回数据库以逐行选择这些属性。行基础。

无论如何,是的,您可以像这样使用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;
            }
        }
    }
}