0

グリッドビューを動的に作成し、AutoGenerateEditButton = true; を追加しました。プロパティと、テーブルをグリッドビューにロードするときに、すべてのフィールドに編集リンクが追加されていることがわかります。しかし、編集ボタンをクリックしても、ポストバックを除いて何も起こりません。私は何を間違っていますか?

        GridView gridData = new GridView();
        gridData.ID = "test";
        gridData.AutoGenerateEditButton = true;
        gridData.RowEditing += (sender, e) => grid_RowEditing(tbl, e, sender);
        gridData.DataSource = tbl;
        gridData.DataBind();

 protected void grid_RowEditing(DataTable tbl, GridViewEditEventArgs e, object sender)
    {
        ((GridView)sender).EditIndex = e.NewEditIndex;
        // call your databinding method here
        ((GridView)sender).DataSource = tbl ;
        ((GridView)sender).DataBind();
    }
4

2 に答える 2

0

私の推測では、ポストバックごとにグリッドを再作成して上書きしているため、クリックは無視されるだけです。

推奨されるアプローチは、非表示のグリッドを静的に作成することです。

<asp:GridView .... Visible="false" />

必要なときに表示するだけです。このアプローチ (動的な作成とは対照的に) は、おそらく直面している問題を含む多くの問題からあなたを救います。

編集:あなたが本当にあなたのルートをたどりたいのなら、私の推測では、データキー名を指定していないだけなので、編集をクリックしてもクリックされた行に情報が含まれません。

gridData.DataKeyNames = new string[] { "ID" };

(主キー列名が の場合ID)

于 2013-08-26T17:59:56.823 に答える
0

a <p id="p" runat="server">クライアント側に追加し、このコントロール内にそのグリッドを追加しました。これが私のコードです。Datatable の代わりに SqlDataSource を使用しました。いずれかを使用できます。それがあなたのために働くことを願っています..

    protected void gridview()
    {               
        GridView gridData = new GridView();
        gridData.ID = "test";
        gridData.AutoGenerateEditButton = true;

        gridData.RowEditing += (sender, e) => grid_RowEditing(SqlDataSource1, e, sender);
        gridData.DataSource = SqlDataSource1;
        gridData.DataBind();
        p.Controls.Add(gridData);
    }

    protected void grid_RowEditing(SqlDataSource tbl, GridViewEditEventArgs e, object sender)
    {
        ((GridView)sender).EditIndex = e.NewEditIndex;
        // call your databinding method here
        ((GridView)sender).DataSource = tbl;
        ((GridView)sender).DataBind();
    }

2)私も試してみましたdatatableが、うまくいきました。これが私のコードです。

    protected void gridview()
    {

        DataTable dt = new DataTable();            
        dt.Columns.Add("id");
        dt.Columns.Add("name");         
        for (int i = 0; i < 100; i++)
        {               
            dt.Rows.Add(i.ToString(),"v"+i.ToString());
        }

        GridView gridData = new GridView();
        gridData.ID = "test";
        gridData.AutoGenerateEditButton = true;
        gridData.RowEditing += (sender, e) => grid_RowEditing(dt, e, sender);
        gridData.DataSource = dt;
        gridData.DataBind();
        p.Controls.Add(gridData);
    }

    protected void grid_RowEditing(DataTable tbl, GridViewEditEventArgs e, object sender)
    {
        ((GridView)sender).EditIndex = e.NewEditIndex;
        // call your databinding method here
        ((GridView)sender).DataSource = tbl;
        ((GridView)sender).DataBind();
    }
于 2013-08-26T19:07:35.920 に答える