2011-09-26 10 views
0

私はデータベースに新しいタイトルを追加するドロップダウンリストを持っていますが、ユーザーが入力できるテキストボックスを追加したいと思いますドロップダウンに何も追加されていない場合は、新しいタイトルが追加されます。ドロップダウンから値が選択されていない場合、テキストボックスをVB.netデータベースに追加できます

データベースからタイトルを動的に取得するドロップダウンがあります。残念ながら、これはドロップダウンリストの最初の値が「オプションを選択する」というデフォルトではないことを意味します。私は値がデータベースから引き出されているときに "選択"としてリストされた最初のオプションを持つようにドロップダウンを得る方法を知らない。追加することはできませんデータベースにオプションを選択すると、これはどのように機能しますか?

ドロップダウンリストに何も挿入されていない場合、テキストボックスをデータベースに挿入できるようにするコードビハインドに何が追加できますか?今はテキストボックスのコードビハインドはありませんが、正しい情報を挿入するドロップダウンリストがあります。

<li class="alternatingItem"> 
<asp:LinkButton ID="DescButton" runat="server">Description</asp:LinkButton> 
    <asp:Panel ID="DescPanel" runat="server" CssClass="modalPopup" Style="display:none"> 
    <div class="PopupHeader">Add a Description</div> 
    Title:<asp:DropDownList ID="ddlDescription" runat="server" DataSourceID="dsNewDescription" DataTextField="Title" DataValueField="Title"> 
    </asp:DropDownList><br /> 
    New Title:<asp:TextBox ID="NewDescTitle" runat="server"></asp:TextBox><br /> 
    Description:<asp:TextBox ID="Description" runat="server" TextMode="MultiLine"> 
    </asp:TextBox><br /> 
    <asp:Button ID="submitDescription" runat="server" Text="Submit" /> 
    <asp:Button ID="CancelSubmitDesc" runat="server" Text="Cancel" /> 
    </asp:Panel> 
    <asp:ModalPopupExtender ID="DescModal" runat="server" DropShadow="True" 
    DynamicServicePath="" Enabled="True" PopupControlID="DescPanel" 
    TargetControlID="DescButton"> 
    </asp:ModalPopupExtender> 
    </li> 




Protected Sub submitDescription_Click(ByVal sender As Object, ByVal e 
As System.EventArgs) Handles submitDescription.Click 
    DescModal.Hide() 

    'SQL INSERT: Marketing Table 
    Dim strSQL As String = "INSERT INTO Picklist (Title, Data) 
    VALUES (@Title, @Data); 
    INSERT INTO Marketing 
    (ProductID, MarketingTypeID, MarketingTitle, MarketingData) 
    VALUES (@ProductID ,2, 'Description', scope_identity())" 
    Using cn As New SqlConnection 
    (System.Configuration.ConfigurationManager.ConnectionStrings 
    ("LocalSqlServer").ConnectionString) 
     Using cmd As New SqlCommand(strSQL, cn) 
      cmd.Parameters.Add(New SqlParameter("@Title", 
      ddlDescription.SelectedValue)) 
      cmd.Parameters.Add(New SqlParameter("@Data", 
      Description.Text)) 
      cmd.Parameters.Add(New SqlParameter("@ProductID", 
      ProductID.Value)) 

      cn.Open() 

      cmd.ExecuteNonQuery() 
     End Using 
    End Using 
    Response.Redirect(Request.RawUrl) 
End Sub 

WORKING CODE

Title:<asp:DropDownList ID="ddlDescription" runat="server" 
DataSourceID="dsNewDescription" DataTextField="Title" DataValueField="Title" 
enableViewstate="False" AutoPostBack="True" AppendDataBoundItems="True"> 
<asp:ListItem Text="Select below or enter new" Selected="True"></asp:ListItem> 

If ddlDescription.SelectedValue <> "Select below or enter new" Then 
    cmd.Parameters.Add(New SqlParameter("@Title", ddlDescription.SelectedValue)) 
Else 
    cmd.Parameters.Add(New SqlParameter("@Title", NewDescTitle.Text)) 
End If 

答えて

1

あなたはこのような何か試すことができます。

<asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="true" onblur="validateSelection(this)" ...> 
    <asp:ListItem Text="" Value="" /> 
</asp:DropDownList> 
<asp:TextBox ID="TextBox1" runat="server" style="display:none;" ... /> 

あなたのJavaScript関数(正ではないが、それは近いはず):

validateSelection = function(selectList){ 
    var input = document.getElementById("<%=TextBox1.ClientID%>"); 
    if (input){ 
     input.style.display = selectList.selectedIndex > -1 ? "block" : "none"; 
     if (selectList.selectedIndex > -1){ 
      input.focus(); 
     }    
    } 
} 

そして、あなたのコードビハインドで:

string description = TextBox1.Text; 
if (!String.IsNullOrEmpty(DropDownList1.SelectedValue)) 
    description = DropDownList1.SelectedValue; 
+0

元の投稿を編集する必要がありました。ドロップダウンリストには、データベースからデータが移入されているため、常にオプションが選択されていることに気づいていませんでした。このようにドロップダウンがどのように機能するか考えていますか? – jlg

+1

'AppendDataBoundItems =" true "'を設定し、空白の項目を最初の位置に追加します。 –

+0

あなたの提案をありがとう!私は元のポストを編集しました:#ああ、appenddatabounditemsは重複を生成しましたが、ドロップダウンにもう少し追加することでその問題を解決することができました。 – jlg

0

ユーザはドロップダウンで選択した項目、またはテキストボックスに入力された有効な値ではなく、両方を持っていることを強制。 (これは、ASPバリデーター、または自家製のアプローチを使用して実装します)。

ボタンイベントハンドラ内で、ddlDescriptionが選択された値を持つかどうかを評価します。もしそうなら、それをパラメータとして使用します(あなたのコードがすでに行っているように)。そうでない場合は、テキストボックスの値を使用します。

関連する問題