2011-12-14 28 views
2

私はVB.netのVisual Studio 2010でWebレポートを作成しています。レポートには表が必要です(添付の画像を参照してください)。 GridViewコンポーネントを使用することを考えています。これは、最も適切なものを選択することだと思います。データベースには、学生のデータとマークがあります。どのような方法でもデータベースを変更することはできません.VBでVisual Studio 2010を使用する必要があります。データに応じて異なる画像をGridViewに表示しますか?

私がする必要があることは、生徒のマークに応じて3つの異なる画像を表示することです。私はPNG形式の画像ファイルを持っていますが、これは柔軟性があります。例えば、70以上はSmile画像になります。 60以上のものがノーマルフェイスになります。 40歳以上は笑顔のない写真になります。私は説明するのが難しいですが、私は私のポイントを得ることを望みます。

私はこれをどのように達成できますか?私はあなたができるように詳細に置かれたこのplsにかなり初心者です。クライアントとサーバーのサイドスクリプトの間に選択肢がある場合、私はサーバーサイドスクリプトを優先します。データソースは柔軟にすることができます(sql、linqなど)。

enter image description here

答えて

2

あなたのGridViewのコントロールにデータをバインドするRowDataBoundを使用する必要があります。

のaspxと分離コードとの完全なサンプル(以上千個の言葉を述べている)、次のとおりです(サンプルデータ付き)

<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 
+1

THanksssss XO XOずっとティム...私は言うことができます..それは "完璧な"例です......私はどこでもこのようなものを見つけることができないので、他の人にとっても役に立つと思っています..もう一度感謝します。 – lawphotog

関連する問題