1

このコードで行を更新したいのですGridViewが、編集後GridViewは変更されません:

protected void res_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        //Retrieve the table from the session object.
        DataTable dt = (DataTable)Session["dt"];
        GridViewRow row =res.Rows[e.RowIndex];
        dt.Rows[row.DataItemIndex]["name"] = ((TextBox)(row.Cells[6].Controls[0])).Text;
        dt.Rows[row.DataItemIndex]["dewey"] = ((TextBox)(row.Cells[5].Controls[0])).Text;
        *dt.Rows[row.DataItemIndex]["subject"] = ((TextBox)(row.Cells[4].Controls[0])).Text;
        Session["dt"] = dt;
        res.EditIndex = -1;
        res.DataSource = dt;
        res.DataBind();
    }

私のPage_Load

    protected void Page_Load(object sender, EventArgs e)
    {
        DataTable dt;
        if (!IsPostBack)
        {
            dt= Converter.ListBooks(new classes.Book().GetAll());
            Session["dt"] = dt;
            res.DataSource = dt;
            res.DataBind();
        }
        else
        {
            dt=(DataTable)Session["dt"];
            res.DataSource = dt;
            res.DataBind();
        }

    }

たとえば、* を含む行を次のように変更しました。

dt.Rows[row.DataItemIndex]["subject"] = "tx";

編集後、「件名」列が「tx」に変更されたため、編集前にテキストを((TextBox)(row.Cells[4].Controls[0])).Text返す理由がわかりませんか?TextBox

4

5 に答える 5

1

DataBind();を呼び出しているためです。メソッドは、ページが更新されるたびに (POST または GET)、ユーザーが TextBox に新しい値を入力し、更新ボタンをクリックして res_RowUpdating をトリガーする場合にさらに説明ます。ユーザー入力値。

于 2013-04-22T07:27:57.860 に答える
0

変更が行われた可能性がありますが、フォームは更新されていません。

更新パネル コントロール内に gridview コントロールを配置して、UpdatePanel.Update() を呼び出してみてください。

データの変更はプレゼンテーション レイヤーで自動更新されないため、Web コントロールを操作する場合、表示される内容が実際の内容と異なる場合があります。

この「問題」を解決するには、ページ全体のポストバック (すべてを取得) を行うことができますが、これはバズーカでハエを殺すようなものです。すべてが必要なわけではなく、更新されたものだけが必要なので、この目的のためにいくつかありますたとえば、AJAX コントロール: UpdatePanel などの部分的な更新を可能にするツール。

それが役に立てば幸い。

更新: DataTable で AcceptChanges() メソッドを呼び出し、if(!PostBack) の後に Page_Load の else ブランチを消去します。

于 2013-04-22T06:05:14.093 に答える
0

グリッドを再バインドするだけでいいと思います

于 2013-04-22T07:27:25.227 に答える
0

のパーツを削除elseしますpage_load

あなたのためにそれをすべきです。

必要のないが存在するたびに、グリッドをバインドしてpostbackいます。

于 2013-04-22T07:34:46.843 に答える
0

AcceptChanges()のメソッドを呼び出してDataTableから、 をバインドしGridViewます。

于 2013-04-22T07:59:29.127 に答える