2017-01-03 10 views
0

Folks,Динамическое создание элементов управления в C# (ASPX/Web) из записи базы данных и выборки данных управления

Нужна одна помощь в создании динамических элементов управления в C#. Как, я помещаю ID, текст и все обязательные свойства проверки в базу данных, и из этих значений мне нужно создать элемент управления в ASP WinForm или веб-странице.

Пожалуйста, предложите мне часть обзора, чтобы достичь того же.

вот мой шаблон таблицы базы данных

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 

уже упоминали об этом пример, но мне нужно реализовать такую ​​же структуру таблицы для различных типов контроллеров

<%@ 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> 

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> 

Заранее спасибо

ответ

0

Ваш лучший выбор - создать динамические элементы управления и добавить их в PlaceHolder, зациклив строки базы данных и создать элементы управления на основе значений строк. Это должно происходить каждый раз, когда страница загружена, и что включает в себя 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 
    } 
} 

И читать значения формы на представить Вам в основном нужно сделать то же самое. Зациклируйте все типы ID и Control из базы данных, создайте их динамически и прочитайте их значения.

Как вы можете видеть, этот процесс может стать очень сложным, если у вас много разных элементов управления и рядов, поэтому подумайте о своем подходе и посмотрите, является ли это лучшим решением.

 Смежные вопросы

  • Нет связанных вопросов^_^