如何根据驻留在updatePanel中的DataGrid中的行选择更新控件?

我有一个网格[Grid1],当点击一个按钮[search]时构建它的dataRows,我设法通过将它放在UpdatePanel中进行Ajax化,它运行正常。 在对网格1进行Ajax化之前,另一个网格[Grid2]和一些其他控件[文本和标签]用于在单击网格1中的行时进行填充/更新。

Grid2和其他控件用于在网格的OnItemCommand事件上填充/更新1.ItItemCommand中的代码将相关数据绑定到Grid2和其他控件。

将Grid 1放入更新面板后,它们停止更新。 如果我将Grid2和其他控件放在同一个更新面板中,但是页面的设计方式使得我不能在与第一个Grid相同的UpdatePanel中使用这些控件,也不打算使用另一个更新面板,它将正常工作。

我希望我有所作为。 我是.Net的新手,所以请原谅。 请在下面找到代码。

         <asp:ButtonColumn Text="Add" ButtonType="LinkButton" HeaderText="Add" CommandName="Load" ItemStyle-cssClass="Col_9_Item_2">      

后面代码中的代码停止工作

 protected void grdJobs_ItemCommand(object source, DataGridCommandEventArgs e) { if (e.CommandName == "Load") { functionToBindDataToGrid2(); functionToBindDataToOtherControls(); } } protected void grdJobs_ItemDataBound(object sender, DataGridItemEventArgs e) { e.Item.Attributes.Add("onclick", "javascript:__doPostBack('grdJobs$ctl" + ((Convert.ToInt32(e.Item.ItemIndex + 3).ToString("00"))) + "$ctl00','')"); } 

GridView是一个复杂的asp.net服务器控件。 在UpdatePanel内部更新Grid1后,您将很难更新Grid2。 但是,在Grid1更新后,可以在客户端上执行JavaScript。 您可以在更新面板内更新Grid1,在更新Grid1之后执行JavaScript,这将更新页面上的HTML。 问题是用Javascript更新Grid2将是一项噩梦般的工作量。

这是我正在谈论的一个例子: 在ASP.NET中使用JavaScript的Ajax Enabled Gridview 。 这是一个彻头彻尾的黑客,大量的工作,你的同事会在他们必须维护它时讨厌你。

如果你想更新标签或下拉列表,那么这是可能的,但是使用Javascript更新GridView并在回发中保持这些更新是一项艰巨的挑战。

在UpdatePanel的属性中,将更新模式设置为“Conditional”,将ChildrenAsTriggers设置为“true”。

另一种选择是在更新面板内移动按钮,这样您就不必拥有触发器。

在一个页面上使用多个UpdatePanel。 它不会影响布局。

然后,您可以使用触发器(对于面板)来影响您想要受影响的控件。

这是一个可以帮助您理解的页面。

http://www.asp.net/ajax/tutorials/understanding-asp-net-ajax-updatepanel-triggers

您的问题取决于您在行单击时触发回发的方式,即:此方法

 protected void grdJobs_ItemDataBound(object sender, DataGridItemEventArgs e) { e.Item.Attributes.Add("onclick", "javascript:__doPostBack('grdJobs$ctl" + ((Convert.ToInt32(e.Item.ItemIndex + 3).ToString("00"))) + "$ctl00','')"); } 

手动编写__doPostBack脚本通常总是一个坏主意。 我相信您需要使用的是ClientScriptManager.GetPostBackEventReference ,它将为您创建一个类似的回发脚本,但会考虑各种其他事情,包括控件的AJAX化。

尝试这样的事情:

 protected void grdJobs_ItemDataBound(object sender, DataGridItemEventArgs e) { e.Item.Attributes.Add("onclick", ClientScriptManager.GetPostBackEventReference(e.Item, string.Empty); }