2010-01-15 2 views
0

У меня есть datagrid в asp.net и vb.net, и я хотел бы показать статус элемента определенной строки с двумя возможными значками.Условное изображение в datagrid

Что было бы самым простым способом?

У меня есть функция, которая проверяет валидацию и возвращает логическое значение, которое использует некоторые поля datagrid.

(вы можете ответить на C#)

ответ

1

Вы хотите, чтобы решить, какое изображение для загрузки на странице с фоновым кодом.

protected void Page_Init(object sender, EventArgs e) 
{ 
    // first you have to hook up the event 
    datagrid.ItemDataBound += datagrid_ItemDataBound; 
} 

// once the grid is being bound, you have to set the status image you want to use 
private void datagrid_ItemDataBound(object sender, DataGridItemEventArgs e) 
{ 
    if(e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) { 
    Image img = (Image)e.Item.FindControl("ImageControlName"); 
    if(ValidationFunction()) { 
     img.ImageUrl = "first_status_image.jpg"; 
    } 
    else 
    { 
     img.ImageUrl = "second_status_image.jpg"; 
    } 
    } 
} 
+0

я не понял «ListItemType.AlternatingItem» – Marcelo

+0

AlternatingItem, как обычный пункт за исключением того, он встречается с любой другой строкой данных. Это удобно, если вы хотите, чтобы CSS-стиль чередовал строки с разными стилями. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listitemtype.aspx – ddc0660

1

Я должен сказать вам лучше всего сделать это с TemplateColumn и некоторый код:

<asp:DataGrid runat="server" ID="DataGrid1" AutoGenerateColumns="false"> 
    <Columns> 
     <asp:TemplateColumn> 
      <ItemTemplate> 
       <asp:Image runat="server" ID="RowImage" /> 
      </ItemTemplate> 
     </asp:TemplateColumn> 
    </Columns> 
</asp:DataGrid> 

Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound 

    Dim imageControl As Image 

    If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then 
     imageControl = DirectCast(e.Item.FindControl("RowImage"), Image) 

     If MyValidationFunction() Then 
      imageControl.ImageUrl = "icon1.gif" 
     Else 
      imageControl.ImageUrl = "icon2.gif" 

     End If 
    End If 

End Sub