2010-12-01 86 views
1

我有一个包含所有不同类型的数据成员的类,包括一个字符串列表。当我将数据绑定到GridView时,我希望能够将字符串列表分离到GridView中的不同列中。这些字符串更像标志,最多有3个标志。如果没有标志适用,该列表可以是空的,或者它可以仅包含一个或两个标志。我怎样才能将这些标记分离出来,放到不同的GridView列中?我需要在OnRowDataBound事件中执行它吗?将列表内部的列表绑定到GridView

当前,我的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

所以,你需要以编程方式显示/隐藏基于标记的存在,这些图片? – jwiscarson 2010-12-01 18:55:16

回答

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; 
      } 
     } 
    } 
} 
+0

谢谢!这帮了很多。最初这些字符串是一个不同图层中的枚举,但由于某种原因,该图层和GUI之间的字符串变成了字符串。我会看看我能做些什么来改变这一点。 – mhenry 2010-12-01 20:07:11