我有一个包含所有不同类型数据成员的类,包括字符串列表。当我将数据绑定到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>
谢谢!
答案 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;
}
}
}
}