FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 11164|回复: 11
打印 上一主题 下一主题

grid单元格计算,求肋如何在编辑单元后,自动计算值

[复制链接]
跳转到指定楼层
楼主
发表于 2014-4-15 10:37:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


如图所示:
手动输入123月份的数据后,自动求出平均值。。求给力。大神。谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
沙发
 楼主| 发表于 2014-4-15 11:15:25 | 只看该作者
半个小时了,没人。。自己来顶一下。。
板凳
发表于 2014-4-15 11:34:34 | 只看该作者

回帖奖励 +20 金钱

参考贴子代码
http://www.fineui.com/bbs/forum.php?mod=viewthread&tid=3721&reltid=5431&pre_thread_id=0&pre_pos=5&ext=
地板
 楼主| 发表于 2014-4-15 11:44:24 | 只看该作者

不可以在后台获取么,不是有个叫AfterEdit事件么。。新手啊。求详细下。。看不懂
5#
发表于 2014-4-15 12:25:38 | 只看该作者
本帖最后由 gdcrx 于 2014-4-15 12:32 编辑

官方示例中有自动计算的,新手要好好看看例子,自己多研究研究。
下面是我给你写的例子,跟原来示例差不多,按键事件变成keyup,浏览器兼容性更好些。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
6#
发表于 2014-4-15 12:27:13 | 只看该作者
本帖最后由 gdcrx 于 2014-4-15 12:39 编辑

页面代码,下面那句在代码中帖不进!!
__doPostBack('', 'AutoSave$' + rowIndex);

  1. <!DOCTYPE html>

  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head runat="server">
  4.     <title></title>
  5.      <link href="../css/default.css" rel="stylesheet" />
  6.      <link href="../css/table.css" rel="stylesheet" />
  7. </head>
  8. <body>
  9.     <form id="form1" runat="server">
  10.   
  11.         <f:PageManager ID="PageManager1" runat="server" AutoSizePanelID="regionAuto" />
  12.         <f:RegionPanel ID="regionAuto" CssClass="pageContent"  runat="server"  ShowBorder="false"  >
  13.           <Regions>
  14.               <f:Region ID="region1" Title="平均值" Layout="Fit"  Margins="5 5 5 5"  ShowBorder="false" ShowHeader="false" runat="server">
  15.                    <Items>
  16.                         <f:Grid ID="gdData" Title="平均值" EnableFrame="true" EnableCollapse="true"   PageSize="15" ShowBorder="true" ShowHeader="true"
  17.                             AllowPaging="true" runat="server" EnableCheckBoxSelect="false"
  18.                             DataKeyNames="ID" IsDatabasePaging="true">
  19.                             <Columns>
  20.                                 <f:RowNumberField />
  21.                                 <f:TemplateField HeaderText="一月" Width="80px">
  22.                                     <ItemTemplate>
  23.                                         <asp:TextBox runat="server" Width="98%" ID="txtMonth1" CssClass="Month1"
  24.                                             TabIndex='<%# Container.DataItemIndex + 10 %>' Text='<%# Eval("Month1") %>'></asp:TextBox>
  25.                                     </ItemTemplate>
  26.                                 </f:TemplateField>
  27.                                 <f:TemplateField HeaderText="一月" Width="80px">
  28.                                     <ItemTemplate>
  29.                                         <asp:TextBox runat="server" Width="98%" ID="txtMonth2" CssClass="Month2"
  30.                                             TabIndex='<%# Container.DataItemIndex + 500 %>' Text='<%# Eval("Month2") %>'></asp:TextBox>
  31.                                     </ItemTemplate>
  32.                                 </f:TemplateField>
  33.                                 <f:TemplateField HeaderText="三月" Width="80px">
  34.                                     <ItemTemplate>
  35.                                         <asp:TextBox runat="server" Width="98%" ID="txtMonth3" CssClass="Month3"
  36.                                             TabIndex='<%# Container.DataItemIndex + 1000 %>' Text='<%# Eval("Month3") %>'></asp:TextBox>
  37.                                     </ItemTemplate>
  38.                                 </f:TemplateField>
  39.                                 <f:TemplateField HeaderText="平均值" Width="80px">
  40.                                     <ItemTemplate>
  41.                                         <asp:Label runat="server" ID="lblAvg" CssClass="Avg" Text='<%# Eval("Avg") %>'></asp:Label>
  42.                                     </ItemTemplate>
  43.                                 </f:TemplateField>
  44.                             </Columns>
  45.                         </f:Grid>
  46.                    </Items>
  47.               </f:Region>
  48.           </Regions>
  49.         </f:RegionPanel>
  50.    
  51.     </form>

  52.       <script src="../js/jquery-1.10.2.min.js" type="text/javascript"></script>
  53.     <script type="text/javascript">

  54.         var Tools = new Object();
  55.         Tools.isNumber = function (B) {
  56.             var A = /^[\d|\.|,]+$/;
  57.             return A.test(B)
  58.         };

  59.         var gridClientID = '<%= gdData.ClientID %>';
  60.         var inputselector = '.x-grid-tpl input';

  61.         function registerAutoSaveEvent() {
  62.             var grid = F(gridClientID);

  63.             $(grid.el.dom).delegate(inputselector, 'keyup', function (evt) {
  64.                 var $this = $(this);
  65.                 if (evt.which == 13) {
  66.                     var inputs = $(this).parents("form").eq(0).find(":input");
  67.                     var idx = inputs.index(this);

  68.                     if (idx == inputs.length - 1) {
  69.                         inputs[0].select()
  70.                     } else {
  71.                         inputs[idx + 1].focus();
  72.                         inputs[idx + 1].select();
  73.                     }
  74.                     return false;
  75.                 }
  76.                 else {
  77.                     window.setTimeout(function () {

  78.                         var row = $this.parents('.x-grid-row');
  79.                         var num1 = row.find(inputselector + '.Month1').val();
  80.                         var num2 = row.find(inputselector + '.Month2').val();
  81.                         var num3 = row.find(inputselector + '.Month3').val();

  82.                         if (isNaN(num1) || num1.length == 0) num1 = "0";
  83.                         if (isNaN(num2) || num2.length == 0) num2 = "0";
  84.                         if (isNaN(num3) || num3.length == 0) num3 = "0";

  85.                         if (!Tools.isNumber(num1) || !Tools.isNumber(num2)  || !Tools.isNumber(num3))
  86.                          {
  87.                             alert("请输入正确的数字");
  88.                             // 不能录入非数据
  89.                             $this.val("0");
  90.                             $this.select();
  91.                         }

  92.                         var resultNode = row.find('.x-grid-tpl span.Avg');
  93.                         var total = parseFloat(num1) + parseFloat(num2) + parseFloat(num3);
  94.                         var avgVal = 0;
  95.                         if (isNaN(total)) {
  96.                             total = 0;
  97.                         }
  98.                         avgVal = total / 3;

  99.                         resultNode.text(avgVal.toFixed(2));

  100.                         var rowIndex = row.index();
  101.                         __doPostBack('', 'AutoSave

  102. + rowIndex);

  103.                     }, 300);
  104.                 }
  105.             });

  106.         }


  107.         // 页面第一次加载完成后调用的函数
  108.         F.ready(function () {
  109.             registerAutoSaveEvent();
  110.         });



  111.     </script>
  112. </body>
  113. </html>
复制代码


7#
发表于 2014-4-15 12:28:55 | 只看该作者
后台代码


  1.     public partial class AutoAvg : System.Web.UI.Page
  2.     {
  3.         protected void Page_Load(object sender, EventArgs e)
  4.         {
  5.             if (!IsPostBack)
  6.             {
  7.                 BindData();
  8.             }
  9.             {
  10.                 string postback = Request.Form["__EVENTARGUMENT"];
  11.                 if (!string.IsNullOrEmpty(postback) && postback.Contains("AutoSave"))
  12.                 {
  13.                     string[] args = postback.Split('

  14. );
  15.                     AutoSave(args[1]);
  16.                 }
  17.             }
  18.         }

  19.         private void BindData()
  20.         {
  21.             Random rnd = new Random();
  22.             
  23.             List<MonthValue> list = new List<MonthValue>();

  24.             for(int i=0;i<10;i++)
  25.             {
  26.                 decimal val1 = rnd.Next(100);
  27.                 decimal val2 = rnd.Next(100);
  28.                 decimal val3 = rnd.Next(100);
  29.                 decimal avg =decimal.Round((val1 + val2 + val3 ) / 3,2);
  30.                 list.Add(new MonthValue()
  31.                     {
  32.                         ID = i,
  33.                         Month1 = val1,
  34.                         Month2 = val2,
  35.                         Month3 = val3,
  36.                         Avg = avg
  37.                     });
  38.             }
  39.             MonthValueList = list;
  40.             gdData.DataSource = list;
  41.             gdData.DataBind();
  42.         }


  43.         private void AutoSave(string index)
  44.         {
  45.             int rowIndex = Convert.ToInt32(index);
  46.             System.Web.UI.WebControls.TextBox txtMonth1 = (System.Web.UI.WebControls.TextBox)gdData.Rows[rowIndex].FindControl("txtMonth1");
  47.             System.Web.UI.WebControls.TextBox txtMonth2 = (System.Web.UI.WebControls.TextBox)gdData.Rows[rowIndex].FindControl("txtMonth2");
  48.             System.Web.UI.WebControls.TextBox txtMonth3 = (System.Web.UI.WebControls.TextBox)gdData.Rows[rowIndex].FindControl("txtMonth2");

  49.             int id = Convert.ToInt32(gdData.DataKeys[rowIndex][0]);

  50.             decimal month1 = 0;
  51.             decimal month2 = 0;
  52.             decimal month3 = 0;
  53.          
  54.             decimal.TryParse(txtMonth1.Text,out month1);
  55.             decimal.TryParse(txtMonth2.Text, out month2);
  56.             decimal.TryParse(txtMonth3.Text, out month3);

  57.             UpdateEntity(id, month1, month2, month3);

  58.         }

  59.         private void UpdateEntity(int id, decimal month1, decimal month2, decimal month3)
  60.         {
  61.             List<MonthValue> list = MonthValueList;

  62.             int count = list.Count;
  63.             for (int i = 0; i < count; i++)
  64.             {
  65.                 if (list[i].ID == id)
  66.                 {
  67.                     list[i].Month1 = month1;
  68.                     list[i].Month2 = month2;
  69.                     list[i].Month3 = month3;
  70.                     list[i].Avg = decimal.Round((month1 + month2 + month3)/3,2);
  71.                     break;
  72.                 }
  73.             }

  74.             MonthValueList = list;

  75.         }

  76.         private List<MonthValue> MonthValueList
  77.         {
  78.             get
  79.             {
  80.                 if (ViewState["MonthValueList"] == null)
  81.                 {
  82.                     ViewState["MonthValueList"] = new List<MonthValue>();
  83.                 }
  84.                 return (List<MonthValue>)ViewState["MonthValueList"];
  85.             }
  86.             set
  87.             {
  88.                 ViewState["MonthValueList"] = value;
  89.             }
  90.         }
  91.     }

  92.     [Serializable]
  93.     public class MonthValue
  94.     {
  95.         public int ID { get; set; }
  96.         public decimal Month1 { get; set; }
  97.         public decimal Month2 { get; set; }
  98.         public decimal Month3 { get; set; }
  99.         public decimal Avg { get; set; }
  100.     }
复制代码


8#
 楼主| 发表于 2014-4-15 14:40:48 | 只看该作者

感谢,感谢。。。搞个自动计算这么。复杂。。
9#
 楼主| 发表于 2014-4-17 01:03:31 | 只看该作者
gdcrx 发表于 2014-4-15 12:27
页面代码,下面那句在代码中帖不进!!
__doPostBack('', 'AutoSave$' + rowIndex);

if (evt.which == 13) {
                    var inputs = $(this).parents("form").eq(0).find(":input");
                    var idx = inputs.index(this);

                    if (idx == inputs.length - 1) {
                        inputs[0].select()
                    } else {
                        inputs[idx + 1].focus();
                        inputs[idx + 1].select();
                    }
                    return false;
                }
能解释下这段代码干么用?
10#
发表于 2014-4-17 11:01:31 | 只看该作者
按回车键的时候,光标跳到下个控件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-11-1 10:24 , Processed in 0.048533 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表