有一个显示1-10的下拉列表,用户从中选择他想要的文本框数量 - 如果他选择无限制,它会显示一个文本框,其中他输入了他想要的文本框的确切数量。如果他输入40,它会显示40个在运行时创建的文本框。
我的问题是,如何将数据从40 - 或“他输入的任何数字”文本框输入到MS SQL数据库中。我无法动态创建列名,而且过于繁琐和混乱。我有什么方法可以做到这一点吗?
答案 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;
似乎无法找到文本框的控件。