获取GridView TemplateField的数据

此博文是教你怎样去获取GridView TemplateField的数据。GridView TemplateField如下写法,没有其它附加控件如Label或Literal等显示字段值

<asp:TemplateField HeaderText="Price">
     <ItemTemplate>
           <%Eval("Price"%>
     </ItemTemplate>
</asp:TemplateField>

 

要求是Price低于1000元的显示绿色,大于等于1000元以及小于等2000元的显示蓝色,大于2000元显示红色。

网页运行效果:

 

源代码,

Monitors.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for Monitors
/// </summary>
namespace Insus.NET
{
    public class Monitors
    {
        private string _Brand;
        private string _Model;
        private decimal _Price;

        public string Brand
        {
            get { return _Brand; }
            set { _Brand = value; }
        }
        public string Model
        {
            get { return _Model; }
            set { _Model = value; }
        }
        public decimal Price
      {
            get { return _Price; }
            set { _Price = value; }
        }

        public Monitors(string brand,string model, decimal price)
        {
            this._Brand = brand;
            this._Model = model;
            this._Price = price;
        }
    }
}

 

Default.aspx:

Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:GridView ID="GridViewMonitor" runat="server" AutoGenerateColumns="false" Width="35%" OnRowDataBound="GridViewMonitor_RowDataBound">
                <Columns>
                    <asp:TemplateField HeaderText="Brand">
                        <ItemTemplate>
                            <%Eval("Brand"%>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Model">
                        <ItemTemplate>
                            <%Eval("Model"%>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Price">                       
                        <ItemTemplate>
                            <%Eval("Price"%>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
        </div>
    </form>
</body>
</html>

 

Default.aspx.cs:

Default.aspx.cs
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Insus.NET;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            Data_Binding();
    }

    private void Data_Binding()
    {
        List<Monitors> m = new List<Monitors>();
        m.Add(new Monitors("三星""S19A330BW", 859m));
        m.Add(new Monitors("AOC""e2343F", 1020m));
        m.Add(new Monitors("戴尔""U2412M", 2070m));
        m.Add(new Monitors("飞利浦""227E3QPHSU/93", 1099m));
        m.Add(new Monitors("苹果""MC007", 8600m));
        m.Add(new Monitors("LG""E2242C-BN", 899m));
        m.Add(new Monitors("明基""VW2420H", 1699m));
        m.Add(new Monitors("优派""VX2370S-LED", 1190m));

        this.GridViewMonitor.DataSource = m;
        this.GridViewMonitor.DataBind();
    }

    protected void GridViewMonitor_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        //获取列索引,并存入ViewState
        if (e.Row.RowType == DataControlRowType.Header)
            for (int i = 0; i < e.Row.Cells.Count; i++)
            {
                if (e.Row.Cells[i].Text.Replace ("\r\n","").Trim() == "Price")
                {
                    ViewState["cellIndex"] = i;
                    break;
                }
            }

        //如果不是DataRow,将不执行
        if (e.Row.RowType != DataControlRowType.DataRow) return;

        //获取行记录的价格
        decimal price = Convert.ToDecimal(((Monitors)e.Row.DataItem).Price);

        //默认价格为显示蓝色(大于等于1000或者小于等于2000)
        SetForeColor(e, "blue");

        //价格小于1000显示为绿色
        if (price < 1000m)
            SetForeColor(e, "green");

        //价格大于2000显示为红色
        if (price > 2000m)
            SetForeColor(e, "red");
    }

    //设置价格前景色
    private void SetForeColor(GridViewRowEventArgs e, string color)
    {
        e.Row.Cells[(int)ViewState["cellIndex"]].ForeColor = Color.FromName(color);
    }
}

 

 

posted @ 2012-10-24 17:04  Insus.NET  阅读(3435)  评论(0编辑  收藏  举报