2017-01-03 5 views
0

Folks,Dynamiquement créer des contrôles en C# (ASPX/Web) base de données enregistrement et la récupération de données de contrôle

avez besoin d'une aide dans la création des contrôles dynamiques en C#. Comme, je mets ID, Texte et toutes les propriétés de validation obligatoires dans la base de données et à partir de ces valeurs, j'ai besoin de créer un contrôle dans ASP WinForm ou une page Web.

S'il vous plaît me suggérer la partie en vue d'obtenir le même.

ici est mon modèle de table de base de données

CREATE TABLE CONTROL(
    PK_CONTROL_ID VARCHAR(128) NOT NULL, 
    CONTROL_NAME VARCHAR(128) NOT NULL, 
    PRIMARY KEY(CONTROL_ID) 
); 


CREATE TABLE CONTROLPROPERTY(
    PK_PROPERTY_ID INT NOT NULL IDENTITY(1,1), 
    FK_CONTROL_ID INT NOT NULL FOREIGN KEY REFERENCES CONTROLPROPERTY(PK_CONTROL_ID), 
    CONTROLPROPERTY VARCHAR(128) NOT NULL, 
    CONTROLVALUES VARCHAR(128) NOT NULL, 
    PRIMARY KEY(PK_PROP_VALUE_ID) 
); 


**Example** 
PK_CONTROL_ID CONTROL_NAME 
1    TextBox 


PK_PROPERTY_ID FK_CONTROL_ID CONTROLPROPERTY CONTROLVALUES 
1    1    ID    txtName 
2    1    Visible   true 
3    1    ToolTip   Name 

Référé cet exemple mais je dois mettre en œuvre la même structure de table pour les différents types de contrôleurs

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="TestControlFirst.index" %> 
<%@ Import Namespace="System.Data" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<script runat="server"> 
protected void Page_Load (object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     DataTable dt = new DataTable(); 
     dt.Columns.Add("ID"); 
     dt.Columns.Add("Firstname"); 
     dt.Columns.Add("Lastname"); 
     for (int i = 0; i < 10; i++) 
     { 
      DataRow row = dt.NewRow(); 
      row.ItemArray = new object[] {i,"Joe_"+i.ToString(),"Blow" +i.ToString()}; 
      dt.Rows.Add(row); 
      Repeater1.DataSource = dt; 
      Repeater1.DataBind(); 
     } 
    } 
} 

protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e) 
{ 
    int rowid = (e.Item.ItemIndex); 
    TextBox tb = (TextBox)Repeater1.Items[rowid].FindControl("txtOne"); 
    Label2.Text = tb.Text; 
} 
</script> 

page ASPX

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Repeater Demo</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
<asp:Repeater ID="Repeater1" runat="server" onitemcommand="Repeater1_ItemCommand"> 
<HeaderTemplate> 
<table border="1" width="50%"> 
<tr> 
<th>SELECT</th> 
<th>ID</th> 
<th>FIRST</th> 
<th>LAST</th> 
</tr> 
</HeaderTemplate> 

<ItemTemplate> 
<tr> 
    <td><asp:Button ID="btnOne" runat="server" Text="SELECT" /></td> 
    <td> <asp:TextBox ID="txtOne" runat="server" Text='<%# Eval("ID") %>' /></td> 
<td><%# Eval("Firstname") %></td> 
<td><%# Eval("LastName") %></td> 

</tr> 
</ItemTemplate> 

<FooterTemplate> 
</table> 
</FooterTemplate> 
     </asp:Repeater> 
    </div> 
    <asp:Label ID="Label2" runat="server"></asp:Label> 
    </form> 
</body> 
</html> 

Merci d'avance

Répondre

0

Votre meilleur pari est de créer des contrôles dynamiques et les ajouter à une PlaceHolder en bouclant les lignes de base de données et créer des contrôles sur la base des valeurs de la ligne. Cela doit se produire à chaque fois que la page est chargée, et qui comprend un PostBack

while (reader.Read()) 
{ 
    string controlType = reader["CONTROL_NAME"].ToString(); 

    if (controlType == "TextBox") 
    { 
     TextBox textbox = new TextBox(); 
     textbox.ID = reader["ID"].ToString(); 
     textbox.Visible = Convert.ToBoolean(reader["Visible"]); 
     textbox.ToolTip = reader["ToolTip"].ToString(); 
     PlaceHolder1.Controls.Add(textbox); 
    } 
    else if (controlType == "Label") 
    { 
     Label label = new Label(); 
     label.ID = reader["ID"].ToString(); 
     label.Visible = Convert.ToBoolean(reader["Visible"]); 
     label.Text = reader["Text"].ToString(); 
     PlaceHolder1.Controls.Add(label); 
    } 
    else if (controlType == "Button") 
    { 
     //etc 
    } 
} 

Et pour lire les valeurs de formulaire sur vous soumettez besoin essentiellement à faire la même chose. En boucle tous les types d'ID et de contrôle de la base de données, créez-les dynamiquement et lisez leurs valeurs.

Comme vous pouvez le voir ce processus peut devenir complexe si vous vraiment rapide avez beaucoup de différents contrôles et des lignes, alors pensez à votre approche et voir si cela est la meilleure solution.