FormView FindControl无法转换ToInt32

时间:2012-09-21 18:41:21

标签: c#

我有一个Cust_Result类,它接受一个整数参数。

所以在我的主页上加载时我绑定一个formview来显示我检索到的数据。现在我想提取我的“id”标签的值并将其分配给一个变量,我可以传递给我的Cust_Result类,但我一直收到这个错误

  

“无法将'System.Web.UI.WebControls.Label'类型的对象强制转换为   输入'System.IConvertible'。“

我假设这是因为我正在尝试将字符串值发送到需要整数值的参数,但我不确定如何进行转换。

我的代码

 int cust;

       cust = (Convert.ToInt32(FormView1.Row.FindControl("ID")));

3 个答案:

答案 0 :(得分:1)

您需要转换字符串,这是Label.Text属性(而不仅仅是标签)。

我会把它分成两步:

Label lbl = FormView1.Row.FindControl("ID") as Label;
// option to bail out when lbl == null 
cust = Convert.ToInt32(lbl.Text);

答案 1 :(得分:1)

首先将控件转换为Label

var label = (Label)FormView1.Row.FindControl("ID");

然后您可以获得标签中的值:

var cust = int.Parse(label.Text);

答案 2 :(得分:1)

仔细查看编译器错误 - 它没有说明stringint - 它正在谈论IConvertibleLabel - 尽管它提到的事实Label代替Control表示不是您实际发布的代码。 Convert.ToInt32无法理解如何处理ControlLabel - 在这种情况下,我相信您需要标签的文字,所以我写这个:

 Label label = (Label) FormView1.Row.FindControl("ID");
 // Potentially check for "label" being null here, i.e. the control wasn't found
 int cust = Convert.ToInt32(label.Text);

这个值的来源并不完全清楚,但您可能也想考虑使用int.TryParse代替Convert.ToInt32

我还注意到Cust_Result是一个非传统的名字 - 试着:

  • 避免使用缩写词(Cust表示客户,我认为?)
  • 不要使用下划线
  • 尝试提供更多有意义的名称 - 即使CustomerResult并未真正解释的结果