2017-10-20 4 views
0

私の会社が現在出荷していない現在のマシンを示すGridView1があります。各行のCell0には、マシンのシリアル番号が表示されます。番号は機械的には[.000]、電気的には.00Eで終わります。機械製品内では、[STD]、[BLD]、[TLG]、[DIE]の4つのカテゴリに分類されます。 GridView1には何の問題もありません。GridViewの最後の行のセルには色がついていません

私はVisual Studio 2010を使用していますが、VBではC#ではなくコーディングしています。私はマシンが[.000]か[.00E]であるかどうかに応じてcell0の背景を色分けしています。また、[STD]、[BLD]、[TLG]または[DIE]のカテゴリも色分けしています。すべての色が一致するように動作します。何がうまくいかないのは、GridView1の最後のロールをcell0の背景色にすることができないということです。それは白のままです。

私は正しく閉じていないか、最後にコードを忘れていませんか?

ここでは、魔法が発生するコードを示します。

If e.Row.RowType = DataControlRowType.DataRow Then 
     For Each er As GridViewRow In GridView1.Rows 

      'Get the Serial Number out of the first column 
      Dim TrimmedJN As String 
      TrimmedJN = Trim(er.Cells(0).Text) 
      Session("JNPerRow") = TrimmedJN 
      SqlDataSource4.DataBind() 
      GridView_Code.DataBind() 
      Dim TrimmedCode As String 
      TrimmedCode = GridView_Code.Rows(0).Cells(0).Text 

      If TrimmedJN.EndsWith("00") And TrimmedCode = "TLG" Then 
       er.Cells(0).BackColor = Drawing.Color.Orange 
      ElseIf TrimmedJN.EndsWith("00") And TrimmedCode = "BLD" Then 
       er.Cells(0).BackColor = Drawing.Color.Orange 
      ElseIf TrimmedJN.EndsWith("00") And TrimmedCode = "DIE" Then 
       er.Cells(0).BackColor = Drawing.Color.Pink 
      'Makes everything else light green 
      Else : er.Cells(0).BackColor = Drawing.Color.LightGreen 
      End If 
      'Overrides the green to be yellow for Electrical 
      If TrimmedJN.EndsWith("0E") Then 
       er.Cells(0).BackColor = Drawing.Color.Yellow 
      End If 

     Next 
    End If 

答えて

0

あなたは(私はスニペットはである何thatsの仮定)RowDataBoundイベント内のネストされたループを持っています。

For Each er As GridViewRow In GridView1.Rows 

RowDataBoundイベントは、すべてのセルで既にループしています。したがって、最後の行がRowDataBoundイベントによって処理されるとき、それはまだGridView行コレクションの一部ではないため、ネストされたループはそれを見つけることができません。

RowDataBoundイベントで比較するためにソースデータを使用する方が良いでしょう。

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) 

    'check if the row is a datarow 
    If (e.Row.RowType = DataControlRowType.DataRow) Then 

     'cast the row back to a datarowview 
     Dim row As DataRowView = CType(e.Row.DataItem,DataRowView) 

     'get the cell value not from the gridview, but from it's source data 
     Dim cellValue As String = row("myColumn").ToString 

     'color cells or rows 
     e.Row.BackColor = Color.Red 
     e.Row.Cells(0).BackColor = Color.Green 

    End If 

End Sub 
+0

コードを試したが、最初は機能しませんでした。その後私は、シリアル番号(私たちはそれをジョブ番号と呼んでいます)を15文字で引っ張っていて、それに余分なスペースがあって、それがどのように終わったのか(00か0E)間違っていたことを認識しました。私は[Dim cellValue As String = trim(row( "JOBNUM")。ToString)]という簡単なトリムを行い、それは魅力的に機能しました。それは関連した別のレポートの報告問題を解決しました。あなた、私の友人は天才です。助けてくれてありがとう。 – CVensel

関連する問題