1

私は 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();
4

2 に答える 2

0

UpdateMode="Conditional"更新パネルに 使用しているのでUpdatePanel2.Update();、コードのどこかで行を使用していますか?

そうでない場合は、UpdateMode="Always"ある時点で .Update() 呼び出しをコードに含めるか検討することをお勧めします。条件付き更新では、コード ビハインドで Update() メソッドを手動で起動する必要があります。

お役に立てれば!

于 2013-06-19T13:47:23.777 に答える
0

あなたが説明した問題を数回経験したと思います。私の場合、それは常に、すべてのロードで実行される Page_Load のバインドが原因です。うーんから実行するメソッドは、ボタンのクリックと言って、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(){
}
于 2013-06-19T10:24:22.283 に答える