2011-07-13 9 views
0

私は配列をループし、以下のコードを使って行を作成しています。 Statusはtrueまたはfalseを返します。それが偽の場合、その特定のセルの背景色を赤色に設定したいと思います。どのようにしてセルの色を変更できますか?背後データレデア内のセルの色を変更するにはどうすればよいですか?

<asp:DataGrid ID="DataGrid1" runat="server" AlternatingItemStyle-BackColor="#e4e4e4" AutoGenerateColumns="false" > 
    <Columns> 
      <asp:BoundColumn DataField="Name" HeaderText="Name" > 
        <HeaderStyle BackColor="#4B6C9E" ForeColor="White" /> 
        <ItemStyle Width="240px" Wrap="True" /> 
      </asp:BoundColumn> 
      <asp:BoundColumn DataField="Status" HeaderText="Coupon Status" > 
        <HeaderStyle BackColor="#4B6C9E" ForeColor="White" /> 
        <ItemStyle Width="20px" Wrap="True" /> 
      </asp:BoundColumn> 

    </Columns> 
    </asp:DataGrid> 

コード:

   DataTable dt = new DataTable(); 
       dt.Columns.Add("Name"); 
       dt.Columns.Add("Status"); 

       // Looping through the rows here. 

       DataSet datareader = db.ExecuteDataSet(command); 
       DataRow dr = dt.NewRow(); 
       dr["Name"] = datareader.Tables[0].Rows[0]["Name"]; 
       dr["Status"] = datareader.Tables[0].Rows[0]["Status"]; 
       dt.Rows.Add(dr); 

       DataGrid1.DataSource = dt; 
       DataBind(); 
+0

どのように細胞を描いていますか?彼らは、Webアプリ、Windowsアプリ、または何ですか? – MrKWatkins

+0

GridViewセルの色を変更したいですか? –

+0

データリーダーをgridviewにバインドしていますか? –

答えて

0

ItemDataBoundのデータグリッド上のイベント、またはそのようなことがあります。これをフックすると、ステータス列の値を確認し、それに応じてセルの色を設定できるはずです。

+0

Andy、あなたには最高の提案がありました。ここに私がやったことだ: '保護された無効DataGrid1_OnDataBinding(オブジェクト送信者、DataGridItemEventArgs E) { 場合(e.Item.Cells [3] .Text.Equals( "真")){ e.Item.Cells [ 3] .BackColor = Color.IndianRed; } 「 –

+0

ありがとうございます。それがあなたのために働いていたら、私の答えを受け入れる気がしますか? – Andy

+0

OKチェックマークをクリックしました。 –

0

は、カスタム設定を取得するには、テンプレートを使用し

<ItemTemplate> 
    <asp:Panel ID="pnlCol1" runat="server"> 
     <asp:Label ID="LabelName" runat="server" 
      Text='<%# Eval("Name") %>' OnDataBind="LabelName_DataBind" /> 
    </asp:Panel> 
</ItemTemplate> 

protected void LabelName_DataBind(object sender, EventArgs e) 
{ 
    Label label = (Label)sender; 
    Panel panel = (Panel)label.NameingContainer;  
    // Set color here to panel 
    panel.BackColor = Color.Red; 
} 

それとも、PreRenderイベントを使用することができます。それはあなたのニーズ次第です。

0

は、あなたのグリッドに

<asp:DataGrid ID="DataGrid1" runat="server" 
     AlternatingItemStyle-BackColor="#e4e4e4" AutoGenerateColumns="false" 
     onitemdatabound="DataGrid1_ItemDataBound" > 
    <Columns> 
     <asp:BoundColumn DataField="Name" HeaderText="Name" > 
      <HeaderStyle BackColor="#4B6C9E" ForeColor="White" /> 
      <ItemStyle Width="240px" Wrap="True" /> 
     </asp:BoundColumn> 
     <asp:BoundColumn DataField="Status" HeaderText="Coupon Status" > 
      <HeaderStyle BackColor="#4B6C9E" ForeColor="White" /> 
      <ItemStyle Width="20px" Wrap="True" /> 
     </asp:BoundColumn> 
    </Columns> 
</asp:DataGrid> 

をonitemdataboundイベントを追加し、状態が偽であれば、あなたの分離コードでは、あなたは、自分のステータス欄の背景色を設定することができます。

protected void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     var status = Convert.ToBoolean(((DataRowView)e.Item.DataItem).Row.ItemArray[1]); 
     if (!status) 
     { 
      e.Item.Cells[1].BackColor = System.Drawing.Color.Red; 
     } 
    } 
} 
関連する問題