zoukankan      html  css  js  c++  java
  • 转:利用jquery+repeater实现AJAX化的DataList

    虽然说微软的DataList相当强大 但是由于需要使用VIEWSTATE 并且一个简单的操作就必须刷新页面 所以决定在项目中使用JQUERY来达到ajax化的DataList

    当然数据绑定控件还是需要有的 此处仅需要repeater来做到数据绑定 其余部分均使用html控件来完成

    主要思路:通过对DataList的观察 发现他也只是给各个控件加一个具体的ID 比如说第一行的INPUT ID即为DataList的ID+自增的ID 如此一来我们的repeater改造成AJAX化的DataList便有了思路 只要给TABLE中每一行加一个独有的ID便可以取到该行内的任何控件

    以下为代码:

    js部分(使用的jquery版本为1.4.2):

    <script>
            $(document).ready(function() {
                $("table tr:odd").css("background-color", "#99ccff");
                $(".edit").click(function() {
                    var id = $(this).attr("id");
                    if ($(this).val() == "修改") {
                        $(this).attr("value", "提交");
                        $(this).next().removeClass();
                        $("." + id).find("input").removeClass().addClass("textbox");
                    }
                    else {
                        if (confirm("你确信要提交吗?")) {
                            var lv = $("#LV" + id).find("input").val();
                            var location = $("#LOCATION_NO" + id).find("input").val();
                            var amount = $("#AMOUNT" + id).find("input").val();
                            var inventory = $("#INVENTORY" + id).find("input").val();
                            var head_length = $("#HEAD_LENGTH" + id).find("input").val();
                            var uniformity = $("#UNIFORMITY" + id).find("input").val();
                            var strength = $("#STRENGTH" + id).find("input").val();
                            var macronaire = $("#MACRONAIRE" + id).find("input").val();
                            var reflectivity = $("#REFLECTIVITY" + id).find("input").val();
                            var yellowness = $("#YELLOWNESS" + id).find("input").val();
                            var price = $("#PRICE" + id).find("input").val();
                            $.ajax({
                                url: "ajaxmethod.asmx/AJAXEditCottonInfo",
                                type: "POST",
                                contentType: "application/json; charset=utf-8",
                                dataType: "json",
                                data: "{id:" + id + ",lv:'" + lv + "',location_no:'" + location + "',bag_amount:" + amount + ",inventory:" + inventory + ",head_length:" + head_length +
                     ",uniformity:" + uniformity + ",strength:" + strength + ",macronaire:" + macronaire + ",reflectivity:" + reflectivity + ",yellowness:" + yellowness + ",price:" + price + "}",
                                success: done
                            });
                            $(this).attr("value", "修改");
                            $(this).next().addClass("cancel");
                            $("." + id).find("input").removeClass().addClass("cancel");
                        }
                    }
                })
                function done(data) {
                    var result = eval('(' + data.d + ')');
                    if (result.data == "F") {
                        alert("您无权进行此操作");
                    }
                    else {
                        var id = result.id;
                        $("#LastEdit" + id).find("b").text(result.date);
                        $("#LV" + id).find("b").text(result.lv);
                        $("#LOCATION_NO" + id).find("b").text(result.location);
                        $("#AMOUNT" + id).find("b").text(result.amount);
                        $("#INVENTORY" + id).find("b").text(result.inventory);
                        $("#HEAD_LENGTH" + id).find("b").text(result.head_length);
                        $("#UNIFORMITY" + id).find("b").text(result.uniformity);
                        $("#STRENGTH" + id).find("b").text(result.strength);
                        $("#MACRONAIRE" + id).find("b").text(result.macronaire);
                        $("#REFLECTIVITY" + id).find("b").text(result.reflectivity);
                        $("#YELLOWNESS" + id).find("b").text(result.yellowness);
                        $("#PRICE" + id).find("b").text(result.price);
                    }
                }
                $(".edit").next().click(function() {
                    $(this).addClass("cancel");
                    $(this).prev().attr("value", "修改");
                    var id = $(this).prev().attr("id");
                    $("." + id).find("input").removeClass().addClass("cancel");
                })
            });
        </script>

    css部分:

    <style>
         .cancel
         {
          display:none;
          0;
         }
         .textbox
         {
          70px;
         }
        </style>

    html部分(数据源为自己写的分页用户控件 有一个属性为CommandText 设定该属性便可执行相应的SQL语句并将返回的DataTable作为控件的数据源):

    <form id="form1" runat="server">
          <asp:Repeater runat="server" ID="RCottonList">
            <HeaderTemplate>
              <table  cellpadding="0" cellspacing="0" border="1" width="1000">
                <thead>
                  <tr>
                    <td colspan="14"><center>原棉信息列表</center></td>
                  </tr>
                </thead>
                <tbody>
                  <tr>
                    <td>库存批号</td>
                    <td>最后修改时间</td>
                    <td>等级代号</td>
                    <td>产地与批号</td>
                    <td>包数</td>
                    <td>库存(吨)</td>
                    <td>上半部长度</td>
                    <td>整齐度</td>
                    <td>断裂比强度</td>
                    <td>马克隆值</td>
                    <td>反射率</td>
                    <td>黄度</td>
                    <td>单价(万元/顿)</td>
                    <td width="100">操作</td>
                  </tr>
            </HeaderTemplate>
            <ItemTemplate>
               <tr>
                 <td class="<%#DataBinder.Eval(Container.DataItem,"ID") %>"><%#DataBinder.Eval(Container.DataItem,"ID") %></td>
                 <td class="<%#DataBinder.Eval(Container.DataItem,"ID") %>" id="LastEdit<%#DataBinder.Eval(Container.DataItem,"ID") %>"><b><%#DataBinder.Eval(Container.DataItem,"LastEdit") %></b></td>
                 <td class="<%#DataBinder.Eval(Container.DataItem,"ID") %>" id="LV<%#DataBinder.Eval(Container.DataItem,"ID") %>">
                   <b><%#DataBinder.Eval(Container.DataItem,"LV") %></b>
                   <input type="text" class="cancel" value="<%#DataBinder.Eval(Container.DataItem,"LV" )%>"/>
                 </td>
                 <td class="<%#DataBinder.Eval(Container.DataItem,"ID") %>" id="LOCATION_NO<%#DataBinder.Eval(Container.DataItem,"ID") %>">
                   <b><%#DataBinder.Eval(Container.DataItem,"LOCATION_NO") %></b>
                   <input type="text" class="cancel" value="<%#DataBinder.Eval(Container.DataItem,"LOCATION_NO") %>" />
                 </td>
                 <td class="<%#DataBinder.Eval(Container.DataItem,"ID") %>" id="AMOUNT<%#DataBinder.Eval(Container.DataItem,"ID") %>">
                   <b><%#DataBinder.Eval(Container.DataItem,"BAG_AMOUNT") %></b>
                   <input type="text" class="cancel" value="<%#DataBinder.Eval(Container.DataItem,"BAG_AMOUNT") %>" />
                 </td>
                 <td class="<%#DataBinder.Eval(Container.DataItem,"ID") %>" id="INVENTORY<%#DataBinder.Eval(Container.DataItem,"ID") %>">
                   <b><%#Convert.ToSingle( DataBinder.Eval(Container.DataItem,"INVENTORY")).ToString("F2") %></b>
                   <input type="text" class="cancel" value="<%#Convert.ToSingle( DataBinder.Eval(Container.DataItem,"INVENTORY")).ToString("F2") %>" />
                 </td>
                 <td class="<%#DataBinder.Eval(Container.DataItem,"ID") %>" id="HEAD_LENGTH<%#DataBinder.Eval(Container.DataItem,"ID") %>">
                   <b><%#Convert.ToSingle(DataBinder.Eval(Container.DataItem, "HEAD_LENGTH")).ToString("F2")%></b>
                   <input type="text" class="cancel" value="<%#Convert.ToSingle( DataBinder.Eval(Container.DataItem,"HEAD_LENGTH")).ToString("F2") %>" />
                 </td>
                 <td class="<%#DataBinder.Eval(Container.DataItem,"ID") %>" id="UNIFORMITY<%#DataBinder.Eval(Container.DataItem,"ID") %>">
                   <b><%#Convert.ToSingle(DataBinder.Eval(Container.DataItem, "UNIFORMITY")).ToString("F2")%></b>
                   <input type="text" class="cancel" value="<%#Convert.ToSingle( DataBinder.Eval(Container.DataItem,"UNIFORMITY")).ToString("F2") %>" />
                 </td>
                 <td class="<%#DataBinder.Eval(Container.DataItem,"ID") %>" id="STRENGTH<%#DataBinder.Eval(Container.DataItem,"ID") %>">
                   <b><%#Convert.ToSingle(DataBinder.Eval(Container.DataItem, "STRENGTH")).ToString("F2")%></b>
                   <input type="text" class="cancel" value="<%#Convert.ToSingle(DataBinder.Eval(Container.DataItem, "STRENGTH")).ToString("F2")%>" />
                 </td>
                 <td class="<%#DataBinder.Eval(Container.DataItem,"ID") %>" id="MACRONAIRE<%#DataBinder.Eval(Container.DataItem,"ID") %>">
                   <b><%#Convert.ToSingle(DataBinder.Eval(Container.DataItem, "MACRONAIRE")).ToString("F2")%></b>
                   <input type="text" class="cancel" value="<%#Convert.ToSingle(DataBinder.Eval(Container.DataItem, "MACRONAIRE")).ToString("F2")%>" />
                 </td>
                 <td class="<%#DataBinder.Eval(Container.DataItem,"ID") %>" id="REFLECTIVITY<%#DataBinder.Eval(Container.DataItem,"ID") %>">
                   <b><%#Convert.ToSingle(DataBinder.Eval(Container.DataItem, "REFLECTITVITY")).ToString("F2")%></b>
                   <input type="text" class="cancel" value="<%#Convert.ToSingle(DataBinder.Eval(Container.DataItem, "REFLECTITVITY")).ToString("F2")%>" />
                 </td>
                 <td class="<%#DataBinder.Eval(Container.DataItem,"ID") %>" id="YELLOWNESS<%#DataBinder.Eval(Container.DataItem,"ID") %>">
                   <b><%#Convert.ToSingle(DataBinder.Eval(Container.DataItem, "YELLOWNESS")).ToString("F2")%></b>
                   <input type="text" class="cancel" value="<%#Convert.ToSingle(DataBinder.Eval(Container.DataItem, "YELLOWNESS")).ToString("F2")%>" />
                 </td>
                 <td class="<%#DataBinder.Eval(Container.DataItem,"ID") %>" id="PRICE<%#DataBinder.Eval(Container.DataItem,"ID") %>">
                   <b><%#Convert.ToSingle(DataBinder.Eval(Container.DataItem, "PRICE")).ToString("F2")%></b>
                   <input type="text" class="cancel" value="<%#Convert.ToSingle(DataBinder.Eval(Container.DataItem, "PRICE")).ToString("F2")%>" />
                 </td>
                 <td>
                 <center>
                   <input type="button" value="修改" id="<%#DataBinder.Eval(Container.DataItem,"ID") %>" class="edit"/>
                   <input type="button" value="取消" class="cancel" />
                 </center>
                 </td>
               </tr>
            </ItemTemplate>
            <FooterTemplate>
               </tbody>
              </table>
            </FooterTemplate>
          </asp:Repeater>
        <center><uc1:pageddata ID="DataSource" runat="server" /></center>
          
        </form>

    CS部分:

    public partial class viewcottoninfo : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {       

             DataSource.CommandText = "GetCottonInfo";
        }
        protected void Page_PreRender(object sender, EventArgs e)
        {
            RCottonList.DataSource = DataSource.Data;
            RCottonList.DataBind();
        }
    }

    webservice部分(ECottonInfo,EOperation分别为实体类 映射数据库,Ladmin为逻辑层 同时充当操作代理):

        [WebMethod(EnableSession = true)]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string AJAXEditCottonInfo(string id,string lv,string location_no,string bag_amount,
            string inventory,string head_length,string uniformity,string strength,string macronaire,
            string reflectivity,string yellowness,string price)
        {
            int iid = Convert.ToInt32(id);
            location_no = Server.UrlDecode(location_no);
            ECottonInfo myci = new ECottonInfo(iid, DateTime.Now.ToString(),lv, location_no, int.Parse(bag_amount),
                float.Parse(inventory), float.Parse(head_length), float.Parse(uniformity), float.Parse(strength), float.Parse(macronaire),
                float.Parse(reflectivity), float.Parse(yellowness));
            myci.ECIPrice = float.Parse(price);
            LAdmin myadmin = LAdmin.adminbuild();
            EOperation myope = new EOperation(DateTime.Now.ToString(), 4, myadmin.ID);
            if (myadmin.EditCottonInfo(myci, myope))
            {
                StringBuilder sb = new StringBuilder("{");
                sb.AppendFormat("'data':'T','lv':'{0}','date':'{1}','location':'{2}','amount':'{3}','inventory':'{4}','head_length':'{5}',",
                    lv,DateTime.Now.ToString(), location_no,bag_amount,inventory,head_length);
                sb.AppendFormat("'uniformity':'{0}','strength':'{1}','macronaire':'{2}','reflectivity':'{3}','yellowness':'{4}','id':'{5}','price':'{6}'",
                    uniformity,strength,macronaire,reflectivity,yellowness,id,price);
                sb.Append("}");
                return sb.ToString();
            }
            return "{'data':'F'}";
        }

    当然我也知道此种功能网上必然有相应的第三方插件可以实现 而且更简单快捷 自己做完全是为了试试看有没有可以摆脱服务器控件的方法 同时也从某种角度上挖掘一下服务器控件的工作原理 虽然说如此开发效率比较低下 不过算是胜在用户体验了

  • 相关阅读:
    各种各样的Hashes
    爬取时出现报错 encoding error : input conversion failed due to input error, bytes 0xAC 0x4E 0x00 0x00
    Youtube.com中Uncaught TypeError: copy is not a function,如何解决
    生成“2021-Aug-27th”这样的1st,2nd,3rd, 4th 日期格式
    How to clear the content of the recycle bin in PowerShell?
    Delphi开发的服务在Windows2003 64位注册方式
    VS2015打开时,一直处理等待状态,并显示“Microsoft Visual Studio正忙”的提示窗,如下图
    Oracle操作类
    ie浏览器与其他浏览器兼容性问题解决
    echarts实时曲线【转】
  • 原文地址:https://www.cnblogs.com/mxh691/p/2585814.html
Copyright © 2011-2022 走看看