如何根据驻留在updatePanel中的DataGrid中的行选择更新控件[DataGrid,TextBoxes和Label]?

man*_*j82 5 javascript c# asp.net updatepanel asp.net-ajax

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

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

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

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

 <asp:ScriptManager EnablePartialRendering="true" ID="ScriptManager1" runat="server"></asp:ScriptManager>
     <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers ="True">
      <ContentTemplate>
       <asp:DataGrid ID="grdJobs" runat="server" AllowPaging="true" 
        AlternatingItemStyle-CssClass="gridAltItemStyle"
        AutoGenerateColumns="False" CellPadding="0" 
        DataKeyField="code"
        CssClass="datagridBox" 
        GridLines="horizontal" 
        PagerStyle-Mode="NumericPages"
        HeaderStyle-CssClass="gridHeaderStyle" 
        ItemStyle-CssClass="gridItemStyle"
        PagerStyle-CssClass="gridPagerStyle" 
        Width="445px" OnPageIndexChanged="grdJobs_PageIndexChanged" OnItemCreated="grdJobs_ItemCreated" OnItemCommand="grdJobs_ItemCommand"             OnItemDataBound="grdJobs_ItemDataBound">
         <Columns>
          <asp:BoundColumn  DataField="J_ID" HeaderText="Job"></asp:BoundColumn>
          <asp:BoundColumn  DataField="Contract" HeaderText="Contract" ReadOnly="True"></asp:BoundColumn>
          <asp:BoundColumn  DataField="J_Fault_Line1" HeaderText="Fault" ReadOnly="True"></asp:BoundColumn>
          <asp:BoundColumn  DataField="j_p_id" HeaderText="Fault" Visible="false" ></asp:BoundColumn>
          <asp:ButtonColumn Text="<img src=images/addFeedback.gif style=border: 0px; alt=Add Feedback>" ButtonType="LinkButton"  HeaderText="Add"                   CommandName="Load" ItemStyle-cssClass="Col_9_Item_2"></asp:ButtonColumn>
         </Columns>
        </asp:DataGrid>
       <asp:ImageButton ID="cmdLkp"  ImageUrl="Images/search.gif" runat="server" OnClick="cmdLkp_Click" />

       </ContentTemplate>
      </asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)

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

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','')");
     }
Run Code Online (Sandbox Code Playgroud)

Nak*_*nch 2

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

下面是我正在讨论的示例:Ajax Enabled Gridview using JavaScript in ASP.NET。这完全是一种黑客行为,工作量巨大,而且当你的同事必须维护它时,他们会讨厌你。

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