2017-12-19 12 views
0

OnRowDataBoundイベントでリーダーHasRowsの場合、GridView行の単一セルをGrayに設定したいだけです。 コードスニペットは、単一のセルではなく、列の色全体を変更します。 例:画像では、「Jan」の隣にあるセルだけを灰色にします。あなたはすべての行に対して同じ静的SQLクエリを使用グリッドビュー内の行のセルを検索し、OnRowDataBoundで何かを実行します。

protected void setcolor(object sender, GridViewRowEventArgs e) 
      { 
       if (e.Row.RowType == DataControlRowType.DataRow) 
       {    
        if (txtShopBranch.Text == "Area1") 
         { 
          int index = e.Row.RowIndex; 
          string checkdayone = "SELECT one FROM tblregulardays WHERE months = 'Jan' AND shopbranch = 'Area1' AND one = '1'"; 
          NpgsqlCommand findDayOne = new NpgsqlCommand (checkdayone, con); 
          con.Open(); 
          NpgsqlDataReader reader = findDayOne.ExecuteReader(); 
          if(reader.HasRows) 
           { 
            e.Row.Cells[32].BackColor = System.Drawing.Color.Gray; 
           } 
          else 
           { 
            e.Row.Cells[32].BackColor = System.Drawing.Color.White; 
           } 
          con.Close(); 
        } 

       } 
      } 

enter image description here

+0

あなたのコードはうまくいくはずです。だから私はあなたのクエリが動作しないと仮定し、常にreowを返します。デバッガを使用しましたか? –

答えて

1

string checkdayone = @"SELECT one FROM tblregulardays 
         WHERE months = 'Jan' 
          AND shopbranch = 'Area1' 
          AND one = '1'"; 

常に同じ結果が得られるコースのよう。パラメータ化されたクエリを使用する必要があります。多分:

string month = e.Row.Cells[31].Text.Trim(); 

string checkdayone = @"SELECT one FROM tblregulardays 
         WHERE months = @Month 
          AND shopbranch = 'Area1' 
          AND one = '1'"; 

NpgsqlCommand findDayOne = new NpgsqlCommand (checkdayone, con); 
findDayOne.Parameters.AddWithValue("@Month", month); 
+1

セルから 'Text'値を使用するのではなく、DataItemをDataRowViewにキャストして、それを使用します。' DataRowView row = e.Row.DataItem as DataRowView'そして 'string month = row [ "] .ToString();'。セルの値が書式設定された日付または数値の場合、間違った値が返される可能性があります。 – VDWWD

関連する問題