0

私は持っていますGridView DropDownList

<asp:TemplateField HeaderText="Employer">
    <ItemTemplate>
        <asp:DropDownList ID="txtEmployer" runat="server" AutoPostBack="true"
            OnSelectedIndexChanged="SelectedIndexChanged">
            <asp:ListItem>Select</asp:ListItem>
            <asp:ListItem Value="AllScripts">AllScripts</asp:ListItem>
            <asp:ListItem Value="Contractor">Contractor</asp:ListItem>
            <asp:ListItem Value="Other">Other</asp:ListItem>
        </asp:DropDownList>
        <asp:RequiredFieldValidator ID="RequiredFieldValidator6" runat="server"
            ControlToValidate="txtEmployer" ErrorMessage="*"
            InitialValue="Select"></asp:RequiredFieldValidator>
    </ItemTemplate>
</asp:TemplateField>

そしてTextBox

<asp:TemplateField HeaderText="Other">
    <ItemTemplate>
        <asp:TextBox ID="txtOther" runat="server" TabIndex="435"></asp:TextBox>
        <asp:RequiredFieldValidator ID="RequiredFieldValidator7" runat="server"
            ControlToValidate="txtOther" ErrorMessage="*"
            SetFocusOnError="True"></asp:RequiredFieldValidator>
    </ItemTemplate>
</asp:TemplateField>

TexBox、デフォルトで非表示になっていPageLoadます。

ユーザーが「その他」オプションを選択すると、TextBoxが表示され、ユーザーは任意の値を入力できるようになります。これはこれまでのところうまくいきます。

の値を正常に収集DropDownListし、データベースに正常に挿入できます。

txtOther TextBoxただし、 の値を挿入し、 の一部として挿入する方法を理解しようとしていDropDownListます。うまくいけば、この最後の文は理にかなっています。

私は次のことを試しました:

Dim table As DataTable = TryCast(ViewState("CurrentTable"), DataTable)

If table IsNot Nothing Then
    For Each row As DataRow In table.Rows
        Dim txLName As String = TryCast(row.ItemArray(1), String)
        Dim txName As String = TryCast(row.ItemArray(2), String)
        Dim txEmail As String = TryCast(row.ItemArray(3), String)
        Dim txRole As String = TryCast(row.ItemArray(4), String)
        Dim txPhone As String = TryCast(row.ItemArray(5), String)
        Dim drpEmpl As String = TryCast(row.ItemArray(6), String)
        If drpEmpl = "Other" Then
            drpEmpl = txtOther.Text
        Else
            drpEmpl = TryCast(row.ItemArray(6), String)
        End If

宣言されていないエラーが発生し、txtOther.Textアクセスできない可能性があります。

drpEmplの名前ですDropDownList

私が試してみました:

drpEmpl = gridview1.FindControl("txtOther")

しかし、同じ問題。

4

1 に答える 1

0

ここに私が試してみたいことがあります。

  1. ユーザーが txtOther にテキストを入力し、ページを送信します
  2. どのユーザー送信者を取得し、それをビューステート変数に保存します (より多くの値が必要な場合に備えて、いくつかの配列がこれに最適な場合があります)
  3. txtEmployer を変更し、OnLoad のイベント ハンドラーを追加します。
  4. OnLoad のイベント ハンドラーでは、ドロップダウン リストに別のオプションを追加するだけです。

    foreach (string s in ArrayOfPreviouslyAddedValues){
    
        ddl.Items.Add(new ListItem(s, s));
    }
    

もう 1 つのオプションは、すべてのオプションのすべての値をバックグラウンド ソース (データベースなど) に保存し、値をドロップダウン リストにプログラムでデータバインドすることです。

これは C# ですが、要点がわかります。

于 2013-02-01T19:47:21.963 に答える