在ASP.NET 2.0中操作数据之三十六:在DataList里编辑(4)

/uploads/allimg/200612/1J334XT_0.png


图 11: 为 EditItemTemplate 添加Update 和Cancel 按钮

你的标记语言看起来应该和下面差不多:

<asp:DataList runat="server" DataKeyField="ProductID" DataSourceID="ObjectDataSource1" RepeatColumns="2"> <ItemTemplate> <h5> <asp:Label runat="server" Text='<%# Eval("ProductName") %>' /> </h5> Price: <asp:Label runat="server" Text='<%# Eval("UnitPrice", "{0:C}") %>' /> <br /> <br /> </ItemTemplate> <EditItemTemplate> Product name: <asp:TextBox runat="server" Text='<%# Eval("ProductName") %>' /><br /> Price: <asp:TextBox runat="server" Text='<%# Eval("UnitPrice", "{0:C}") %>' /><br /> <br /> <asp:Button runat="server" CommandName="Update" Text="Update" /> <asp:Button runat="server" CommandName="Cancel" Text="Cancel" /> </EditItemTemplate> </asp:DataList>    

第五步: 添加进入编辑模式的入口

  现在我们的DataList有一个编辑界面了。然而现在还没有办法来体现出用户需要编辑product信息。我们需要为每个product加一个Edit button,当点击时,将DataList item展示为编辑模式。同样的可以通过设计器或直接声明代码来添加。确保将Edit button的commandName属性设为"Edit".添加完后,浏览一下页面。

/uploads/allimg/200612/1J3355141_0.png


图 12: 添加Edit Buttons

  点击button会引起postback,但是并没有进入product的编辑模式。为了完成这个,我们需要:

  设置DataList的 EditItemIndex property 为 被点击了Edit button的 DataListItem的 index .
  重新绑定数据到 DataList. 当 DataList 重新展现时, 和DataList的EditItemIndex相关的DataListItem 会展现EditItemTemplate.

  由于在点Edit button时,DataList的EditCommand事件被激发,使用下面的代码创建一个EditCommand event handler :

protected void DataList1_EditCommand(object source, DataListCommandEventArgs e)
{
    // Set the DataList's EditItemIndex property to the
    // index of the DataListItem that was clicked
    DataList1.EditItemIndex = e.Item.ItemIndex;
    // Rebind the data to the DataList
    DataList1.DataBind();
}
           

  EditCommand event handler 的第二个参数类型为DataListCommandEventArgs ,它是被点击的Edit button的DataListItem的引用(e.Item).首先设置DataList的EditItemIndex为想编辑的DataListItem的ItemIndex,然后重新绑定数据。完成后再浏览页面。点Edit button,现在product变成了可编辑的。见图13。

/uploads/allimg/200612/1J33532O_0.png


图 13: 点Edit Button 使Product 可编辑

第六步: 保存用户的更改

  现在点product的Update或Cancel button不会有任何反应。为了完成目标我们需要为DataList的UpdateCommand和CancelCommand创建event handler。首先创建CancelCommand event handler,它在product的Cancel button点击时执行,使DataList返回编辑之前的状态。使DataList以只读模式展示item,我们需要:

  设置DataList的 EditItemIndex property 为一个不存在的DataListItem index -1是一个好的选择。(由于DataListItem index从0开始) 重新绑定数据到DataList。由于没有DataListItem ItemIndex和DataList的EditItemIndex关联,整个DataList会展现为只读模式。 这些可以通过以下代码完成:

protected void DataList1_CancelCommand(object source, DataListCommandEventArgs e) { // Set the DataList's EditItemIndex property to -1 DataList1.EditItemIndex = -1; // Rebind the data to the DataList DataList1.DataBind(); }

现在点击Cancel button会返回到DataList编辑前的状态。

最后我们来完成UpdateCommand event handler,我们需要:

编程获取用户输入的product name和price,还有ProductID.
调用ProductsBLL类里的合适的UpdateProduct重载方法.
设置DataList的EditItemIndex property 为一个不存在的DataListItem index. -1 是一个好的选择。
重新帮顶数据。

  第一和第二步负责保存用户的更改。第三步返回到DataList编辑前的状态(和CancelCommand event handler一样)。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjwwyx.html