Tip/Trick: Implement Copy Function with FormView and SqlDatasource

处理用户输入时,经常会有很多相似的输入条目,用户希望通过复制原有记录,稍作修改后完成新的输入。当然这是个简单的功能,并不难实现。但如果你使用的是ASP.NET 2.0中的数据控件和DataSource的绑定方式,如果能尽量在这种模式下实现这个功能,以尽量享受ASP.NET 2.0给我们带来的便利,减少编码量,那就太好了。

之前实现过一次这样的功能,其实就是在sql语句里实现复制记录,然后界面里去修改这个记录。也就是说用户点击了一个copy按钮后,新记录已经被实际的创建了,用户再点击保存时,实际上只是修改它而已,即使不保存记录也已经存在了。显然这并没有实现用户的真实意图。

另一种实现,这里以FormView为例。FormView有三种视图模式View,Edit,Insert。要实现Copy的功能,实际上就是利用其编辑的界面,而后台却执行插入的功能就可以了。这样一想问题就简单了,我们只要在FormView的Updating事件或者其对应的DataSource控件的Updating事件中,判断如果是执行的copy操作,则执行插入动作,以下是关键的代码片段:

 

    protected void SqlDataSourceFreeTariffDetail_Updating(object sender, SqlDataSourceCommandEventArgs e)
    {
        if (IsCopying)
        {
            Guid key = Guid.NewGuid();
            e.Command.CommandText = SqlDataSourceFreeTariffDetail.InsertCommand;
            e.Command.Parameters["@ID"].Value = key;
            e.Command.Parameters["@CreatedBy"].Value = User.Identity.Name;
            e.Command.Parameters["@CreatedDate"].Value = DateTime.Now;
            IsCopying = false;
        }
    }

注意在页面代码里要保持UpdateParameters与InsertParameters的一致,而且有些parameter赋值也不同于Update操作,所以要有红色的几行代码。

如此,基本最大限度使用了ASP.NET 2.0的数据绑定和数据操作模式,以最小的代码量实现了这个功能。

你可能感兴趣的:(dataSource)