【问题标题】:How to populate a GridView in a pop-up that is inside an UpdatePanel after a button click inside an UpdatePanel在 UpdatePanel 内单击按钮后,如何在 UpdatePanel 内的弹出窗口中填充 GridView
【发布时间】:2014-09-08 20:23:28
【问题描述】:

我有一个GridView,其中有一个ImageButton。当点击它时,它会运行一个查询并从结果中填充一个GridView(或者它应该:

<asp:UpdatePanel runat="server" ClientIDMode="Static" ID="TasksUpdatePanel" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:GridView ShowHeaderWhenEmpty="false" AlternatingRowStyle-BackColor="#EBE9E9" AutoGenerateColumns="false" OnSorting="yourTasksGV_Sorting" AllowSorting="true" ID="yourTasksGV" runat="server" ClientIDMode="Static" EmptyDataText="You currently have no tasks assigned to you" OnRowDataBound="yourTasksGV_RowDataBound" OnRowCreated="yourTasksGV_RowCreated" OnRowCommand="yourTasksGV_RowCommand">
            <Columns>
                <asp:HyperLinkField Target="_self" DataNavigateUrlFields="Task Detail" DataTextField="Task Name" DataNavigateUrlFormatString="" HeaderText="Task Detail" SortExpression="Task Name" ItemStyle-CssClass="taskTableColumn" />
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:ImageButton ImageUrl="~/theImages/Dependencies.png" CssClass="gvTaskDep" runat="server" ID="btnShowDepend" CommandName="TaskDepend" CommandArgument='<%#Eval("Object") + "," + Eval("FK") %>' ToolTip="Click to view Dependencies" />
                    </ItemTemplate>
                </asp:TemplateField>
              </Columns>
        </asp:GridView>
    </ContentTemplate>
</asp:UpdatePanel>

ObjectFK 来自填充上述GridView 的原始查询。

后面的代码:

protected void yourTasksGV_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "TaskDepend")
    {
        string[] id = e.CommandArgument.ToString().Split(',');
        connString = @"";
        string objectid = id[0];
        string fkobjectid = id[1];
        string queryStringParent =
                           string.Format(@"SELECT
                                 CT.OBJECTID 'Object ID'
                                 ,LTRIM(RTRIM(CT.ATTR2739)) 'Task Name'
                                 ,UA.USERNAME 'Manager'
                                 ,CT.ATTR2941 'Task Start Date'
                                 ,LTRIM(RTRIM(CT.ATTR2812)) 'Status'
                                 ,CT.ATTR2752 'Due Date'
                                 ,CT.ATTR2757 'Completed Date'
                                 ,CT.ATTR2849 'Checked Date'
                                 ,LTRIM(RTRIM(CT.ATTR2847)) 'Checked Status'
                                 ,LTRIM(RTRIM(CT.ATTR2848)) 'Checked User'
                                 ,CT.FK2744 'Dependent Task'
                   FROM HSI.RMOBJECTINSTANCE1224 CT
                                 LEFT JOIN HSI.RMOBJECTINSTANCE1232 S ON S.OBJECTID = CT.FK2940
                                 LEFT JOIN HSI.USERACCOUNT UA ON UA.USERNUM = (S.FK2852 * -1)
                   WHERE CT.ACTIVESTATUS = 0 AND CT.OBJECTID = '{0}'", fkobjectid);
        string queryStringChildren =
           string.Format(@"SELECT
                                 CT.OBJECTID 'Object ID'
                                 ,LTRIM(RTRIM(CT.ATTR2739)) 'Task Name'
                                 ,UA.USERNAME 'Manager'
                                 ,CT.ATTR2941 'Task Start Date'
                                 ,LTRIM(RTRIM(CT.ATTR2812)) 'Status'
                                 ,CT.ATTR2752 'Due Date'
                                 ,CT.ATTR2757 'Completed Date'
                                 ,CT.ATTR2849 'Checked Date'
                                 ,LTRIM(RTRIM(CT.ATTR2847)) 'Checked Status'
                                 ,LTRIM(RTRIM(CT.ATTR2848)) 'Checked User'
                                 ,CT.FK2744 'Dependent Task'
                   FROM HSI.RMOBJECTINSTANCE1224 CT
                                 LEFT JOIN HSI.RMOBJECTINSTANCE1232 S ON S.OBJECTID = CT.FK2940
                                 LEFT JOIN HSI.USERACCOUNT UA ON UA.USERNUM = (S.FK2852 * -1)
                   WHERE CT.ACTIVESTATUS = 0 AND CT.FK2744 = '{0}'", objectid);

        using (SqlConnection connection = new SqlConnection(connString))
        {
            //Get Parent Task
            SqlCommand command = new SqlCommand(queryStringParent, connection);
            connection.Open();

            SqlDataReader reader = command.ExecuteReader();
            gvParentTasks.DataSource = reader; //not working
            gvParentTasks.DataBind(); //not working
            upParentTasks.Update(); //not working
            if (!string.IsNullOrEmpty(fkobjectid) && fkobjectid != "&nbsp;")
            {
                // Call Read before accessing data. 
                while (reader.Read())
                {
                    //ddlCli.Items.Add(new System.Web.UI.WebControls.ListItem(reader[0].ToString().TrimEnd(), reader[0].ToString().TrimEnd()));

                }
            }
            // Call Close when done reading.
            reader.Close();

            //Get Child Tasks
            command = new SqlCommand(queryStringChildren, connection);

            reader = command.ExecuteReader();

            // Call Read before accessing data. 
            while (reader.Read())
            {
                //ddlCli.Items.Add(new System.Web.UI.WebControls.ListItem(reader[0].ToString().TrimEnd(), reader[0].ToString().TrimEnd()));

            }

            // Call Close when done reading.
            reader.Close();
        }
    }
}

我有一个弹出窗口,其中有 GridView:

<div id="popupDep">
    <a id="popupDepClose" title="Close Window">x</a>
    <h3>Parent Dependencies</h3>
    <div id="dvFirst" class="parentGridHolder">
        <asp:UpdatePanel ID="upParentTasks" runat="server" UpdateMode="Conditional" ClientIDMode="Static">
            <ContentTemplate>
                <asp:GridView ID="gvParentTasks" runat="server" AllowSorting="false" ShowHeaderWhenEmpty="false" AlternatingRowStyle-BackColor="#EBE9E9" AutoGenerateColumns="false" ClientIDMode="Static">
                    <Columns>
                        <asp:BoundField DataField="Task Name" HeaderText="Task Name" SortExpression="Task Name" ItemStyle-CssClass="taskTableColumn" />
                        <asp:BoundField DataField="Status" HeaderText="Status" SortExpression="Status" ItemStyle-CssClass="taskTableColumn" />
                        <asp:BoundField DataField="Due Date" HeaderText="Due" SortExpression="Due Date" ItemStyle-CssClass="taskTableColumn" />
                        <asp:BoundField DataField="Manager" HeaderText="Manager" SortExpression="Manager" ItemStyle-CssClass="taskTableColumn" />
                    </Columns>
                </asp:GridView>
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
    <h3>Children Dependencies</h3>
    <div id="dvSecond" class="childrenGridHolder">
        <asp:UpdatePanel ID="upChildrenTasks" runat="server" UpdateMode="Conditional" ClientIDMode="Static">
            <ContentTemplate>
                <asp:GridView ID="gvChildrenTasks" runat="server" AllowSorting="false" ShowHeaderWhenEmpty="false" AlternatingRowStyle-BackColor="#EBE9E9" AutoGenerateColumns="false" ClientIDMode="Static">
                    <Columns>
                        <asp:BoundField DataField="Task Name" HeaderText="Task Name" SortExpression="Task Name" ItemStyle-CssClass="taskTableColumn" />
                        <asp:BoundField DataField="Status" HeaderText="Status" SortExpression="Status" ItemStyle-CssClass="taskTableColumn" />
                        <asp:BoundField DataField="Due Date" HeaderText="Due" SortExpression="Due Date" ItemStyle-CssClass="taskTableColumn" />
                        <asp:BoundField DataField="Manager" HeaderText="Manager" SortExpression="Manager" ItemStyle-CssClass="taskTableColumn" />
                    </Columns>
                </asp:GridView>
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
</div>

显示弹窗的JQuery:

$(document).ready(function () {
    $("#btnShowDepend").click(function (e) {
        e.preventDefault();
        centerPopupDep();
        loadPopupDep();
    });
});

当我单击btnShowDepend 图像时,会显示弹出窗口,但GridView 中没有显示任何内容。另外,因为我使用的是 ID,所以如果有多行,则只有第一个按钮会触发弹出窗口。

如何修改代码以使弹出窗口显示为填充了GridView,并且每个代表单个行的按钮都处理自己的点击?

【问题讨论】:

  • .ready 函数是否在调用任何查询数据调用之前首先触发..?它是否加载网格将是我的第一个问题.. 从那里我会缩小范围并确定它在过程中的哪个位置失败和或没有产生正确的结果.. 我强烈建议将该数据库查询转换为存储利用参数化查询的过程..在当前状态下很难遵循这样的代码

标签: c# jquery asp.net gridview


【解决方案1】:

在 sted 中使用一个类来绑定一个 id

平均售价:

<asp:UpdatePanel runat="server" ClientIDMode="Static" ID="TasksUpdatePanel" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:GridView ShowHeaderWhenEmpty="false" AlternatingRowStyle-BackColor="#EBE9E9" AutoGenerateColumns="false" OnSorting="yourTasksGV_Sorting" AllowSorting="true" ID="yourTasksGV" runat="server" ClientIDMode="Static" EmptyDataText="You currently have no tasks assigned to you" OnRowDataBound="yourTasksGV_RowDataBound" OnRowCreated="yourTasksGV_RowCreated" OnRowCommand="yourTasksGV_RowCommand">
            <Columns>
                <asp:HyperLinkField Target="_self" DataNavigateUrlFields="Task Detail" DataTextField="Task Name" DataNavigateUrlFormatString="" HeaderText="Task Detail" SortExpression="Task Name" ItemStyle-CssClass="taskTableColumn" />
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:ImageButton ImageUrl="~/theImages/Dependencies.png" CssClass="gvTaskDep btnShowDepend" runat="server" ID="btnShowDepend" CommandName="TaskDepend" CommandArgument='<%#Eval("Object") + "," + Eval("FK") %>' ToolTip="Click to view Dependencies" />
                    </ItemTemplate>
                </asp:TemplateField>
              </Columns>
        </asp:GridView>
    </ContentTemplate>
</asp:UpdatePanel>

jquery:

$(document).ready(function () {
    $(".btnShowDepend").click(function (e) {
        e.preventDefault();
        centerPopupDep();
        loadPopupDep();
    });
});

为按钮添加了 btnShowDepend 类,这可以绑定到 Jquery。 如果你想传输一个 id,你可以将它添加为 alt 并通过获取 .attr('alt') 来获取它

【讨论】:

  • 我有来自CommandArgument 的两个参数。无论如何我可以使用它吗?我正在将CommandArgument 转移到在查询中使用它的RowCommand 函数。我现在想知道如何填充 GridView :) 谢谢。
  • 在按钮 alt 中设置两者,用 , 分隔
  • 我让那部分工作了:)。现在填充 GridView:/ 知道为什么它没有填充吗?
  • 您应该将数据从阅读器转换为对象,绑定到 sql-reader 不起作用。将其转换为列表 并绑定该列表
  • 我在RowCommand 函数中设置了一个断点,但是当我点击ImageButton 时,断点没有命中。
猜你喜欢
  • 2012-09-29
  • 1970-01-01
  • 1970-01-01
  • 2016-08-14
  • 2021-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多