Ein Form (oder jedes andere Container Control) hat eine Controls Property mit den direkt auf im enthalten Controls und eine Array Indexer für den Namen des Controls.
Wenn du dir also den Controlnamen baust (ohne das .Text der Property) solltest du über
C#-Quelltext
1: 2:
| var ctrl = myLovelyForm.Controls["txt_" + table.Columns[i].ColumnName]; ctrl.Text = table.Rows[j].ItemArray[i]; |
den Text setzen könne.
Name des Controls meint hier den Inhalt der Name Property des Controls nicht den Variablennamen der auf der Form benutzt wird. Der ist hier irrelevant.
Im Standardfall wenn man die Form über den Winforms Designer gebaut hat ist das aber gleich.
Wenn du deine Textboxen auf anderen ContainerControls verteilt hast (Panels, GroupBoxen etc.) dann reicht es nicht in Form.Controls zu schauen dann musst du explizit die ContainerControls durchsuchen bzw. recursiv die ControlsCollection der Controls von Form aus durchsuchen.
Allgemein halte ich dieses vorgehen für problematisch. Das ist scheinbar dynamisch ist es aber nicht wirklich, du musst ja schon die passenden Textboxen haben.
Insofern geht es hier nicht um beliebige Tabellen bzw. Daten sondern um einen sehr konkreten Fall.
Dann kann man sich auch eine passende Struktur ausdenken zum Beispiel ein Klasse auf die man die Rows mappt und dann sauber per Databinding in die Controls bekommt.
Das was du da gerade baust ist ein Maintainance Horror.