2013-06-19 68 views
1

我使用GridView在asp.net應用程序中顯示數據,並且數據在cs側代碼中動態綁定。動態綁定Gridview不更新使用更新面板

<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(); 
+1

你要如何更新你的網格?你可以發佈那部分代碼嗎? –

回答

0

我覺得我有你描述幾次的問題。在我的情況下,它總是因爲每個負載運行在Page_Load中綁定的,你運行任何方法嗯,讓說,點擊一個按鈕,所以你需要的,如果測試

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(){ 
} 
+0

根據你我使用!IsPostBack方法,然後在OnClick方法上綁定數據。這樣對嗎?如果它是正確的,那麼我也使用Ispostback方法,但仍然存在問題。 –

+1

我認爲gridview的一些視圖狀態信息不會刪除,而新的數據在舊的gridview中追加。 –

0
包初始綁定在一個在Page_Load之前運行

既然您使用UpdateMode="Conditional"作爲您的更新面板,您是否在代碼中的任意位置使用行 UpdatePanel2.Update();

如果不是,您可能需要考慮UpdateMode="Always"或在代碼中包含.Update()調用。使用條件更新時,您必須在代碼後面手動觸發Update()方法。

希望這會有所幫助!

+0

是的你是對的,我沒有使用UpdatePanel2.Update();在代碼方面,所以我將其更改爲UpdateMode =「Always」。但同樣的問題出現在GridView中。 –

+0

我得到了在GridView控件屬性中設置EnableViewState =「False」的解決方案。感謝所有.. –