Ajax Popupcontrolextender 问题

发布于 2024-10-13 04:19:03 字数 3490 浏览 7 评论 0原文

我有一个奇怪的问题。我按照这里的示例(http://www.4guysfromrolla.com/articles/071107-1.aspx)显示ajax弹出窗口,但它无法正常工作。

我遇到的问题是图像属性设置不正确,我检查了 Firebug,这是加载后我在第 1 页上得到的。

<img src="StyleSheets/magglass.jpg" id="mainContent_TheGrid_MagGlass_0">

现在奇怪的是,如果我转到第 2 页,则所有图像的 onmouseover 事件都会正确设置,如果我返回第 1 页,它也会正确设置,例如,

<img src="StyleSheets/magglass.jpg" onmouseover="$find('pce0').showPopup(); " id="mainContent_TheGrid_MagGlass_0">

我单步执行代码并确认 rowcreated 事件正在触发我的网格,每一行有

什么想法吗?

我的代码与示例略有不同,请参见下面的

protected void TheGrid_RowCreated(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        // Programmatically reference the PopupControlExtender
        PopupControlExtender pce = e.Row.FindControl("TheGrid_PopupControlExtender") as PopupControlExtender;

        // Set the BehaviorID
        string behaviorID = string.Concat("pce", e.Row.RowIndex);
        pce.BehaviorID = behaviorID;

        // Programmatically reference the Image control
        Image i = (Image)e.Row.Cells[0].FindControl("MagGlass");

        // Add the client-side attributes (onmouseover & onmouseout) 
        string OnMouseOverScript = string.Format("$find('{0}').showPopup(); ", behaviorID);


        i.Attributes.Add("onmouseover", OnMouseOverScript);

    }
}

GetDynamicContent 方法,它添加了 hidepopup 方法。

   [System.Web.Services.WebMethodAttribute(), System.Web.Script.Services.ScriptMethodAttribute()]
public static string GetDynamicContent(string contextKey)
{

    GridView MyGrid = (GridView)HttpContext.Current.Session["TheGrid"];

    var MyVar = from GridViewRow MyRow in MyGrid.Rows
                where MyRow.Cells[MyRow.Cells.Count - 1].Text == contextKey
                select MyRow;

    //This is the selected row by the user
    GridViewRow MyGridRow = MyVar.SingleOrDefault();

    //MyGridRow.Cells[3].Text is the log entry.  
    string MyTable = @"<table class=""PopUpTable""><tr><td><textarea class=""textarea"">"
       + MyGridRow.Cells[3].Text + "</textarea></td>";

    //MyGridRow.RowIndex is used to determine the name of popup control for the hidepopup script
    MyTable += "<td><button type=\"button\" class=\"PopUpButton\" onclick=\"$find('pce" + MyGridRow.RowIndex.ToString() + "').hidePopup();\">Close</button></td></tr></table>";

    return MyTable;

}

这是 pageIndexChanging 事件

  protected void TheGrid_PageIndexChanging(object sender, GridViewPageEventArgs e)
{

    TheGrid.PageIndex = e.NewPageIndex;      

        LoadFromDB();

}

LoadFromDB 方法:

private void LoadFromDB()
{
    try
    {
        LOGDBDataContext LDC = new LOGDBDataContext(ConfigurationManager.ConnectionStrings[Constants.ConnectionStringName].ConnectionString);



        string Query = @"DateTimeStamp >= @0 and DateTimeStamp <= @1"; 


        var Tolo = LDC
                   .Logs
                   .Where(Query, this.FromCalendar.SelectedDate, this.ToCalendar.SelectedDate)
                   .OrderBy("DateTimeStamp desc")
                   .Select("new (LogID, DateTimeStamp, Organization, LogEntry, ServerHostname)");


        TheGrid.DataSource = Tolo;
        TheGrid.DataBind();



    }


    catch (Exception ex)
    {
    //do something here
    }
}

I have a bizarre problem. I have followed the example here (http://www.4guysfromrolla.com/articles/071107-1.aspx) to display an ajax popup, but it is not working properly.

The problem I have is that the image attributes are not set properly, I checked with Firebug and this is what I get on page 1 after load.

<img src="StyleSheets/magglass.jpg" id="mainContent_TheGrid_MagGlass_0">

Now the bizarre, if I go to page 2, the onmouseover event is set properly for all images and if I come back to page 1, it is set properly too, e.g.

<img src="StyleSheets/magglass.jpg" onmouseover="$find('pce0').showPopup(); " id="mainContent_TheGrid_MagGlass_0">

I stepped through the code and confirmed that the rowcreated event is firing for my grid, for each row

Any Ideas?

My code is slightly different to the example, see below

protected void TheGrid_RowCreated(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        // Programmatically reference the PopupControlExtender
        PopupControlExtender pce = e.Row.FindControl("TheGrid_PopupControlExtender") as PopupControlExtender;

        // Set the BehaviorID
        string behaviorID = string.Concat("pce", e.Row.RowIndex);
        pce.BehaviorID = behaviorID;

        // Programmatically reference the Image control
        Image i = (Image)e.Row.Cells[0].FindControl("MagGlass");

        // Add the client-side attributes (onmouseover & onmouseout) 
        string OnMouseOverScript = string.Format("$find('{0}').showPopup(); ", behaviorID);


        i.Attributes.Add("onmouseover", OnMouseOverScript);

    }
}

The GetDynamicContent Method is below, which adds the hidepopup method.

   [System.Web.Services.WebMethodAttribute(), System.Web.Script.Services.ScriptMethodAttribute()]
public static string GetDynamicContent(string contextKey)
{

    GridView MyGrid = (GridView)HttpContext.Current.Session["TheGrid"];

    var MyVar = from GridViewRow MyRow in MyGrid.Rows
                where MyRow.Cells[MyRow.Cells.Count - 1].Text == contextKey
                select MyRow;

    //This is the selected row by the user
    GridViewRow MyGridRow = MyVar.SingleOrDefault();

    //MyGridRow.Cells[3].Text is the log entry.  
    string MyTable = @"<table class=""PopUpTable""><tr><td><textarea class=""textarea"">"
       + MyGridRow.Cells[3].Text + "</textarea></td>";

    //MyGridRow.RowIndex is used to determine the name of popup control for the hidepopup script
    MyTable += "<td><button type=\"button\" class=\"PopUpButton\" onclick=\"$find('pce" + MyGridRow.RowIndex.ToString() + "').hidePopup();\">Close</button></td></tr></table>";

    return MyTable;

}

This is the pageIndexChanging event

  protected void TheGrid_PageIndexChanging(object sender, GridViewPageEventArgs e)
{

    TheGrid.PageIndex = e.NewPageIndex;      

        LoadFromDB();

}

The LoadFromDB method here:

private void LoadFromDB()
{
    try
    {
        LOGDBDataContext LDC = new LOGDBDataContext(ConfigurationManager.ConnectionStrings[Constants.ConnectionStringName].ConnectionString);



        string Query = @"DateTimeStamp >= @0 and DateTimeStamp <= @1"; 


        var Tolo = LDC
                   .Logs
                   .Where(Query, this.FromCalendar.SelectedDate, this.ToCalendar.SelectedDate)
                   .OrderBy("DateTimeStamp desc")
                   .Select("new (LogID, DateTimeStamp, Organization, LogEntry, ServerHostname)");


        TheGrid.DataSource = Tolo;
        TheGrid.DataBind();



    }


    catch (Exception ex)
    {
    //do something here
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蓝戈者 2024-10-20 04:19:03

没关系,找到答案了。

  1. 糟糕的调试
  2. 糟糕的尝试
    清除不是的gridview
    由页面更改事件调用

Incompetence thy name is yomismo

Never Mind, found the answer.

  1. Poor Debugging
  2. A poor attempt at
    clearing the gridview that was not
    invoked by the pagechanging event

Incompetence thy name is yomismo

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文