2009-05-05 17 views
0

ユーザーが希望のテキストボックスの数を選択する場所から1-10を表示するドロップダウンがあります - 無制限を選択すると、テキストボックスの正確な数を入力するテキストボックスが表示されます彼は好きです。彼が40歳になると、実行時に作成される40個のテキストボックスが表示されます。「無制限」ダイナミックコントロールからデータベースに値を入力する

私の質問は、MS SQLデータベースにテキストボックスを入力するかどうかです。動的に列名を作成する方法はありません。それはあまりに面倒で扱いにくいでしょう。私はこれを行うことができる方法はありますか?

+0

あなたの上司がドロップダウンを求めているので、あなたは質問します。なぜ、DBに何かをプッシュする方法を尋ねていますか? –

+0

私はあなたに私の質問があるとは思わない。 – input

答えて

1

は、それはそれはそのページのコメントや説明や何でも上では何でも間の1対多の関係です。

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 

ことを行うのならば、あなたはムンは、フロントエンドで物事を処理するために書いたものに類似したコードを使用することができます:あなたはそれがあるべき、これはその代わりなどtext_box_1、text_box_2、としてデータベースにモデル化してはいけません。 comment_numberとしてテキストボックスインデックスを渡すだけです。

+0

MunとTom H.ありがとう。 – input

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

データをXMLフィールドとしてデータベースに格納することを検討しましたか?

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

あなたのDB内の動的フィールドの不要を:あなたは40個の+テキストボックスを持っている場合は

は、あなただけのようにそれらを格納するためのシンプルなスキーマを持つことができます。スキーマもどこかに格納する必要があります。これは、レコードごとに変更可能な動的データを格納するのに適しています。

+0

これはデータベースの正規化に違反しています。時々それは大丈夫ですが、私はこれがその良い例であると確信していません。 「Value3」を持つテキストボックスを検索するとします。あなたは高価なLIKE "%Value3%"タイプのwhere節を使ってテーブルスキャンを行う必要があります。最小限のデータセットでは、これは禁止されています。 – SingleNegationElimination

+1

私はどのデータベースエンジンが使用されているのかわかりませんが、私はSQLの専門家ではありませんが、SQL ServerはXMLフィールドを完全にサポートしており、上記で説明したものを必要とせずに直接照会できます。 – Kelsey

+0

kelsey、XMLスキーマを使用することの提案は良いですが、私はこれまでに作業していないので、XMLフィールドにデータを格納する方法についてはわかりません。 – input

0

ムン、それは私にこのラインで設定されていないオブジェクト参照のエラーを与えている:それはテキストボックスのコントロールを見つけることができないよう

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

らしいです。

関連する問題