ANASAYFA | BLOG | SORU CEVAP | REFERANSLARIM | DOWNLOAD | HAKKIMDA | İLETİŞİM | ARAMA
~~~SORU~CEVAP~~~
Gönderen: Ayhan Demir
17.8.2015
Konu: C# de, GridView1 de koşullu satır renklendirme
merhaba,
 
      Ben program yazmayı hiç bilmiyorum ancak temel bilgilerim var 
(MsSQL,Delphi ve C#) bu bilgiler doğrultusunda daha çok TolBox ta bulunan 
kompenetlerden yararlanarak birşeyler yapmaya çalışıyorum. Takıldığım 
bir şey var bununla ilgili yardımınıza ihtiyacım var. Aşağıdaki gibi 
boş aspx web sayfama önce bir adet GridView1 ve bir adet te 
SqlDataSource1 ekledim daha sonra SqlDataSource1 ile mssql servere 
bağlantı kuruyorum sonrada GridView datalarımı aktarıtorum, buraya 
kadar sorunum yok mssql e yeni gelen datalarımı  5 saniyede bir okuyabiliyorum. 
Datlarım çok uzun olduğu için her defasında "Top 30 " ile sonırladım. 
 
Çıktı görüntüsü:
 
https://yadi.sk/i/sZ2bx1MaiGVBR
 
Soru: 
 
                   1-) "ArkaRenk" kolonuna gelen "clRed ", "clWhite", .... gibi karakterler geldiğinde tüm satırın arka rengini renklendirmesini nasıl kodlarım ?
 
                   2-) <meta http-equiv="refresh" content="5"> yerine sadece GridView1 refresh nasıl yaptırabilirim ?
 
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
WebForm6.aspx
 
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm6.aspx.cs" Inherits="WebApplication5.WebForm6" %>
 
<!DOCTYPE html> 
 
<meta http-equiv="refresh" content="5">
 
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" EnableModelValidation="True">
            <Columns>
                <asp:BoundField DataField="AboneNo" HeaderText="AboneNo" SortExpression="AboneNo" />
                <asp:BoundField DataField="AboneAdi" HeaderText="AboneAdi" ReadOnly="True" SortExpression="AboneAdi" />
                <asp:BoundField DataField="ZoneAdi" HeaderText="ZoneAdi" ReadOnly="True" SortExpression="ZoneAdi" />
                <asp:BoundField DataField="Aciklama" HeaderText="Aciklama" SortExpression="Aciklama" />
                <asp:BoundField DataField="SinyalTarihi" HeaderText="SinyalTarihi" SortExpression="SinyalTarihi" />
                <asp:BoundField DataField="ArkaRenk" HeaderText="ArkaRenk" SortExpression="ArkaRenk" />
            </Columns>
        </asp:GridView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="SELECT top 30 [AboneNo], [AboneAdi], [ZoneAdi], [Aciklama], [SinyalTarihi], [ArkaRenk] FROM [Olayliste]"></asp:SqlDataSource>
    
    </div>
    </form>
</body>
</html>
-------------------------------------------------------------------------------------------------------------------------------------------------------------
WebForm6.aspx.cs
 
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
 
namespace WebApplication5
{
    public partial class WebForm6 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
 
        }
    }
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
WebForm6.aspx.designer.cs
 
// <auto-generated>
//     This code was generated by a tool.
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated. 
// </auto-generated>
//------------------------------------------------------------------------------
 
 
namespace WebApplication5 {
    
    
    public partial class WebForm6 {
        
        /// <summary>
        /// form1 control.
        /// </summary>
        /// <remarks>
        /// Auto-generated field.
        /// To modify move field declaration from designer file to code-behind file.
        /// </remarks>
        protected global::System.Web.UI.HtmlControls.HtmlForm form1;
        
        /// <summary>
        /// GridView1 control.
        /// </summary>
        /// <remarks>
        /// Auto-generated field.
        /// To modify move field declaration from designer file to code-behind file.
        /// </remarks>
        protected global::System.Web.UI.WebControls.GridView GridView1;
        
        /// <summary>
        /// SqlDataSource1 control.
        /// </summary>
        /// <remarks>
        /// Auto-generated field.
        /// To modify move field declaration from designer file to code-behind file.
        /// </remarks>
        protected global::System.Web.UI.WebControls.SqlDataSource SqlDataSource1;
    }
 
İşlerinizde kolaylıklar iyi günler dilerim...
 
Ayhan Demir
Devamını oku...
YAZILIM
4597 kez okundu
Gönderen: ~~FARUK UNAL~~
17.8.2015

Merhaba,, Çözümü farklı şekillerde yapmanız mümkün

İsterseniz gridview yerine repeater kullanarak direk renk kodunu css olarak koda gömebilir ve otomatik olarak her satırın renkli olmasını sağlayabilirsiniz

İsterseniz de bir for döngüsü kurarak her satırdaki renk koduna göre ilgili satırın rengini değiştirebilirsiniz

Örnek kod olarak aşağıdaki gibi bir yapı kullanabilirsiniz

GridView1.DataSource = tbl;
GridView1.DataBind(); 
 
for (int i = 0; i < GridView1.Rows.Count; i++)
{
       if (i % 2 == 1) 
          GridView1.Rows[i].BackColor = Color.Azure;
       else
          GridView1.Rows[i].BackColor = Color.Red;
 }

 

Eğer arka plan yerine yazı rengi değiştirmek isterseniz de 

 GridView1.Rows[i].ForeColor = Color.Blue;

kodunu kullanabilirsiniz

Color.RENKLER in tanımlı olması için kod bloğunuzun en üst kısmına

using System.Drawing;

Eklemeniz gerekiyor, onu da unutmayınız. Ben i değerine göre renklendirme yaptım, Sizde kolondaki değerlere göre if bloğunda kontrol ederek renklendirmelerinizi yapabilirsiniz

Kolay gelsin, İyi çalışmalar dilerim

 

Gönderen: Ayhan Demir
20.8.2015

Hocam Merhaba;

bu kod bloğunu kullandım, bir satırı azure diğerlerini red olarak renklendirdi for döngüsüyle bunu tekrarladı.

Çıktısı: https://yadi.sk/i/N7fgJJsZiZFQf

Ancak benim isteğim şuydu:

GiridView1 deki tablomda bulunan (ArkaRenk) kolonundaki verilerimin örnek (clRed) bulunduğunda tüm satırı Kırmızı (clSkyBlue) bulunduğunda tüm satırı mavi gibi renklenmesini, else ilede diğer satırları beyaz yapmak istiyorum

Yukarıdaki kod değerlerin yerine Tablomdaki değerlerle yer değiştirdim oncak olmadı yardımızını bekliyorum

 

Gönderen: Ayhan Demir
21.8.2015
Şunu Denedim
 
using System.Drawing;
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
 
namespace WebApplication5
{
 
    public partial class WebForm6 : System.Web.UI.Page
    {
        private int clRed;
        private int ArkaRenk;
        private int clYellow;
 
 
 
 
        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                if (int.Parse(e.Row.Cells[5].Text) == clYellow)  // Buraya rakam girmemi istiyor ? rakam girdiğimde 5 numaralı kolndaki hücreyi renklendiriyor
                {
                 
                        e.Row.Cells[5].BackColor = Color.Brown;
                        e.Row.Cells[0].BackColor = Color.CadetBlue;
 
 
                    }
                }
            }
 
   
    }
 
 
 
 
Satır 22:             if (e.Row.RowType == DataControlRowType.DataRow)
Satır 23:             {
Satır 24:                 if (int.Parse(e.Row.Cells[5].Text) == clYellow)
Satır 25:                 {
Satır 26:                  
== nasıl karakter yazabilirim?
Gönderen: ~~FARUK UNAL~~
22.8.2015

Merhaba,, Zaten gönderdiğim kod bloğunu kendinize göre uyarlamanız gerekiyordu, diğer türlü kırmızı ve beyaz renk vermesi normal, kod çünkü o işlevi yaptırıyor

Sizin if ile kontrol ederek kendinize göre uyarlamanız gerekiyor, önceki mesajımda bunu belirtmiştim,,

"... if (int.Parse(e.Row.Cells[5].Text) == clYellow)  // Buraya rakam girmemi istiyor ? rakam girdiğimde 5 numaralı kolndaki hücreyi renklendiriyor ..."

int.Parse(e.Row.Cells[5].Text) diye kullanırsanız rakam girmenizi ister, Çünkü Siz veriyi int yapıp sonra if ile karşılaştırmaya çalışıyorsunuz, Fakat renk değeri olarak kolonlarda string tuttuğunuz için onu int yapmaya çalışınca da hata verecektir, INT dönüşümü yapmadan direk ilgili kolondaki değerin text değerini çift tırnak içinde "RenkKodu/KolonDeğeri" ile karşılaştırarak renklendirme yapmanız gerekiyor

if( e.Row.Cells[5].Text.toString() == "clYellow" )

Yukarıdaki gibi bir kullanım yoluna gitmeniz gerekiyor, tabi burada else-if ler ile de diğer kolonlara göre ayar yapmalısınız

Kolay gelsin, İyi çalışmalar dilerim

Gönderen: Ayhan Demir
4.9.2015 0

Hocam merhaba;

Tamamdır teşekkür ederim,

 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                if (!string.IsNullOrEmpty(e.Row.Cells[2].Text))
                {
                    if (e.Row.Cells[2].Text.ToString() == "Sistemi Devreden Cikardi")
                    {
                        e.Row.ForeColor = Color.Blue;
 
                    }
bu kalıbı kullandım işimi gördü,
birkaç değişkenim var onları altalta yazıyorum ve reklendiriyorum bunun yerine aynı rekte olan değişkeni tek satırda nasıl yazarım çünkü alt alta bayağı uzun sürüyor çok fazla değişkenim var.
 
Bunun için aşağıdaki yapıyı kullanabilirmiyim:
 
       if (e.Row.Cells[2].Text.ToString() == "değişken1" + " değişken2"+"değişken3")
{
 e.Row.ForeColor = Color.Blue;
}
}
}

Ad Soyad :
E-mail :
Cevap :
DoÄŸrulama Kodu