Wie kann ich mit FindControl-Methode in asp.net?
Wie kann ich mit findControl und wie bekomme ich die id ' s nach FindControl-Methode? ich brauchen, um alle TextBox-Daten gibt es 40 textbox. Und TextBoxid Daten...
ich wirklich möchte lernen auch linq-Methode 😉
protected void Button1_Click(object sender, EventArgs e)
{
// SetRecursiveTextBoxAndLabels(PlaceHolder1);
CreateForm creater = new CreateForm();
creater.Holder = PlaceHolder1;
creater.SetAccessForm();
if (PlaceHolder1.Controls.Count > 0)
{
foreach (Control item in PlaceHolder1.Controls)
{
item.FindControl(item.ID) is TextBox-------> How can i control is textBox? Because there are labels grid....
}
}
}
alt-text http://i49.tinypic.com/2mfb4ew.png
brauche ich nur diese :
ENG_ACCESS engAccess = new ENG_ACCESS();
Type engTyp = engAccess.GetType();
PropertyInfo[] properties = engTyp.GetProperties();
TextBox txtbox = new TextBox();
foreach (PropertyInfo strColumn in properties)
{
txtbox = (TextBox)Page.FindControl("txt" + strColumn.Name);
ListBox1.Items.Add(txtbox.Text);
}
Meine GANZEN CODES:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Reflection;
namespace RecursiveAddTextBox
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
using (var dataCtx = new DataClasses1DataContext())
{
if (!IsPostBack)
{
SetRecursiveTextBoxAndLabels();
}
}
}
void SetRecursiveTextBoxAndLabels()
{
TextBox txtBox;
Label lbl;
ENG_ACCESS eng = new ENG_ACCESS();
Type typ = eng.GetType();
PropertyInfo[] properties = typ.GetProperties();
PlaceHolder1.Controls.Add(new LiteralControl("<table>"));
for( int i =0; i<properties.Length; i++)
{
lbl = new Label();
lbl.ID = "lbl" + properties[i].Name;
lbl.Text = properties[i].Name;
PlaceHolder1.Controls.Add(new LiteralControl("<tr><td>"));
PlaceHolder1.Controls.Add(lbl);
PlaceHolder1.Controls.Add(new LiteralControl("</td><td>"));
txtBox = new TextBox();
txtBox.ID ="txt"+properties[i].Name;
PlaceHolder1.Controls.Add(txtBox);
PlaceHolder1.Controls.Add(new LiteralControl("</td></tr>"));
}
PlaceHolder1.Controls.Add(new LiteralControl("</table>"));
}
protected void Button1_Click(object sender, EventArgs e)
{
SetRecursiveTextBoxAndLabels();
}
protected void Button2_Click(object sender, EventArgs e)
{
if (PlaceHolder1.Controls.Count > 0)
{
foreach (Control item in PlaceHolder1.Controls)
{
if (item is TextBox)
{
TextBox t1 = (TextBox)PlaceHolder1.FindControl(item.ID);
}
}
}
}
}
- Wenn alles, was Sie hier zu tun versuchen ist die Anzeige der Eigenschaften eines bestimmten Objektes durch Reflexion auf Ihre Seite, und Bearbeiten Sie Sie, warum nicht das FormView-Steuerelement und die Datenbindung an Ihre Daten?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als eine Erweiterung zu der Antwort von Pranay, ich denke, Sie sind wahrscheinlich zu fallen foul von INamingContainer.
Den asp.net control-ID ' s werden erstellt, mithilfe von geschachtelten controlnames. Werfen Sie einen Blick auf MSDN für mehr Informationen auf die webcontrols und die INamingContainer-Schnittstelle
Warum sind Sie die Schleife durch jede Kontrolle und dann bittet die Seite zu finden, die Kontrolle, die Sie bereits haben?
In anderen Worten, wenn (Element TextBox), dann Element ist die TextBox, die Sie suchen!
Denken Sie daran, dass FindControl ist nicht rekursiv ist, so haben Sie zu nennen FindControl auf die Instanz des naming-container, der enthält eigentlich die Kontrolle, die Sie wollen, zu finden.
Diese Erweiterung hinzufügen Methode:
dann rufen Sie es mit: