2011-11-05 58 views
5

我會感謝在VB或答案C#如何動態生成文本框並收集用戶輸入的數據?

我們使用一個數據庫來動態項目

enter image description here

我用這個代碼來生成數據庫從表標籤和文本框創建數據收集表格(當用戶點擊按鈕 「負載CRF」)

enter image description here

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim CRFgrid As New GridView 
    CRFgrid.DataSource = CRFds 
    CRFgrid.DataBind() 

    Dim ItemCount As Integer = CRFgrid.Rows.Count 
      Session("Itemcount") = CRFgrid.Rows.Count 

    For I = 0 To (ItemCount - 1) 
     Dim itemname As String = CRFgrid.Rows(0 + I).Cells(1).Text.ToString 
     Session("Item") = "Item" + (I + 1).ToString 
     Dim ItemNamelabel As New Label 
     Dim ItemNameBox As New TextBox 

     ItemNamelabel.ID = "L" + (I + 1).ToString 
     Session("FU" + I.ToString) = ItemNamelabel.ID.ToString 
     ItemNameBox.ID = "T" + (I + 1).ToString 

     ItemNamelabel.Text = "<br />" + (Session("Item").ToString) + " " + itemname + " " + "<br />" 

     Me.Form.Controls.Add(ItemNamelabel) 
     Me.Form.Controls.Add(ItemNameBox) 



    Next 
End Sub 

當加載數據收集形式中,頁面看起來像這樣

enter image description here

和 「查看頁面源」 表示

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head><title> 

</title></head> 
<body> 
<form method="post" action="Default.aspx" id="form1"> 
<div class="aspNetHidden"> 
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"  value="/wEPDwUKLTI0NTA5MDI3NGRkUb8sl0uZpLbvUN/GSmHgjYxS9xqGR7rmcMBR3Ufhz4w=" /> 
</div> 

<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWCQLf7PXOCQKM54rGBgK7q7GGCALF9vKRBQLs7+btDALs7+LtDALs797tDALs79rtDALs79btDDHrb+Vhkcph8brtCJP9//5IH57FFoImey2PApARP+k1" /> 

<input type="submit" name="Button1" value="LoadCRF" id="Button1" style="width:85px;" /> 
<br /> 
<br /> 
<input type="submit" name="Button2" value="InsertData" id="Button2" style="width:85px;" /> 
<br /> 
<br /> 

MRN 
<input name="MRNtxt" type="text" id="MRNtxt" /> 
<br /> 
<br /> 
<span id="L1"><br />Item1 Diagnosis <br /></span><input name="T1" type="text" id="T1" /><span id="L2"><br />Item2 Treatment Protocol <br /></span><input name="T2" type="text" id="T2" /><span id="L3"><br />Item3 Initial CSF <br /></span><input name="T3" type="text" id="T3" /><span id="L4"><br />Item4 Location <br /></span><input name="T4" type="text" id="T4" /><span id="L5"><br />Item5 Consultant <br /></span><input name="T5" type="text" id="T5" /></form> 

一旦用戶填寫表單並單擊插入,我想使用此代碼將輸入的文本保存到數據庫中的其他表格中。這是行不通的。你能告訴我我的錯誤在哪裏嗎?

Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click 


    Dim mydb As New OleDbConnection 
    mydb = 
    New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= |datadirectory|openclinica.mdb;Persist Security Info=True") 
    mydb.Open() 
    Dim Y As Integer = Session("Itemcount") 
    For M = 1 To Y 

     Session("FUt") = "L" + M.ToString 
     Session("FUDt") = "T" + M.ToString 

     Dim sqlstring = "INSERT INTO [Followup] ([MRN], [FU], [FUData]) VALUES (@MRNtxt, @" + Session("FUt") + ", @" + Session("FUDt") + ");" 
     Dim mydbcommand As New OleDbCommand(sqlstring, mydb) 
     mydbcommand.Parameters.Add("@MRNtxt", OleDbType.VarChar).Value = MRNtxt.Text 
     mydbcommand.Parameters.Add("@" + Session("FUt"), OleDbType.VarChar).Value = Session("FUt").Text 
     mydbcommand.Parameters.Add("@" + Session("FUDt"), OleDbType.VarChar).Value = Session("FUDt").Text 
     mydbcommand.ExecuteNonQuery() 

    Next 

    mydb.Close() 
End Sub 

錯誤消息是這樣的,當我點擊 「插入」

enter image description here

+0

,你有什麼期待它做專,並在一些細節,它究竟做了什麼呢?如果顯示任何異常或錯誤消息,它們是什麼? –

+0

我編輯了我的問題@ MerlynMorgan-Graham –

+0

更好的細節。我無法閱讀頁面源碼截圖。如果沒關係,我建議你刪除它。如果它確實重要,我建議你將代碼粘貼到問題中而不是截圖中。異常信息在文本中也會更好。 –

回答

0

這是你的... = Session("FUt").Text... = Session("FUDt").Text

這些是字符串,而.Text正試圖調用一個不存在的屬性。

+0

我需要一個解決方案來獲得輸入的數據到數據庫中。你能修復我的代碼嗎? –

+0

如果您需要更多詳細信息,請告訴我 –

0

會話定義在哪裏?你有沒有檢查過Text屬性的訪問級別(它需要公開,否則你將得到的異常將被拋出)?

+0

我需要一個解決方案將輸入的數據存入數據庫。你能修復我的代碼嗎?如果您需要更多詳細信息,請告訴我 –

2

您需要檢索在button1_click中創建的實際控件,而不是在會話狀態下存儲的實際控件。

但是,由於這些控件是在運行時動態創建的,因此您的代碼將變得相當複雜,因爲每次調用Page Init時都必須將所有控件添加到頁面中。請參閱以下文章瞭解更多信息:

ASP.NET Page Life Cycle Overview

View State and Dynamically Added Controls

Dynamic Web Controls, Postbacks, and View State

基礎上,這增加了複雜性,我建議一個更簡單的方法,你有一個數量的標籤和文本框已經在頁面上,但被CSS屬性隱藏(display: none; visibility: hidden)。

更好的方法是使用網格控件,它非常適合這種行爲。這裏有很多的例子:

Table of Contents: GridView Examples for ASP.NET 2.0

+0

對於電網控制。我以爲我記得這很簡單... –

相關問題