2012-07-30 72 views
2

所以我把一个网格连接到了一个数据库,在这个数据库中我的数据库包含的值只有1,2和3.我想拥有它,这样每个有1的盒子都是绿色的,2是黄色,3是红色。asp.net如何把条件放在gridview上

我的问题是我应该在哪里放置调理代码以及我应该在哪种语言中使用它?

以下信息只是我的gridview和我链接到的数据。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    DataSourceID="SqlDataSource1" 
    > 
    <Columns> 
     <asp:BoundField DataField="Line" HeaderText="Line" ItemStyle-Width="75" ItemStyle-HorizontalAlign="Right" ItemStyle-BackColor="#FF6699" /> 
     <asp:BoundField DataField="Jan" HeaderText="Jan" ItemStyle-Width="75" ItemStyle-HorizontalAlign="Right" /> 
     <asp:BoundField DataField="Feb" HeaderText="Feb" ItemStyle-Width="75" ItemStyle-HorizontalAlign="Right" /> 
     <asp:BoundField DataField="Mar" HeaderText="Mar" ItemStyle-Width="75" ItemStyle-HorizontalAlign="Right" /> 
     <asp:BoundField DataField="Apr" HeaderText="Apr" ItemStyle-Width="75" ItemStyle-HorizontalAlign="Right" /> 
     <asp:BoundField DataField="May" HeaderText="May" ItemStyle-Width="75" ItemStyle-HorizontalAlign="Right" /> 
     <asp:BoundField DataField="Jun" HeaderText="Jun" ItemStyle-Width="75" ItemStyle-HorizontalAlign="Right" /> 
     <asp:BoundField DataField="Jul" HeaderText="Jul" ItemStyle-Width="75" ItemStyle-HorizontalAlign="Right" /> 
     <asp:BoundField DataField="Aug" HeaderText="Aug" ItemStyle-Width="75" ItemStyle-HorizontalAlign="Right" /> 
     <asp:BoundField DataField="Sep" HeaderText="Sep" ItemStyle-Width="75" ItemStyle-HorizontalAlign="Right" /> 
     <asp:BoundField DataField="Oct" HeaderText="Oct" ItemStyle-Width="75" ItemStyle-HorizontalAlign="Right" /> 
     <asp:BoundField DataField="Nov" HeaderText="Nov" ItemStyle-Width="75" ItemStyle-HorizontalAlign="Right" /> 
     <asp:BoundField DataField="Dec" HeaderText="Dec" ItemStyle-Width="75" ItemStyle-HorizontalAlign="Right" /> 

    </Columns> 
</asp:GridView> 



<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:dashboardConnectionString %>" 
SelectCommand="SELECT 
     line AS Line, 
     [2012-01-31] AS 'Jan', 
     [2012-02-29] AS 'Feb', 
     [2012-03-31] AS 'Mar', 
     [2012-04-30] AS 'Apr', 
     [2012-05-31] AS 'May', 
     [2012-06-30] AS 'Jun', 
     [2012-07-31] AS 'Jul', 
     [2012-08-31] AS 'Aug', 
     [2012-09-30] AS 'Sep', 
     [2012-10-31] AS 'Oct', 
     [2012-11-30] AS 'Nov', 
     [2012-12-31] AS 'Dec' 
    FROM 
    (Select line, report_month, state FROM [Monthly_State]) AS sourcetable 
    PIVOT 
    (
    MAX(state) 
    FOR report_month IN ([2012-01-31], [2012-02-29], [2012-03-31], [2012-04-30], [2012-05-31], [2012-06-30], [2012-07-31], [2012-08-31], [2012-09-30], [2012-10-31], [2012-11-30], [2012-12-31]) 
    ) as pivottable; "> 

    </asp:SqlDataSource> 

回答

0

我会通过使用模板领域做到这一点,并宣布在代码的公共方法背后如下

<asp:TemplateField> <ItemTemplate> <asp:Label ID="cddasf" runat="server" CssClass='<%# GetClass(Eval("colum name")) %>'></asp:Label> </ItemTemplate> </asp:TemplateField>

在后面

public string GetClass(object g) 
{ 

//代码过程中的值,并返回css类名你想

} 
0

在结合网格视图的事件行数据你必须把条件。

void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e) 
{ 
    if(e.Row.RowType == DataControlRowType.DataRow) 
    { 
    // example 
    // You have to give the correct index (starts from 0). Cell[0] will be the first column in your grid 
     if( e.Row.Cells[0].Text = "1") 
     { 
      e.Row.Cells[0].BackColor = System.Drawing.Color.Green; 
     } 
     if( e.Row.Cells[1].Text = "2") 
     { 
      e.Row.Cells[1].BackColor = System.Drawing.Color.Yellow; 
     } 
     if( e.Row.Cells[2].Text = "3") 
     { 
      e.Row.Cells[3].BackColor = System.Drawing.Color.Red; 
     } 
    // In the same way do for other columns 

    } 

} 
+0

由于某种原因,当我插入它不w扫。根据下面的答案,我必须改变我为了使上面的代码正常工作而使我的网格是真实的? – keyerer 2012-07-30 13:34:35

+0

我不知道为什么这不起作用......我会检查它。下面的答案也是正确的。为此,您必须将所有绑定列更改为Amiram提及的模板字段列。然后你必须得到每一列的参考,正如我所提到的,但有一点改变。像这样'Label l1 =(Label)e.Row.FindControl(“Label1”);'这样你将得到ref并设置它的背景色。 – 2012-07-30 13:41:26

1

由于不能在CssClass属性中使用数据绑定表达式,因此必须使用后面的代码。 首先,您必须将您的列转换为模板。 相反的:

<asp:BoundField DataField="Jan" HeaderText="Jan" ItemStyle-Width="75" ItemStyle-HorizontalAlign="Right" /> 

写:

<asp:TemplateField HeaderText="Jan"> 
    <ItemTemplate> 
     <asp:Label ID="lblJan" runat="server" Text="<%# Eval("Jan") %>" /> 
    </ItemTemplate> 
</asp:TemplateField> 

然后你可以使用的RowDataBound找到你的控制与e.Row.FindControl("lblJan"),并根据其值设置的CSS类吧。

+0

我这么认为,是的。 – 2012-07-30 13:34:15