1

私はリストビューを持っており、ユーザーがそれらに答えられるようにいくつかの質問をそれにバインドしています。質問の種類に応じて、ラジオボタンリスト、ドロップダウンリスト、テキストボックスなどのさまざまな入力コントロールを使用して回答できます。

ややこのように:

<itemtemplate>
    if (#eval("QuestionType") == 1)
       {
           <asp:RadioButtonList runat="Serer" />
       }
    elseif(#eval("QuestionType") == 2)
       {
           <asp:DropDownList runat="Serer" />
       }
    elseif(#eval("QuestionType") == 3)
       {
           <asp:CheckboxList runat="Serer" />
       }
</itemtemplate>

上記は、私が実際に持っているものの簡略化された擬似コードの例です。

私が実際に探しているものを理解していただければ幸いです。

4

2 に答える 2

2

それらを条件付きで「配置」することはできませんが、それらの可視性を条件付きで設定することはできます。

<asp:RadioButtonList runat="server" 
    Visible='<%# (int)DataBinder.Eval(Container.DataItem("QuestionType")) == 1 %>' />
于 2012-11-19T13:26:13.510 に答える
1

のイベントのイベントハンドラーを追加する必要がありOnItemDataBoundますListView

<asp:ListView ID="lstVw" runat="server" OnItemDataBound="lstVw_ItemDataBound">
    <ItemTemplate></ItemTemplate>
</asp:ListView>

その時点から、行のデータ項目のControlsコレクションにコントロールを動的に追加できます。

protected void lstVw_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    if (e.Item.ItemType == ListViewItemType.DataItem)
    {
        int val = int.Parse(e.Item.DataItem.ToString());

        switch (val)
        {
            case 1:
                RadioButtonList list = new RadioButtonList();
                list.Items.Add("Option 1");
                list.Items.Add("Option 2");

                e.Item.Controls.Add(list);

                break;
            case 2:
                //  Add a dropdown list
                break;
            case 3:
                //  Add a checkbox list
                break;
            default:
                //
                break;
        }
    }
}

注意すべき点が1つあります。ListViewを直接にバインドしましたList<int>。したがって、必要なコードは少し異なります。これを見てください。一般的な考え方は、ListViewがバインドされているタイプにキャストe.Item.DataItemし、そこから必要な値を取得することです。

ポストバックで動的に追加されたコントロールの値を取得するのは難しいでしょう(必要な場合)。Page.FindControl()を使用してページ上のコントロールをループするか、場合によってはListViewを調べて、そのDataRowsでFindControlを呼び出す必要があります。各コントロールのタイプを見つけるためにリフレクションを使用する必要があるかもしれません。私が言ったように、それは簡単ではありませんが、あなたはそれを達成することができるはずです。

于 2012-11-19T13:37:02.783 に答える