2017-01-03 6 views
0

밥상 제어 데이터를 데이터베이스 레코드에서 C#을 (ASPX/웹)에서 컨트롤을 생성하고 가져옵니다. ID, 텍스트 및 모든 필수 유효성 검사 속성을 데이터베이스에 넣고 ASP WinForm 또는 웹 페이지에서 컨트롤을 만들어야하는 해당 값을 사용하고 있습니다.동적 <p></p>는 C#에서 동적 컨트롤을 만드는 하나의 도움이 필요하십니까,

동일하게보기 부분을 제안 해주세요. 여기

이 예제 대해 참조 내 데이터베이스 테이블 템플릿

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 및 컨트롤 유형을 반복하고 동적으로 만들고 값을 읽습니다.

다른 컨트롤과 행이 많으면이 과정이 복잡해 지므로이 방법이 가장 좋은 해결책인지 생각해보십시오.