Отображение разных картинок в GridView в зависимости от данных? - PullRequest
2 голосов
/ 14 декабря 2011

Я создаю веб-отчет в Visual Studio 2010 на VB.net. В отчете должна отображаться таблица (см. Прикрепленное изображение). Я думаю использовать компонент GridView, который я считаю наиболее подходящим для выбора. В базе данных есть данные и оценки студентов. Я никак не могу изменить базу данных, и мне нужно использовать Visual Studio 2010 с VB.

Что мне нужно сделать, это показать 3 разные картинки (например), зависящие от оценок студента. Я получил файл изображений в формате PNG, но он может быть гибким. Например, более 70 будет изображением улыбки. старше 60 будет нормальным лицом. и за 40 будет картина без улыбки. Мне трудно объяснить, но я надеюсь, что вы поняли мою точку зрения.

Так что, пожалуйста, посоветуйте мне, как мне этого добиться. Я довольно новичок в этом, пожалуйста, изложите как можно подробнее. если есть выбор между клиентом и сценарием на стороне сервера, я предпочитаю сценарий на стороне сервера. Источник данных может быть гибким (sql, linq или что-нибудь).

enter image description here

1 Ответ

2 голосов
/ 14 декабря 2011

Вы должны использовать RowDataBound для привязки данных к элементам управления в GridView.

Ниже приведен полный пример с aspx и codebehind (говорит более тысячи слов):

<style type="text/css">
    .GridViewRowStyle
    {
        background-color: #A0CFEC;
        color:Blue;
    }
    .GridViewAlternatingRowStyle
    {
        background-color:White;
        color:#15317E;
    }
    .GridViewHeaderStyle
    {
        background-color:White;
        color:#15317E;
    }
</style>

<asp:GridView ID="GridStudents" AutoGenerateColumns="false" GridLines="None" runat="server">
    <RowStyle  CssClass="GridViewRowStyle" />
    <AlternatingRowStyle CssClass="GridViewAlternatingRowStyle" />
    <HeaderStyle CssClass="GridViewHeaderStyle" />
    <Columns>
        <asp:TemplateField HeaderText="Student">
           <ItemTemplate>
                <asp:label runat="server" ID="LblStudent" Text='<%# Bind("Student") %>'></asp:label>
            </ItemTemplate>
        </asp:TemplateField>
         <asp:TemplateField HeaderText="Mark">
           <ItemTemplate>
                <asp:label runat="server" ID="LblMark" Text='<%# Bind("Mark") %>'></asp:label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="">
           <ItemTemplate>
                <asp:Image runat="server" ID="ImgSmiley" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

Кодовый код (с данными выборки):

Private Sub GridStudents_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridStudents.RowDataBound
    Select Case e.Row.RowType
        Case DataControlRowType.DataRow
            Dim row = DirectCast(e.Row.DataItem, DataRowView)
            Dim ImgSmiley = DirectCast(e.Row.FindControl("ImgSmiley"), Image)
            Select Case DirectCast(row("Mark"), Int32)
                Case Is < 50
                    ImgSmiley.ImageUrl = "~/Images/Smiley_Grim.png"
                    ImgSmiley.ToolTip = "bad"
                Case Is < 70
                    ImgSmiley.ImageUrl = "~/Images/Smiley_Def.png"
                    ImgSmiley.ToolTip = "ok"
                Case Else
                    ImgSmiley.ImageUrl = "~/Images/Smiley_Laugh.png"
                    ImgSmiley.ToolTip = "fine"
            End Select
    End Select
End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not IsPostBack Then
        BindData()
    End If
End Sub

Private Sub BindData()
    Dim tblStudent As New DataTable("Students")
    Dim colStudent = New DataColumn("Student", GetType(String))
    Dim colMark As New DataColumn("Mark", GetType(Int32))
    tblStudent.Columns.Add(colStudent)
    tblStudent.Columns.Add(colMark)

    Dim newRow = tblStudent.NewRow
    newRow("Student") = "Tom"
    newRow("Mark") = 70
    tblStudent.Rows.Add(newRow)
    newRow = tblStudent.NewRow
    newRow("Student") = "Bob"
    newRow("Mark") = 40
    tblStudent.Rows.Add(newRow)
    newRow = tblStudent.NewRow
    newRow("Student") = "Danny"
    newRow("Mark") = 60
    tblStudent.Rows.Add(newRow)
    newRow = tblStudent.NewRow
    newRow("Student") = "Sussie"
    newRow("Mark") = 40
    tblStudent.Rows.Add(newRow)

    GridStudents.DataSource = tblStudent
    GridStudents.DataBind()
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...