我使用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();
答案 0 :(得分:0)
我觉得我有几次你描述的问题。在我的情况下,它始终是因为在每个加载时运行的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(){
}
答案 1 :(得分:0)
由于您使用UpdateMode="Conditional"
作为更新面板,是否使用了该行
您的代码中的任何位置UpdatePanel2.Update();
?
如果不是,您可能需要在某些时候考虑UpdateMode="Always"
或在代码中包含.Update()调用。通过条件更新,您必须在后面的代码中手动触发Update()方法。
希望这有帮助!