用于动态gridview-templates的SqlDatasource的旧值

时间:2012-09-10 14:47:57

标签: c# asp.net sql sqldatasource

对于动态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

1 个答案:

答案 0 :(得分: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;

    }