DropDown для фильтрации элемента управления ASCX - PullRequest
0 голосов
/ 05 февраля 2011

В моей форме есть раскрывающийся список, который должен отфильтровывать или отображать мое облако тегов для всего проекта или для конкретной итерации.На данный момент я не получаю никаких ошибок, но элемент управления ASCX, похоже, не обновляется.Вот мой код, любая помощь будет оценена!

ФАЙЛ ASPX:

<asp:DropDownList ID="filteroptions" runat="server" onselectedindexchanged="filteroptions_SelectedIndexChanged" AutoPostBack="true"></asp:DropDownList> 

<asp:UpdatePanel ID="UpdateIteration" runat="server">
                <ContentTemplate>
                        <TagCloud:TagCloudControl ID="TagCloudControl1" runat="server" />
                </ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="filteroptions" />
                </Triggers>
 </asp:UpdatePanel>

ФАЙЛ C #:

protected void Page_Load(object sender, EventArgs e)
{

    ...

    filteroptions.DataSource = ds;
    filteroptions.DataTextField = "Iteration";
    filteroptions.DataValueField = "ProjectIterationID";
    filteroptions.DataBind();

    filteroptions.Items.Insert(0, new System.Web.UI.WebControls.ListItem("Entire Project", "0"));

}

protected void filteroptions_SelectedIndexChanged(object sender, EventArgs e)
{
    string selected_iteration = filteroptions.SelectedValue;

    Session["iteration"] = selected_iteration;
}

ФАЙЛ ASCX CS:

string proj_id, proj_name, iteration;

protected void Page_Load(object sender, EventArgs e)
{
    proj_name = Request.QueryString["project"].ToString();
    proj_id = Request.QueryString["id"].ToString();

    if (String.IsNullOrEmpty((string)Session["iteration"]))
        iteration = "0";
    else
        iteration = (string)Session["iteration"]; 

    BindTagCloud();

}

private void BindTagCloud()
{

    int pro_id = Convert.ToInt32(proj_id);
    int iteration_id = Convert.ToInt32(iteration);

    ....

    if (iteration_id != 0)
    {
        ListView1.DataSource = tagCloudNegativeIteration;
        ListView1.DataBind();

        ListView2.DataSource = tagCloudPositiveIteration;
        ListView2.DataBind();

    }
    else
    {
        ListView1.DataSource = tagCloudNegative;
        ListView1.DataBind();

        ListView2.DataSource = tagCloudPositive;
        ListView2.DataBind();

    }

1 Ответ

0 голосов
/ 06 февраля 2011

Вы заменили некоторый код на «...», и поэтому этот ответ может быть неправильным.

С данным кодом я думаю, что проблема в методе Page_Load вашего файла .aspx.Похоже, что привязка набора данных к вашему выпадающему списку происходит также в Postback.Когда Страница получает обратную передачу, она свяжет набор данных с выпадающим списком и установит ее selectedValue для первого элемента.Когда это сделано, событие обрабатывается и вызывается его слушатель.В вашем методе filteroptions_SelectedIndexChanged вы проверяете значение selectedValue, и оно будет иметь значение текущего первого элемента, а не значение выбранного элемента.

Чтобы устранить эту проблему, установите привязку раскрывающегося списка в! IsPostBack) вот так:

protected void Page_Load(object sender, EventArgs e) {

    ...

    if (!IsPostBack)
    {
        filteroptions.DataSource = ds;
        filteroptions.DataTextField = "Iteration";
        filteroptions.DataValueField = "ProjectIterationID";
        filteroptions.DataBind();

        filteroptions.Items.Insert(0, new System.Web.UI.WebControls.ListItem("Entire Project", "0"))l
    }
}

Если этот ответ неверный, поскольку основан на неправильных предположениях, пожалуйста, предоставьте мне полный код, и я подумаю вместе с вами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...