Du bör nog undvika att använda Name-egenskapen. Det är ingen egenskap som man ska använda. Försök att identifiera dina kontroller på annat sätt. T.ex. genom att lägga dem i en lista eller genom Tag-egenskapen.
Jag har en Windows Form med en tabcontrol. i tabcontrolen har jag ett antal textboxar och dropdownlist uppdelade på rader och döpta efter raden.
t ex rad ett: txtArt1, txtText1, txtPris1
txtArt1 är dropdownlist dom andra textboxar.
Jag har en funktion som ser ut så här:
private Control FindControl(string Target, Control.ControlCollection cont)
{
Control myControl = new Control ();
foreach (Control c in cont)
{
if (c.Name == Target)
{
myControl = c;
}
else
{
if(c.Controls.Count >0)
myControl = FindControl(Target,c.Controls);
}
}
return myControl;
}
Alla dropdownlistor är kopplade till
private void txtArt1_SelectedIndexChanged(object sender, System.EventArgs e)
Som ser ut så här:
private void txtArt1_SelectedIndexChanged(object sender, System.EventArgs e)
{
ComboBox dd = ((ComboBox)sender);
string cn = dd.Name.Replace("txtArt","");
FakturaDLL.Products pr = new FakturaDLL.Products();
if(pr.GetProduct(dd.Text))
{
((TextBox)this.FindControl("txtText"+cn, this.Controls)).Text = pr.ProdText.ToString();
((TextBox)this.FindControl("txtPris"+cn, this.Controls)).Text = pr.ProdPrice.ToString();
}
else
MessageBox.Show("Produkten kunde inte hittas!");
}
Den här koden funkar OM textboxarna ligger utanför tabcontrolern men inte när dom ligger i.
Då får jag: Den angivna omvandlingen är inte giltig.
på den här raden:
((TextBox)this.FindControl("txtText"+cn, this.Controls)).Text = pr.ProdText.ToString();
Den går igenom FindControl men verkar returnera nått felaktigt, namnet är iaf tomt på den kontrollern som hittas.
Vad 17 är fel?