通过“无限制”动态控件将值输入数据库

时间:2009-05-05 22:22:37

标签: sql asp.net database controls

有一个显示1-10的下拉列表,用户从中选择他想要的文本框数量 - 如果他选择无限制,它会显示一个文本框,其中他输入了他想要的文本框的确切数量。如果他输入40,它会显示40个在运行时创建的文本框。

我的问题是,如何将数据从40 - 或“他输入的任何数字”文本框输入到MS SQL数据库中。我无法动态创建列名,而且过于繁琐和混乱。我有什么方法可以做到这一点吗?

4 个答案:

答案 0 :(得分:3)

创建文本框时,可以为它们提供顺序ID,然后在回发上迭代这些文本框,将值写入数据库。

例如:

/// <Summary>
///  This would be fired when the user enters the number of textboxes
///  the want and click the 'Create Textboxes' button.
/// </Summary>
protected void CreateTextBoxes_Click(object sender, EventArgs e)
{
    // Check how many textboxes the user wants
    int count = Convert.ToInt32(CountTextBox.Text);

    // Generate the number of textboxes requested
    // and add them to the page
    for (int i=0; i < count; i++)
    {
        // Create the textbox
        TextBox textbox = new Textbox();

        // Set the ID so we can access it later
        textbox.ID = "TextBox_" + i;

        // Add the textbox to the panel
        TextBoxPanel.Controls.Add(textbox);
    }
}

/// <Summary>
///  This would be fired when the user has entered values in the textboxes
///  and clicked the Save button to save the values to the database.
/// </Summary>
protected void SaveButton_Click(object sender, EventArgs e)
{
    // Check how many textboxes the user created
    int count = Convert.ToInt32(CountTextBox.Text);

    // Loop through them
    for (int i=0; i < count; i++)
    {
         // Get the TextBox
         TextBox textbox = (TextBox) FindControl("TextBox_" + i);

         // Get the value
         string val = textbox.Text;

         // Insert into DB
         SaveValueToDatabase(val);
    }
]

答案 1 :(得分:1)

你所拥有的是该页面上的任何内容与评论或描述之间的一对多关系。您不应该在数据库中将其建模为text_box_1,text_box_2等。相反,它应该是:

CREATE TABLE Some_Entity
(
    some_entity_id  INT NOT NULL,
    CONSTRAINT PK_Some_Entity PRIMARY KEY CLUSTERED (some_entity_id)
)
GO

CREATE TABLE Some_Entity_Comments
(
    some_entity_id  INT     NOT NULL,
    comment_number  INT     NOT NULL,
    comments        VARCHAR(1000)   NOT NULL,
    CONSTRAINT PK_Some_Entity_Comments
         PRIMARY KEY CLUSTERED (some_entity_id, comment_number),
    CONSTRAINT FK_Some_Entity_Comments_Some_Entity
         FOREIGN KEY (some_entity_id) REFERENCES Some_Entity (some_entity_id)
)
GO

一旦完成,您可以使用类似于Mun编写的代码来处理前端的事情。您只需将文本框索引作为comment_number传递。

答案 2 :(得分:1)

您是否考虑将数据存储为数据库中的XML字段?

如果您有40多个文本框,则可以使用简单的架构来存储它们,如:

<YourData>
    <TextBox ID="TextBox1">Value1</TextBox>
    <TextBox ID="TextBox2">Value2</TextBox>
    <TextBox ID="TextBox3">Value3</TextBox>
    ... etc ...
</YourData>

您的数据库中不需要动态字段。您还应该在某处存储架构。这是存储可以从记录更改为记录的动态数据的好方法。

答案 3 :(得分:0)

Mun,它给了我在这一行没有设置对象参考的错误:

// Get the value
 string val = textbox.Text;

似乎无法找到文本框的控件。