0

動的Gridviewの場合、実行時に次のように列を生成しています。

TemplateField tf = new TemplateField();
tf.HeaderText = colName;
tf.ItemTemplate = new GenericItem(ListItemType.Item, colName, "Command");
tf.EditItemTemplate = new GenericItem(ListItemType.EditItem, 
Gridview1.Columns.Add(tf);

GenericItemはIBindableTemplateを実装します:

public class GenericItem : IBindableTemplate

これは正常に機能しますが、一部の列を更新しようとすると、古い値にアクセスできる必要があります。私はこれを使うことができると思いました:

<asp:SqlDataSource runat="server" ID="dsGridview" OldValuesParameterFormatString="old_{0}" ConflictDetection="CompareAllValues" />

しかし、GridviewのRowUpdatingイベントでデータソースのoldvaluesプロパティにアクセスしたい場合、oldvaluesコレクションが空であることに気付きました(newvaluesコレクションは正常に入力されています)

誰かが私がそれらの古い値を取得する方法を知っていますか?

よろしく、r3try

4

1 に答える 1

0

わかりました、これは私がそれを解決したかった方法ではありません-しかし、ここに他の提案がないので、私が私の問題をどのように回避したかです。たぶん他の誰かが同じ問題を抱えています:

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        //GET THE OLD VALUES
        myOldValues.Clear();
        GridView gv = (GridView)sender;
        gv.EditIndex = e.NewEditIndex;
        gv.DataBind();

        //populate 
        for (int i = 0; i < Gridview1.Columns.Count; i++)
        {
            DataControlFieldCell cell = gv.Rows[e.NewEditIndex].Cells[i] as DataControlFieldCell;
            gv.Columns[i].ExtractValuesFromCell(myOldValues, cell, DataControlRowState.Edit, true);
        }

        Session["MyOldValues"] = myOldValues;

    }
于 2012-09-12T05:34:54.583 に答える