none
GridView添加背景色的问题--01 RRS feed

  • 问题

  •     我使用SQL数据库和Asp.Net编写了一个网页(主要是用GridView),在网页上直接输入内容,便可批量修改相应的内容。现在需要添加一个功能:给某些数据添加不同的背景色并保存下来,下次打开仍能看到上次保存的背景色。

        第一步就是要建立一个保存背景色的表(ColorTable)。
        具体的说:

        1.首先我在SQL数据库中有个RentTableA,中间有5个字段,分别是ContractNumberID(主键,int)、ContractNumber(nvarchar(20))、LeaseDateFrom(date)、MonthRent(int)、MonthRentPaid(int),我要给最后两个字段MonthRent和MonthRentPaid添加上背景色。
        2.建立一个保存颜色的表ColorTable,有3个字段,分别是:CID(记录对应RentTableAu中相应的ContractNumberID值)、ColumnName(对应RentTableAu中某列的列名)、Color(记录背景色)


    图1清楚的表达了RentTableA和ColorTable之间的关系。


    遇到的问题是:
        1.ColorTable中的CID很好取值,而ColumnName我就不知道该怎么取值了,因为ColumnName的值是个RentTableA中某个字段名称,如何取RentTableA某一列的列名来做ColumnName的值确实从来没遇到过。要如何写这种代码呢?我甚至不知道这种代码是改用SQL写好还是在后台用C#写好!
        2.ColorTable中的字段Color应该用什么类型比较好,难道是nvarchar()?

    -------------------------------------图1------------------------------------

        

    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2012年10月19日 9:17

全部回复

  • GridView有一个RowDataBound事件,在这个事件中,可以得到RentTableAu的列名,然后去查询ColorTable表,找到对应的颜色。然设置到GridView中即可

    【孟子E章】

    2012年10月21日 2:42
    版主
  •     能具体点么?我是初学者,您的提示我懂了,却无从下手。。。

    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2012年10月21日 6:29
  • 根据你的描述根据ContractNumberID的值就可以从ColorTable表中取出MonthRent和MonthRentPaid两个字段对应的颜色,在GridView的RowDataBound事件中的代码类似下面代码:

           protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
           {
               if (e.Row.RowType != DataControlRowType.Header)
               {
                   string id = e.Row.Cells[0].Text;
                   //根据id到ColorTable表中取出MonthRent和MonthRentPaid这两个字段对应的颜色
                   //string colorMonthRent=...
                   //string colorMonthRentPaid=...
                   //假设MonthRent和MonthRentPaid对应的列索引分别为2和3
                   e.Row.Cells[2].Attributes.Add("style", "background-Color:" + colorMonthRent + "");
                   e.Row.Cells[3].Attributes.Add("style", "background-Color:" + colorMonthRentPaid + "");
               }
           }


    博客:http://blog.fwhyy.com

    2012年10月21日 13:28
  •   我建立了记录普通数据的RentTableA,同时也建立了显示RentTableA内容的GridView所含单元格背景色的ColorTable,具体可见图1.

        问题1:首先我用“Response.Write(id);”查看了一下id的值,是12345.这个值是五行数据的ContractNumberIDC,没错,但是应该还要有个循环吧?!以便每一个ContractNumberIDC对应一个数字。
        然后我写了从ColorTable中读取对应背景色的代码(使用了LinqToSQL),出现了如图1所示错误。这个该什么改正呢?(我估计是id为12345)

        问题2见图1的注释,有时候ColorTable中有null值,该怎么处理最科学,难道是像我那样给个white???

        后附完整的前台代码1和后台代码2!(代码的主要功能是:将GridView各列转换为模板,可以批量更新,还可以记录并显示背景色)

    ---------------------------------------图1-----------------------------------------------

    ------------------------------------------前台代码1-------------------------------------------

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Color01.aspx.cs" Inherits="Try_Color01" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <style type="text/css">
            .style1
            {
                width: 100%;
            }
        </style>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        
            <table cellpadding="0" cellspacing="0" class="style1">
                <tr>
                    <td><asp:Button ID="Button_Update" runat="server" Text="更新" 
                            onclick="Button_Update_Click" />
                        <asp:GridView ID="GridView_Search" runat="server" AutoGenerateColumns="False" 
                            DataKeyNames="ContractNumberID" DataSourceID="SqlDataSource_Search" 
                            onrowdatabound="GridView_Search_RowDataBound">
                            <Columns>
                                <asp:BoundField DataField="ContractNumberID" HeaderText="ContractNumberID" 
                                    InsertVisible="False" ReadOnly="True" SortExpression="ContractNumberID" />
                                <asp:TemplateField HeaderText="ContractNumber" SortExpression="ContractNumber">
                                    <ItemTemplate>
                                        <asp:TextBox ID="TextBox_ContractNumber" runat="server" 
                                            Text='<%# Bind("ContractNumber") %>'></asp:TextBox>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="LeaseDateFrom" SortExpression="LeaseDateFrom">
                                    <ItemTemplate>
                                        <asp:TextBox ID="TextBox_LeaseDateFrom" runat="server" 
                                            Text='<%# Bind("LeaseDateFrom") %>'></asp:TextBox>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="Month" SortExpression="Month">
                                    <ItemTemplate>
                                        <asp:TextBox ID="TextBox_Month" runat="server" Text='<%# Bind("Month") %>'></asp:TextBox>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="MonthRent" SortExpression="MonthRent">
                                    <ItemTemplate>
                                        <asp:TextBox ID="TextBox_MonthRent" runat="server" 
                                            Text='<%# Bind("MonthRent") %>'></asp:TextBox>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="MonthRentPaid" SortExpression="MonthRentPaid">
                                    <ItemTemplate>
                                        <asp:TextBox ID="TextBox_MonthRentPaid" runat="server" 
                                            Text='<%# Bind("MonthRentPaid") %>'></asp:TextBox>
                                    </ItemTemplate>
                                </asp:TemplateField>
                            </Columns>
                        </asp:GridView>
                        
                    </td>
                    
                </tr>
                <tr>
                    <td>
                        <asp:SqlDataSource ID="SqlDataSource_Search" runat="server" 
                            ConnectionString="<%$ ConnectionStrings:长铁物业公司资产数据库ConnectionString %>" 
                            DeleteCommand="DELETE FROM [RentTableA] WHERE [ContractNumberID] = @ContractNumberID" 
                            InsertCommand="INSERT INTO [RentTableA] ([ContractNumber], [LeaseDateFrom], [Month], [MonthRent], [MonthRentPaid]) VALUES (@ContractNumber, @LeaseDateFrom, @Month, @MonthRent, @MonthRentPaid)" 
                            SelectCommand="SELECT [ContractNumberID], [ContractNumber], [LeaseDateFrom], [Month], [MonthRent], [MonthRentPaid] FROM [RentTableA]" 
                            
                            
                            
                            UpdateCommand="UPDATE [RentTableA] SET [ContractNumber] = @ContractNumber, [LeaseDateFrom] = @LeaseDateFrom, [Month] = @Month, [MonthRent] = @MonthRent, [MonthRentPaid] = @MonthRentPaid WHERE [ContractNumberID] = @ContractNumberID">
                            <DeleteParameters>
                                <asp:Parameter Name="ContractNumberID" Type="Int32" />
                            </DeleteParameters>
                            <UpdateParameters>
                                <asp:Parameter Name="ContractNumber" Type="String" />
                                <asp:Parameter Name="LeaseDateFrom" DbType="Date" />
                                <asp:Parameter Name="Month" DbType="Date" />
                                <asp:Parameter Name="MonthRent" Type="Int32" />
                                <asp:Parameter Name="MonthRentPaid" Type="Int32" />
                                <asp:Parameter Name="ContractNumberID" Type="Int32" />
                            </UpdateParameters>
                            <InsertParameters>
                                <asp:Parameter Name="ContractNumber" Type="String" />
                                <asp:Parameter Name="LeaseDateFrom" DbType="Date" />
                                <asp:Parameter Name="Month" DbType="Date" />
                                <asp:Parameter Name="MonthRent" Type="Int32" />
                                <asp:Parameter Name="MonthRentPaid" Type="Int32" />
                            </InsertParameters>
                        </asp:SqlDataSource>
                    </td>
                    
                </tr>
                </table>
        
        </div>
        </form>
    </body>
    </html>


    ---------------------------------------------后台代码2------------------------------------------------------

    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Data.SqlClient;
    
    public partial class Try_Color01 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            
        }
        protected void Button_Update_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < GridView_Search.Rows.Count; i++)
            {
                GridViewRow row = GridView_Search.Rows[i];
                SqlDataSource_Search.UpdateParameters[0].DefaultValue = ((TextBox)row.Cells[0].FindControl("TextBox_ContractNumber")).Text;
                SqlDataSource_Search.UpdateParameters[1].DefaultValue = ((TextBox)row.Cells[0].FindControl("TextBox_LeaseDateFrom")).Text;
                SqlDataSource_Search.UpdateParameters[2].DefaultValue = ((TextBox)row.Cells[0].FindControl("TextBox_Month")).Text;
                SqlDataSource_Search.UpdateParameters[3].DefaultValue = ((TextBox)row.Cells[0].FindControl("TextBox_MonthRent")).Text;
                SqlDataSource_Search.UpdateParameters[4].DefaultValue = ((TextBox)row.Cells[0].FindControl("TextBox_MonthRentPaid")).Text;
                SqlDataSource_Search.UpdateParameters[5].DefaultValue = GridView_Search.DataKeys[i].Values[0].ToString();
                SqlDataSource_Search.Update();
            }
            
        }
    
        protected void GridView_Search_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            DataClassesDataContext db = new DataClassesDataContext();
            
                if (e.Row.RowType != DataControlRowType.Header)
                {
                
                    string id = e.Row.Cells[0].Text;
                    Response.Write(id);
                    string colorMonthRent;
                    string colorMonthRentPaid;
                    ColorTable myColor = db.ColorTable.Where(c => (c.ContractNumberIDC) == (Convert.ToInt32(id))).FirstOrDefault();
                    if (myColor.MonthRentC != null)
                        colorMonthRent = myColor.MonthRentC;
                    else//这句else去掉会出错,错误提示“colorMonthRent未赋值”,有时候ColorMonthRent是null值,这种情况如何处理
                        colorMonthRent = "white";
                    if (myColor.MonthRentPaidC != null)
                        colorMonthRentPaid = myColor.MonthRentPaidC;
                    else//这句else去掉会出错
                        colorMonthRentPaid = "white";
    
    
                    e.Row.Cells[4].Attributes.Add("Style", "background-Color:" + colorMonthRent + "");
                    e.Row.Cells[5].Attributes.Add("style", "background-Color:" + colorMonthRentPaid + "");
                
            }
        }
    }

    ----------------------------------------SQL-------------------------------------

    ---------------------------------ColorTable--------------------------------
    
    USE [长铁物业公司资产数据库]
    GO
    
    /****** Object:  Table [dbo].[ColorTable]    Script Date: 10/22/2012 17:13:21 ******/
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE TABLE [dbo].[ColorTable](
    	[ContractNumberIDC] [int] NOT NULL,
    	[MonthRentC] [nvarchar](50) NULL,
    	[MonthRentPaidC] [nvarchar](50) NULL,
     CONSTRAINT [PK_ColorTable] PRIMARY KEY CLUSTERED 
    (
    	[ContractNumberIDC] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    
    GO
    
    
    -----------------------------RentTableA ---------------------------
    
    USE [长铁物业公司资产数据库]
    GO
    
    /****** Object:  Table [dbo].[RentTableA]    Script Date: 10/22/2012 17:13:08 ******/
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE TABLE [dbo].[RentTableA](
    	[ContractNumberID] [int] IDENTITY(1,1) NOT NULL,
    	[ContractNumber] [nvarchar](20) NULL,
    	[LeaseDateFrom] [date] NULL,
    	[Month] [date] NULL,
    	[MonthRent] [int] NULL,
    	[MonthRentPaid] [int] NULL,
     CONSTRAINT [PK_RentTableA] PRIMARY KEY CLUSTERED 
    (
    	[ContractNumberID] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    
    GO



    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!



    2012年10月22日 7:41
  • 把程序和创建sql的脚本发我,晚上回去我帮你调一下 

    我邮箱oec2003@gmail.com


    博客:http://blog.fwhyy.com

    2012年10月22日 9:01
  • 相关代码我已在楼上补齐了:分别是前台、后台、SQL三部分。这些资料够了么?

        这些都是我临时写的,内容不大。


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2012年10月22日 9:17
  • ding!

    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2012年11月6日 4:44