【问题标题】:Dynamic binding Gridview not update using Update panel动态绑定 Gridview 不使用更新面板更新
【发布时间】:2013-06-19 09:49:38
【问题描述】:

我正在使用 GridView 在 asp.net 应用程序中显示数据,并且数据在 cs 端代码中动态绑定。

 <asp:UpdatePanel ID="UpdatePanel2" UpdateMode="Conditional"  runat="server">
        <ContentTemplate>
                <asp:GridView ID="grdView" runat="server" AutoGenerateColumns="false">
                    <Columns>
                    </Columns>  
                </asp:GridView>  
                </ContentTemplate>
                <Triggers><asp:AsyncPostBackTrigger ControlID="ImageButton1" EventName="Click"/></Triggers>
    </asp:UpdatePanel>

没有问题,但是当我使用更新面板更新我的 GridView 时,它会将新数据附加到 GridView 中显示的旧数据中。 https://www.diigo.com/item/image/41snq/s18c

我的cs端代码是:

DataTable dt = _oBase.FillDataTable("Exec sp_Detail");
DataTable dtC = dt.DefaultView.ToTable(true, new[] { "TimeName" }); // Filter Row Name

DataTable dtH;
    if (dt.Rows.Count > 0)
    {
        dtH = (from row in dt.AsEnumerable()
               let tags = row.Field<string>("ColumnName")
               orderby tags ascending
               select row).CopyToDataTable();
        dtH = dtH.DefaultView.ToTable(true, new[] { "ColumnName" }); // Filter Column Name
    }
    else
    {
        dtH = dt.DefaultView.ToTable(true, new[] { "ColumnName" });
    }

    var tFf = new TemplateField { HeaderTemplate = new MyGridViewTemplate(ListItemType.Header, "_", dtC, dt) };
    //tFF.HeaderText = "";
    tFf.HeaderStyle.CssClass = "mGrid";
    tFf.ItemTemplate = new MyGridViewTemplate(ListItemType.Item, "", dtC, dt);
    tFf.ItemStyle.Width = 50;
    grdView.Columns.Add(tFf);

    for (int i = 0; i < dtH.Rows.Count; i++)
    {
        var tF = new TemplateField { HeaderText = dtH.Rows[i][0].ToString() };
        tF.HeaderStyle.CssClass = "mGrid";
        tF.ItemTemplate = new MyGridViewTemplate(ListItemType.Item, dtH.Rows[i][0].ToString(), dtC, dt);
        tF.ItemStyle.Width = 130;
        grdView.Columns.Add(tF);
    }

    grdView.DataSource = dtC;
    grdView.DataBind();

【问题讨论】:

  • 你是如何更新你的网格的?你能发布那部分代码吗?

标签: c# asp.net gridview


【解决方案1】:

我觉得我遇到过你多次描述的问题。在我的情况下,这总是因为每次加载时都会运行 Page_Load 中的绑定,您从 hmm 运行的任何方法都可以说是单击按钮,在 Page_Load 之前运行,因此您需要将初始绑定包装在 if 测试中

protected void Page_Load(object sender, EventArgs e)
{
//Dont bind outside as it will overwrite the BindCode() 
    if (!IsPostBack)
    {
        //Bind inhere then it wil only bind on a full refresh and not on AJAX (partial postbacks)
    }
}

public void BindCode(){
}

【讨论】:

  • 根据您的说法,我使用 !IsPostBack 方法,然后在 OnClick 方法上绑定数据。这样对吗?如果是正确的,那么我也使用 Ispostback 方法,但问题仍然相同。
  • 我认为gridview的一些视图状态信息没有被删除,新数据追加到旧gridview中。
【解决方案2】:

由于您在更新面板中使用UpdateMode="Conditional",因此您是否使用该行 UpdatePanel2.Update(); 代码中的任何位置?

如果不是,您可能需要考虑 UpdateMode="Always" 或在某些时候在您的代码中包含 .Update() 调用。使用条件更新,您必须在后面的代码中手动触发 Update() 方法。

希望这会有所帮助!

【讨论】:

  • 是的,你是对的,我没有使用 UpdatePanel2.Update();在代码方面,所以我将其更改为 UpdateMode="Always"。但同样的问题出现在 GridView 中。
  • 我得到了在 GridView 控件属性中设置 EnableViewState="False" 的解决方案。谢谢大家..
猜你喜欢
  • 2017-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-19
  • 1970-01-01
相关资源
最近更新 更多