2010-12-01 3 views
1

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

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

<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

Спасибо! Это очень помогло. Первоначально строки представляют собой перечисление в другом слое, но по какой-то причине между этим слоем и графическим интерфейсом они меняются на строки. Я посмотрю, что я могу сделать, чтобы изменить это. – mhenry 2010-12-01 20:07:11