在UpdatePanel中保留数据绑定GridView的最佳方法

时间:2013-12-04 14:16:34

标签: c# asp.net ajax gridview updatepanel

我在GridView内有一个UpdatePanel控件和一个简单的TextBox

将文本输入TextBox(并单击一个按钮)后,将从数据库中检索结果列表并绑定到GridView

        grd.DataSource = DataManager.GetFilteredList(txt.Text);
        grd.DataBind();

返回的每一行都有一个LinkButton TemplateField列,其中包含CommandArgumentCommandName个参数。

我希望在单击该按钮时运行一些代码,但因为即使在部分回发时也会重新创建整个PageGridView会丢失其数据。通常我会在查询字符串中传递必要的参数,但因为这是{i} UpdatePanel我不能这样做。

对此有什么好的和干净的方法?我想到的只是,而不是使用RowCommand来创建带有简单HTML GridView元素的<a>按钮,在其HRef中传递查询字符串参数}参数,然后触发一个完整的回发,最后在Page_Load事件中进行操作,但这看起来很笨拙。

这是请求的ASP标记:

    <asp:UpdatePanel ID="upd" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <div class="input-group">
                <asp:TextBox ID="txt" runat="server" CssClass="form-control"></asp:TextBox>

                <div class="input-group-btn">
                    <asp:LinkButton ID="btn" CssClass="btn btn-default" runat="server" OnClick="btn_Click">Search</asp:LinkButton>
                </div>
            </div>

            <hr />
            <asp:GridView ID="grd" runat="server" AutoGenerateColumns="False" DataKeyNames="Id"  ItemType="xxx.Policy" AllowPaging="True" PageSize="10" OnRowCommand="grd_RowCommand">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:LinkButton ID="btn" CommandName="Connect" CommandArgument='<%#: Item.Id %>' runat="server">Connect</asp:LinkButton> 
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="grd" EventName="RowCommand" />
        </Triggers>
    </asp:UpdatePanel>

感谢。

1 个答案:

答案 0 :(得分:0)

使用RowCommand事件

protected void grd_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Connect")
    {
        //Add your code to connect using Item.Id
        //get Item.Id value using e.CommandArgument.ToString()
    }
}