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 回答