如何访问DataRepeater内部的控件?

How to access controls inside DataRepeater?

提问人:Livio 提问时间:11/9/2023 最后编辑:LarsTechLivio 更新时间:11/10/2023 访问量:56

问:

我正在尝试从 C# 中的 DataRepeater 控件中获取值 旧程序(用 VB 编写)使用以下指令执行此操作:

If CBool(e.DataRepeaterItem.Controls(Temp_S.Name).Text) = True Then
  e.DataRepeaterItem.Controls(T_S.Name).Text = "S"
  e.DataRepeaterItem.Controls(T_S.Name).BackColor = Color.Yellow
  e.DataRepeaterItem.Controls(T_S.Name).ForeColor = Color.Black
Else
  e.DataRepeaterItem.Controls(T_S.Name).BackColor = Color.White
  e.DataRepeaterItem.Controls(T_S.Name).ForeColor = Color.White
End If

我尝试在 C# 中使用相同的指令,但没有结果。 出现的错误是:

“不可调用的成员'Control.controls'不能像方法一样使用。”

编辑: 我找到了一个解决方案,但即使它没有产生错误,它仍然不起作用,而且非常奇怪的是,如果我在潜艇内放置一个停止点进行检查,则永远不会达到该点!看来这个潜艇从未被触及过!

private void DataRepeater_Buoni_DrawItem(object sender, Microsoft.VisualBasic.PowerPacks.DataRepeaterItemEventArgs e)
{
  // Accende S
  if (Convert.ToBoolean(e.DataRepeaterItem.Controls["t_Buono.Name"].Text = "10268"))
  {
    e.DataRepeaterItem.Controls["t_S.Name"].Text = "S";
    e.DataRepeaterItem.Controls["t_S.Name"].BackColor = Color.Yellow;
    e.DataRepeaterItem.Controls["t_S.Name"].ForeColor = Color.Black;
  }
  else
  {
    e.DataRepeaterItem.Controls[t_S.Name].BackColor = Color.White;
    e.DataRepeaterItem.Controls[t_S.Name].ForeColor = Color.White;
  }
}
C# WinForms DataRepeater

评论

0赞 LarsTech 11/9/2023
It appears like this sub is never reached那将是一个不同的问题。
0赞 Livio 11/9/2023
@LarsTech,我插入完整的代码......这怎么可能??
0赞 LarsTech 11/9/2023
你订阅了这个活动吗?DrawItem
0赞 Livio 11/9/2023
@LarsTech,“订阅”是什么意思?
2赞 LarsTech 11/9/2023
Sub DataRepeater1_DrawItem(sender As Object, e As DataRepeaterItemEventArgs) Handles DataRepeater1.DrawItem

答:

2赞 Amit Mohanty 11/9/2023 #1

试试这个:(e.DataRepeaterItem.Controls[Temp_S.Name] as Control).Text

修改代码:

// Change TextBox to the actual type of your control
var control = e.DataRepeaterItem.Controls[Temp_S.Name] as TextBox; 
if (control != null)
{
    string textValue = control.Text;
}

评论

0赞 Livio 11/9/2023
不幸的是,它不起作用!
0赞 Amit Mohanty 11/9/2023
试试修改后的那个。
0赞 Livio 11/10/2023 #2

终于成功了!!!!

if (e.DataRepeaterItem.Controls["temp_S"].Text == "True")

问题是.名称与文本框名称联接。 感谢大家的支持!