在 DataRepeater_DrawItem 事件期间检索位于面板上的文本框的 .Text

Retrieving .Text of Textbox located on Panel during DataRepeater_DrawItem event

我正在使用 DataRepeater 的 DrawItem 事件根据 .Text 内容更改文本框的 .BackColor 和 .ForeColor。这工作得很好,除非文本框位于面板上。如果文本框在面板上,那么我将返回此异常:"Object reference not set to an instance of an object." 它表示 "e.DataRepeaterItem.Controls(txt_AWQRecordStatus.Name).Text" 没有值。单步执行代码确认。

但是...如果我只是将该文本框从面板上滑出,那么它就可以正常工作。我的 Google-Fu 让我失望了。我错过了什么?

附加信息: Visual Studio 2010 专业,VB.Net targeting.NET 4.0

        'Set Record Status Color
        Select Case e.DataRepeaterItem.Controls(txt_AWQRecordStatus.Name).Text
            Case "Working"
                e.DataRepeaterItem.Controls(txt_AWQRecordStatus.Name).BackColor = Color.Green
                e.DataRepeaterItem.Controls(txt_AWQRecordStatus.Name).ForeColor = Color.White
            Case "Sleep"
                e.DataRepeaterItem.Controls(txt_AWQRecordStatus.Name).BackColor = Color.Red
                e.DataRepeaterItem.Controls(txt_AWQRecordStatus.Name).ForeColor = Color.White
            Case Else
                e.DataRepeaterItem.Controls(txt_AWQRecordStatus.Name).BackColor = Color.White
                e.DataRepeaterItem.Controls(txt_AWQRecordStatus.Name).ForeColor = Color.Black
        End Select

回答我自己的问题,以防将来其他人感到困惑:

当控件位于面板上时,从代码的角度来看,它是嵌套在面板内部的。所以你必须引用面板控件,然后是你实际尝试更改的控件。所以我不得不追逐我的陈述,这样读:

e.DataRepeaterItem.Controls(panel_RecordDetails.Name).Controls(txt_AWQRecordStatus.Name).ForeColor = Color.Black

其中 panel_RecordDetails 是面板,txt_AWQRecordStatus 是该面板上的文本框。可能有更简单的方法来做到这一点,但我会取得胜利并继续前进。