【问题标题】:DropDown does not filter out ASCX control properlyDropDown 没有正确过滤掉 ASCX 控件
【发布时间】:2011-02-12 16:40:44
【问题描述】:

我的表单上有一个下拉列表,它应该过滤掉或显示整个项目或特定迭代的标签云。不过这很奇怪,因为当我从列表中选择某些迭代时会得到不同的结果。有时ascx控件根本不显示,有时显示标签云,但不正确,有时显示正确。我不知道为什么会这样...提前感谢您的帮助!

displaycloud.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> 

displaycloud.aspx.cs:

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

    SqlConnection conn = new SqlConnection(GetConnectionString());
    conn.Open();

    cmd = new SqlCommand("Select CONVERT(VARCHAR(10), StartDate, 103) + ' - ' + CONVERT(VARCHAR(10), EndDate, 103) AS Iteration, ProjectIterationID FROM Iterations WHERE ProjectID = '" + proj_id + "'", conn);

    cmd.CommandType = CommandType.Text;

    SqlDataAdapter da = new SqlDataAdapter(cmd);

    DataSet ds = new DataSet();

    da.Fill(ds);;

    conn.Close();

    if (!Page.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"));

    }
}


protected void filteroptions_SelectedIndexChanged(object sender, EventArgs e)
{

    string selected_iteration = filteroptions.SelectedValue;
    Session["iteration"] = selected_iteration;

}

ASCX CS 文件:

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);

    var tagSummaryNegative = from af in db.AgileFactors
                     join psf in db.ProjectStoryFactors on af.AgileFactorID equals psf.AgileFactorID
                     join s in db.Stories on psf.StoryID equals s.StoryID
                     join pim in db.ProjectIterationMembers on s.ProjectIterationMemberID equals pim.ProjectIterationMemberID
                     join it in db.Iterations on pim.ProjectIterationID equals it.ProjectIterationID
                     join pro in db.Projects on it.ProjectID equals pro.ProjectID
                     where pro.ProjectID == pro_id &&
                           pro.ProjectID == it.ProjectID &&
                           it.ProjectIterationID == pim.ProjectIterationID &&
                           pim.ProjectIterationMemberID == s.ProjectIterationMemberID && s.StoryCategoryID == 1 &&
                           s.StoryID == psf.StoryID &&
                           psf.AgileFactorID == af.AgileFactorID
                     group af by af.Name into tagGroup

                     select new
                     {

                         Tag = tagGroup.Key,
                         tagCount = tagGroup.Count()

                     };

    var tagSummaryNegativeIteration = from af in db.AgileFactors
                             join psf in db.ProjectStoryFactors on af.AgileFactorID equals psf.AgileFactorID
                             join s in db.Stories on psf.StoryID equals s.StoryID
                             join pim in db.ProjectIterationMembers on s.ProjectIterationMemberID equals pim.ProjectIterationMemberID
                             join it in db.Iterations on pim.ProjectIterationID equals it.ProjectIterationID
                             join pro in db.Projects on it.ProjectID equals pro.ProjectID
                             where pro.ProjectID == pro_id &&
                                   pro.ProjectID == it.ProjectID &&
                                   it.ProjectIterationID == iteration_id &&
                                   it.ProjectIterationID == pim.ProjectIterationID &&
                                   pim.ProjectIterationMemberID == s.ProjectIterationMemberID && s.StoryCategoryID == 1 &&
                                   s.StoryID == psf.StoryID &&
                                   psf.AgileFactorID == af.AgileFactorID
                             group af by af.Name into tagGroup

                             select new
                             {

                                 Tag = tagGroup.Key,
                                 tagCount = tagGroup.Count()

                             };

    var tagSummaryPositive = from af in db.AgileFactors
                             join psf in db.ProjectStoryFactors on af.AgileFactorID equals psf.AgileFactorID
                             join s in db.Stories on psf.StoryID equals s.StoryID
                             join pim in db.ProjectIterationMembers on s.ProjectIterationMemberID equals pim.ProjectIterationMemberID
                             join it in db.Iterations on pim.ProjectIterationID equals it.ProjectIterationID
                             join pro in db.Projects on it.ProjectID equals pro.ProjectID
                             where pro.ProjectID == pro_id &&
                                   pro.ProjectID == it.ProjectID &&
                                   it.ProjectIterationID == pim.ProjectIterationID &&
                                   pim.ProjectIterationMemberID == s.ProjectIterationMemberID && s.StoryCategoryID == 0 &&
                                   s.StoryID == psf.StoryID &&
                                   psf.AgileFactorID == af.AgileFactorID
                             group af by af.Name into tagGroup

                             select new
                             {

                                 Tag = tagGroup.Key,
                                 tagCount = tagGroup.Count()

                             };

    var tagSummaryPositiveIteration = from af in db.AgileFactors
                             join psf in db.ProjectStoryFactors on af.AgileFactorID equals psf.AgileFactorID
                             join s in db.Stories on psf.StoryID equals s.StoryID
                             join pim in db.ProjectIterationMembers on s.ProjectIterationMemberID equals pim.ProjectIterationMemberID
                             join it in db.Iterations on pim.ProjectIterationID equals it.ProjectIterationID
                             join pro in db.Projects on it.ProjectID equals pro.ProjectID
                             where pro.ProjectID == pro_id &&
                                   pro.ProjectID == it.ProjectID &&
                                   it.ProjectIterationID == iteration_id &&
                                   it.ProjectIterationID == pim.ProjectIterationID &&
                                   pim.ProjectIterationMemberID == s.ProjectIterationMemberID && s.StoryCategoryID == 0 &&
                                   s.StoryID == psf.StoryID &&
                                   psf.AgileFactorID == af.AgileFactorID
                             group af by af.Name into tagGroup

                             select new
                             {

                                 Tag = tagGroup.Key,
                                 tagCount = tagGroup.Count()

                             };


    int maxTagFrequencyNegative = (from t in tagSummaryNegative select (int?)t.tagCount).Max() ?? 0;
    int maxTagFrequencyPositive = (from t in tagSummaryPositive select (int?)t.tagCount).Max() ?? 0;

    int maxTagFrequencyNegativeIteration = (from t in tagSummaryNegativeIteration select (int?)t.tagCount).Max() ?? 0;
    int maxTagFrequencyPositiveIteration = (from t in tagSummaryPositiveIteration select (int?)t.tagCount).Max() ?? 0;


    var tagCloudNegative = from af in db.AgileFactors
                   join psf in db.ProjectStoryFactors on af.AgileFactorID equals psf.AgileFactorID
                   join s in db.Stories on psf.StoryID equals s.StoryID
                   join pim in db.ProjectIterationMembers on s.ProjectIterationMemberID equals pim.ProjectIterationMemberID
                   join it in db.Iterations on pim.ProjectIterationID equals it.ProjectIterationID
                   join pro in db.Projects on it.ProjectID equals pro.ProjectID
                   where pro.ProjectID == pro_id &&
                         pro.ProjectID == it.ProjectID &&
                         it.ProjectIterationID == pim.ProjectIterationID &&
                         pim.ProjectIterationMemberID == s.ProjectIterationMemberID && s.StoryCategoryID == 1 &&
                         s.StoryID == psf.StoryID &&
                         psf.AgileFactorID == af.AgileFactorID
                   group af by af.Name into tagGroup
                   select new
                   {

                       Tag = tagGroup.Key,
                       weight = (double)tagGroup.Count() / maxTagFrequencyNegative * 100
                   };

    var tagCloudNegativeIteration = from af in db.AgileFactors
                           join psf in db.ProjectStoryFactors on af.AgileFactorID equals psf.AgileFactorID
                           join s in db.Stories on psf.StoryID equals s.StoryID
                           join pim in db.ProjectIterationMembers on s.ProjectIterationMemberID equals pim.ProjectIterationMemberID
                           join it in db.Iterations on pim.ProjectIterationID equals it.ProjectIterationID
                           join pro in db.Projects on it.ProjectID equals pro.ProjectID
                           where pro.ProjectID == pro_id &&
                                 pro.ProjectID == it.ProjectID &&
                                 it.ProjectIterationID == iteration_id &&
                                 it.ProjectIterationID == pim.ProjectIterationID &&
                                 pim.ProjectIterationMemberID == s.ProjectIterationMemberID && s.StoryCategoryID == 1 &&
                                 s.StoryID == psf.StoryID &&
                                 psf.AgileFactorID == af.AgileFactorID
                           group af by af.Name into tagGroup
                           select new
                           {

                               Tag = tagGroup.Key,
                               weight = (double)tagGroup.Count() / maxTagFrequencyNegative * 100
                           };

    var tagCloudPositive = from af in db.AgileFactors
                           join psf in db.ProjectStoryFactors on af.AgileFactorID equals psf.AgileFactorID
                           join s in db.Stories on psf.StoryID equals s.StoryID
                           join pim in db.ProjectIterationMembers on s.ProjectIterationMemberID equals pim.ProjectIterationMemberID
                           join it in db.Iterations on pim.ProjectIterationID equals it.ProjectIterationID
                           join pro in db.Projects on it.ProjectID equals pro.ProjectID
                           where pro.ProjectID == pro_id &&
                                 pro.ProjectID == it.ProjectID &&
                                 it.ProjectIterationID == pim.ProjectIterationID &&
                                 pim.ProjectIterationMemberID == s.ProjectIterationMemberID && s.StoryCategoryID == 0 &&
                                 s.StoryID == psf.StoryID &&
                                 psf.AgileFactorID == af.AgileFactorID
                           group af by af.Name into tagGroup
                           select new
                           {

                               Tag = tagGroup.Key,
                               weight = (double)tagGroup.Count() / maxTagFrequencyNegative * 100
                           };

    var tagCloudPositiveIteration = from af in db.AgileFactors
                                    join psf in db.ProjectStoryFactors on af.AgileFactorID equals psf.AgileFactorID
                                    join s in db.Stories on psf.StoryID equals s.StoryID
                                    join pim in db.ProjectIterationMembers on s.ProjectIterationMemberID equals pim.ProjectIterationMemberID
                                    join it in db.Iterations on pim.ProjectIterationID equals it.ProjectIterationID
                                    join pro in db.Projects on it.ProjectID equals pro.ProjectID
                                    where pro.ProjectID == pro_id &&
                                          pro.ProjectID == it.ProjectID &&
                                          it.ProjectIterationID == iteration_id &&
                                          it.ProjectIterationID == pim.ProjectIterationID &&
                                          pim.ProjectIterationMemberID == s.ProjectIterationMemberID && s.StoryCategoryID == 0 &&
                                          s.StoryID == psf.StoryID &&
                                          psf.AgileFactorID == af.AgileFactorID
                                    group af by af.Name into tagGroup
                                    select new
                                    {

                                        Tag = tagGroup.Key,
                                        weight = (double)tagGroup.Count() / maxTagFrequencyNegative * 100
                                    };

    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();


    }

}

【问题讨论】:

    标签: c# asp.net linq asp.net-ajax ascx


    【解决方案1】:

    据我了解,您使用 filteroptions_SelectedIndexChanged 方法将选定的迭代放入会话中。然后使用标签云控件上的会话值来绑定正确的数据。然而,事件处理程序在页面和控件的加载事件之后执行。我建议您在稍后的某个时间点绑定标签云(例如 Page_PreRender)。

    编辑: 我认为您应该将 ASCX.CS 文件中的 Page_Load 方法替换为以下 sn-p:

        protected void Page_Load(object sender, EventArgs e)
        {
            proj_name = Request.QueryString["project"].ToString();
            proj_id = Request.QueryString["id"].ToString();
        }
    
        protected void Page_PreRender(object sender, EventArgs e)
        {
            if (String.IsNullOrEmpty((string)Session["iteration"]))
            {
                iteration = "0";
            }
            else
            {
                iteration = (string)Session["iteration"];
            }
    
            BindTagCloud();
        }
    

    【讨论】:

    • 您好,Oleg,感谢您的回复,但我不太清楚您的意思。 Cloud 你贴一些示例代码?
    • 我这几天一直在尝试解决这个问题!太棒了,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多