0

中にListViewウィズDropDownListがあります。私は両方を試しました: fill DropDownListonOnItemDataBoundと in Page_Load. もチェックしてみPostBackましたが、何も役に立ちません。

値を取得しようとすると、常に最初の値が取得されます。リストが補充されるためだと理解していますが、それを回避するにはどうすればよいですか? のときだけ埋めるIsPostBack = falseと、空っぽになってしまいました。

これは私のコードです:

<asp:ListView runat="server" ID="MyListView">
    <LayoutTemplate>
        <table border="0" cellpadding="2" cellspacing="0">
            <tr>
                <th><asp:Literal runat="server" Text='<%$ Resources: Resource, LabelWhole %>' /></th>
                <th><asp:Literal runat="server" Text='<%$ Resources: Resource, LabelImport %>' /></th>
                <th><asp:Literal runat="server" Text='<%$ Resources: Resource, LabelPeriod %>' /></th>
                <th><asp:Literal runat="server" Text='<%$ Resources: Resource, LabelDate %>' /></th>
                <th><asp:Literal runat="server" Text='<%$ Resources: Resource, LabelUpload %>' /></th>
            </tr>
            <asp:PlaceHolder ID="itemPlaceholder" runat="server" />
        </table>
    </LayoutTemplate>
    <ItemTemplate>
        <tr>
            <td><%# DataBinder.Eval(Container.DataItem, "Whole") %></td>
            <td><%# DataBinder.Eval(Container.DataItem, "Upload")%></td>
            <td><%# DataBinder.Eval(Container.DataItem, "Period")%></td>
            <td><asp:DropDownList runat="server" ID="DaysDropDownList"></asp:DropDownList></td>
            <td><asp:FileUpload ID="FileUpload" runat="server" /></td>
        </tr>
    </ItemTemplate>
</asp:ListView>

foreach (var lvItem in MyListView.Items)
{
    if (lvItem.ItemType == ListViewItemType.DataItem)
    {
        DropDownList dr = lvItem.FindControl("DaysDropDownList") as DropDownList;
        for (int i = -1; i >= -12; i--)
        {
            dr.Items.Add(new ListItem(
                DateTime.Now.AddMonths(i).ToString("yyyy MM"),
                DateTime.Now.AddMonths(i).ToString("yyyy MM")));
        }
    }
}

コードビハインド:

protected void Page_Load(object sender, EventArgs e)
{
    this.Application.DataLayer.LoadData(UserID);
    this.MyListView.DataSource = this.Application.DataLayer.Data;
    this.MyListView.DataBind();

    LoadDropDownLists();
}

private void LoadDropDownLists()
{
    foreach (var lvItem in MyListView.Items)
    {
        if (lvItem.ItemType == ListViewItemType.DataItem)
        {
            DropDownList dr = lvItem.FindControl("DaysDropDownList") as DropDownList;
            dr.Items.Clear();
            for (int i = -1; i >= -12; i--)
            {
                dr.Items.Add(new ListItem(
                    DateTime.Now.AddMonths(i).ToString("yyyy MM"),
                    DateTime.Now.AddMonths(i).ToString("yyyy MM")));
            }
        }
    }
}

public void SubmitButtonClick(object sender, EventArgs e)
{
    foreach (var lvItem in MyListView.Items)
    {
        if (lvItem.ItemType == ListViewItemType.DataItem)
        {
            DropDownList dr = lvItem.FindControl("DaysDropDownList") as DropDownList;
            FileUpload fl = lvItem.FindControl("FileUpload") as FileUpload;
            if (fl.HasFile)
            {
                string filename = UploadFile(fl, dr.SelectedValue);
                this.Application.DataLayer.SaveUploadRecord(UserID, 0, (int)UploadType.Upload, dr.SelectedValue, filename);
            }
        }
    }
}
4

2 に答える 2

0

DropdownList に ListItem を設定すると、それに応じて ListItem の Selected プロパティを設定できます。

于 2012-07-10T05:50:49.123 に答える
0

ドロップダウンリストをバインドする関数を作成し、ページが読み込まれるたびに (page_load イベントで) この関数を呼び出しますが、呼び出す前に既存のドロップダウンリスト データソースをクリアします。

于 2012-07-10T06:02:11.320 に答える