从单个Gridview行更新多个记录

时间:2014-09-04 22:15:35

标签: gridview

我正在尝试从gridview更新多个记录,其中一行更新ASP.NET网页中的多个记录。

澄清 -

ID  MyDate  TeamName    Attribute
1   09/04/2014  Team A  Some Attribute
2   08/04/2014  Team B  Some Attribute
3   07/04/2014  Team A  Some Attribute

Gridview拉取记录1,但隐藏了ID和MyDate字段,因此他们有一个模板视图可以修改。

如果用户将“属性”字段更改为“某些属性”中的“不同属性”;我希望它能更新记录1& 3属性字段读取'不同属性'。

期望的结果:

ID  MyDate  TeamName    Attribute
1   09/04/2014  Team A  Different Attribute
2   08/04/2014  Team B  Some Attribute
3   07/04/2014  Team A  Different Attribute

当前更新方法:

originalDataTable = (System.Data.DataTable)ViewState["originalValuesDataTable"];
    foreach (GridViewRow r in GridView1.Rows)
    if (((CheckBox)r.FindControl("CheckBox1")).Checked)
    {
        if (IsRowModified(r))

            { GridView1.UpdateRow(r.RowIndex, false); }


    }

这是我的更新命令&设置所有参数:

                UpdateCommand="UPDATE METRICS 
                            SET
                                OWNER_INTERACTOR = :OWNER_INTERACTOR, 
                                BACKUP_INTERACTOR = :BACKUP_INTERACTOR, 
                                METRIC_DESCRIPTION = :METRIC_DESCRIPTION, 
                                OFFICE = :OFFICE, 
                                BUS_FUNCTION = :BUS_FUNCTION, 
                                TEAM = :TEAM, 
                                BUS_PROCEDURE = :BUS_PROCEDURE, 
                                SUB_PROCESS = :SUB_PROCESS, 
                                INITIATIVE = :INITIATIVE, 
                                MISC_TEXT = :MISC_TEXT, 
                                TIME_STAMP = :TIME_STAMP, 
                                ACTIVE_INDICATOR = :ACTIVE_INDICATOR,
                                END_TIME = :END_TIME, 
                                START_TIME = :START_TIME,  
                                FP_5_CATEGORY = :FP_5_CATEGORY, 
                                PS2I_CATEGORY = :PS2I_CATEGORY, 
                                CLIENT = :CLIENT 
                            WHERE 
                                (DIVISION = :DIVISION) AND 
                                (SERVICE = :SERVICE) AND 
                                (PROCESS = :PROCESS) AND 
                                (METRIC_TYPE = :METRIC_TYPE) AND 
                                (METRIC_NAME = :METRIC_NAME)"

但问题是“UpdateRow”只更新给定GridView DataKeyName的行,我必须省略它来更新多个记录。

那么如何让UpdateRow真正更新多行?

我也知道数据库约定不在这里。我在业务方面,IT只给了我一个关于Oracle的表,我继承了业务用户设计的表。

提前致谢!

1 个答案:

答案 0 :(得分:0)

对于其他人,我发现您可以通过对象事件编辑参数,无论它们是否为DataKeyNames。在我的情况下,它是on update事件,但我认为他们必须在更新它的值时通过它的索引来限定参数。

    protected void dsFilteredData_Updating(object sender, SqlDataSourceCommandEventArgs e)
{
    e.Command.Parameters.RemoveAt("original_ID");
    e.Command.Parameters[4].Value = parammt;
    e.Command.Parameters[22].Value = origparamt;
}