我用DataList实现了一个考核细则的编辑页面,想添加一个‘添加’按钮,实现客户端动态的添加行,可一次添加多行,添加完点击‘保存’,所有的添加的和以前的都可保存。
我自己用了几个方法都没实现,主要是Js不熟,得到控件ID,添加时设置控件ID,很麻烦。求助大侠们!!!
添加删除我都实现了,我目前的设计思想是,
添加:保存页面信息,重新得到数据源,添加一条新的记录(没有赋值的),重新绑定DataList;
删除:删除一条记录,重新绑定。
不过这样不太符合用户体验,因为点添加的时候,就得保存。

我想用Js实现添加,不保存,等到点击保存时才去保存。
删除的时候也是客户端删除,然后判断是否为新添加的记录,不是的话,再进行实际的删除。
下面是我的代码片段。
aspx:
<asp:DataList ID="MinusItemList" runat="server" Width="100%" BorderWidth="1" DataKeyField="ID" OnItemCommand="MinusItemList_ItemCommand" OnItemDataBound="MinusItemList_ItemDataBound">
           
            <HeaderTemplate>
            <tr>
                <td style="width: 40px; height: 22px;">
                        序号 </td>
                    <td style="width: 297px; height: 22px;">
                    内容 </td>
                  <td style="width: 40px; height: 22px;">
                    扣分 </td>
                    <td style="width: 80px; height: 22px;">
                        考核说明 </td>
                    <td style="width: 50px; height: 22px;" align="center">
                        删除 </td>
            </tr>
            </HeaderTemplate>
            <ItemTemplate>
            <tr>
                <td>
                        <asp:HiddenField ID="MinusID" Value=' <%#DataBinder.Eval(Container,"DataItem.ID") %>' runat="server" />
                        <asp:TextBox ID="MinusSortNo" runat="server" Width="100%" Text=' <%#DataBinder.Eval(Container,"DataItem.SortNo") %>'> </asp:TextBox> </td>
                    <td align="left">
                        <asp:TextBox ID="MinusDetailContent" runat="server" Width="100%" Text=' <%#DataBinder.Eval(Container,"DataItem.DetailContent") %>'> </asp:TextBox> </td>
                    <td>
                        <asp:TextBox ID="MinusMark" runat="server" Width="100%" Text=' <%#DataBinder.Eval(Container,"DataItem.Mark") %>'> </asp:TextBox>
                    </td>
                    <td >
                        <asp:TextBox ID="MinusAssessDesc" runat="server" Width="100%" Test=' <%# DataBinder.Eval(Container,"DataItem.AssessDesc") %>'> </asp:TextBox> </td>
                  <td align="center"> <asp:LinkButton ID ="DelMinusAssessBtn" runat="server" CommandName="Delete">删除 </asp:LinkButton> </td>
                </tr>
          </ItemTemplate>

        </asp:DataList>
        <table  width="100%">
            <tr>
              <td align="center">
                  <asp:ImageButton ID="MinusDetailBtn" runat="server"  SkinID="tianjia" OnClick="MinusDetailBtn_Click">
                  </asp:ImageButton>
              </td>
          </tr>
        </table>
CS:
/// <summary>
        /// 扣分项中添加按钮事件处理
        /// </summary>
        /// <param name="sender"> </param>
        /// <param name="e"> </param>
        protected void MinusDetailBtn_Click(object sender, EventArgs e)
        {
            string msg = CheckMinusData();
            if (msg != "OK")
            {
                ShowMessage(msg);
            }
            else
            {
                //先保存减分项
                SaveMinusDetail();

                TempAssessItemID = (string)Request["AssessItemID"];
                ArrayList MinusDetail = DJ2_AssessDetailFacade.GetAssessDetail(TempAssessItemID, "0");
                DJ2_AssessDetail NewRow = new DJ2_AssessDetail();
                NewRow.SortNo = MinusDetail.Count + 1;
                MinusDetail.Add(NewRow);

                this.MinusItemList.DataSource = MinusDetail;
                this.MinusItemList.DataBind();
            }
        }
//删除事件
protected void MinusItemList_ItemCommand(object source, DataListCommandEventArgs e)
        {
            if (e.CommandName == "Delete")
            {
               
                string ID = (string)MinusItemList.DataKeys[e.Item.ItemIndex];
                DJ2_AssessDetail DelRow = new DJ2_AssessDetail();
                DelRow.ID=ID;
                DJ2_AssessDetailFacade.DeleteObject(DelRow);
                BindMinusDetail();
            }
        }
posted on 2009-08-06 14:34  superlee  阅读(207)  评论(0编辑  收藏  举报