Convertir le Contrôle de zone de texte et de lui assigner une valeur
Je suis en train de créer un formulaire. Les contrôles de formulaire noms sont toujours les mêmes. Cependant, le type de contrôle va changer. Par exemple, j'ai un champ "prenom". Lorsque la page est initialisé, il récupère des données à partir d'une base de données indiquant que le type de contrôle (zone de texte, liste déroulante ou une Case à cocher); Ensuite, le formulaire est créé dynamiquement sur la page. Pour garder le viewstate, j'ai créé le contrôle dans la méthode OnInit.
protected override void OnInit(EventArgs e)
{
Control first_name;
string ControlType = GridView1.Rows[0].Cells[1].Text;
switch (ControlType)
{
case("TextBox"):
first_name = new Control() as TextBox; first_name.ID = "first_name"; this.Controls.Add(first_name);
break;
case("DropDownList"):
first_name = new Control() as DropDownList; first_name.ID = "first_name"; this.Controls.Add(first_name);
break;
case("CheckBox"):
first_name = new Control() as CheckBox; first_name.ID = "first_name"; this.Controls.Add("first_name");
break;
}
}
Puis-je rendre le contrôle à la page.
protected override void Render(HtmlTextWriter writer)
{
writer.Write("first_name: ");
first_name.RenderControl(writer);
}
Prochaine, j'essaie d'assigner des valeurs à la commande. C'est là que je rencontre des problèmes. Je sais que quand elle est déclarée à l'échelle mondiale, il est déclaré comme un contrôle et détient ces valeurs.
Est-il un moyen de le déclarer à l'échelle mondiale à partir de l'intérieur d'une fonction ou pour modifier le type d'un contrôle après avoir été déclarée à l'échelle mondiale?
protected void Page_Load(object sender, EventArgs e)
{
switch (first_name.GetType().ToString())
{
case ("TextBox"):
first_name.Text = "Your First Name...";
break;
case ("DropDownList"):
first_name.Items.Add("Jason");
first_name.Items.Add("Kelly");
first_name.Items.Add("Keira");
first_name.Items.Add("Sandi");
first_name.Items.Add("Gary");
break;
case ("CheckBox"):
first_name.Checked = true;
break;
}
}
Veuillez fournir un moyen que je peux accomplir cela.
- -1 pour la question depuis que le code est loin d'être encore compilable
Vous devez vous connecter pour publier un commentaire.
Dans votre
OnInit
que vous devriez fairenew TextBox()
et pasnew Control() as TextBox
depuis la seconde va juste retournernull
.Votre
Page_Load
serait quelque chose comme ceci:Pour accéder au type de propriétés spécifiques, vous aurez besoin de jeter
first_name
pour le type approprié au sein de votre interrupteur/instruction de cas.Vous pouvez utiliser
Control
que le type statique, et utiliser une autre variable dans chaquecase
:Apparemment - en regardant le substituée
Render
de la méthode que vous êtes en train de faire beaucoup de choses à la main qui ASP.NET Web Forms faire pour vous. Vous pouvez simplement ajouterctrl
(ou tout contrôle) à laPage
'sControls
collection.La
Page.Render
méthodes rend tous les éléments de laControls
collection, sauf si vous la remplacez.