2010-04-30 3 views
1

Я хотел бы, чтобы строки моего GridView имели зачеркивание на основе связанного значения данных, называемого IsObsolete. Я пытался это сделать:Стиль GridView, основанный на связанных данных

<RowStyle BackColor="#EFF3FB" Font-Strikeout='<%# Bind('IsObsolete') %>' /> 

Но, очевидно, это не анализируется. Я бы предпочел не делать этого в GridView.DataBound(). Любые другие идеи?

+0

Являются ли ваши столбцы динамически привязаны к сетке? – Myra

+0

@CAbbott: Было бы довольно сложно использовать 'ItemDataBound', тем более, что GridView не имеет этого метода. :) –

+0

@Myra nope, из базы данных с использованием SqlDataSource. Если бы они были, это было бы легче. –

ответ

1

Я делаю это, применяя стиль к событию DataBinding одного из моих элементов управления в шаблоне. Пример:

<asp:GridView ID="grdYourGrid" runat="server" AutoGenerateColumns="False"> 
    <Columns> 
     <asp:TemplateField HeaderText="SomeTitle"> 
      <ItemTemplate> 
       <asp:HyperLink ID="hrefYourLink" runat="server" 
        NavigateUrl="Somepage.aspx?id={0}" 
        OnDataBinding="hrefYourLink_DataBinding"></asp:HyperLink> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

Затем осуществить OnDataBinding событие:

protected void hrefYourLink_DataBinding(object sender, System.EventArgs e) 
{    
    HyperLink link = (HyperLink)(sender); 
    GridViewRow row = (GridViewRow)(link.Parent.Parent); 
    if ((bool)(Eval("IsObsolete")) 
    { 
     row.CssClass = "StrikeThroughStyle"; 
    } 
    link.Text = HttpUtility.HtmlEncode(((int)(Eval("ID"))).ToString()); 
    link.NavigateUrl = string.Format(link.NavigateUrl, Eval("ID").ToString()); 
} 

Это просто быстрый пример с колонкой со ссылкой, которая модифицируется на основе привязки данных, а также, но вы должны быть в состоянии получить суть в том, чтобы настроить его в соответствии с вашими потребностями. Мне нравится делать это на привязке данных, потому что в моем коде aspx я не привязываю строку.

+0

@Matthew Jones вы когда-нибудь это выясняли? Если вам нужна дополнительная помощь, просто оставьте комментарий или отредактируйте свой вопрос, и я увижу, что я могу сделать. – Kelsey

0

Поскольку элемент RowStyle применим ко всей сетке, единственный способ выполнить то, что вы хотите, - это установить TemplateItems для всех столбцов и применить CssClass к каждому столбцу на основе того же значения данных.

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

Вы также можете попробовать использовать функцию форматирования и itemstyles. Кража отрезка кода сверху и смены его:

<% 

public string GetObsoleteClass(string obsolete) 
{ 
    bool obs = Convert.ToBoolean(obsolete); 
    obs ? return "myObsoleteClass" : return "myNotObsoleteClass"; 
} 

%> 
<asp:GridView ID="grdYourGrid" runat="server" AutoGenerateColumns="False"> 
    <Columns> 
     <asp:TemplateField HeaderText="SomeTitle"> 
      <ItemTemplate> 
       <asp:HyperLink ID="hrefYourLink" runat="server" 
        NavigateUrl="Somepage.aspx?id={0}" 
        OnDataBinding="hrefYourLink_DataBinding"></asp:HyperLink> 
      </ItemTemplate> 
       <itemstyle CssClass='<%# Eval("isObsolete") %>'> 
       </itemstyle> 
     </asp:TemplateField> 
     <asp:boundfield 
      sortexpression="LastName" 
      datafield="LastName" 
      headertext="LastName"> 
       <itemstyle CssClass='<%# Eval("isObsolete") %>'> 
       </itemstyle> 
     </asp:boundfield> 
    </Columns> 
</asp:GridView> 
+0

Css можно установить на уровне строки и не нужно настраивать для каждого элемента отдельно, если вы не хотите что-то переопределить. Также я делаю это в элементе DataBinding, потому что обычно у меня есть хотя бы один из этих определенных и редко реализующий любые другие события DataBound, поэтому легко добавить его к первому элементу события DataBinding. Также, если вы хотите покрасить целые строки другим цветом, мои методы работают хорошо. – Kelsey

+0

@ Kelsey - Это то, что он пытается сделать - что-то переопределить. Я согласен с тем, что использование события является предпочтительным методом, но он конкретно указал в вопросе, что он не хочет использовать это событие. –

 Смежные вопросы

  • Нет связанных вопросов^_^