[size=large][color=brown]通过托放创建一个自定义的报表
不管是用户还是程序员都习惯了,手动托控件的应用程序。 但是在web 中实现比较麻烦,今天我就告诉你一个就像桌面上应用程序一样的恶实例。
解决的方法:
使用 rails 。 为了描述这个解决的方法, 例如 你正在为一个用户数据库提供 WEB 接口,同时 ,公司中的其他人员也正在使用这个数据库 , 每个人浏览了报表之后都可能 会有不同的想法,这些想法是关于他们愿意看到报表中显示了那些字段,你想提供一个操作简单,反应迅速的界面,让用户可以自己定义报表的版本。
报表时在数据库中的用户表中选择出来的,表的定义:
db/schema.rb:
ActiveRecord::Schema.define(:version => 1) do
create_table "customers", :force => true do |t|
t.column "company_name", :string
t.column "contact_name", :string
t.column "contact_title", :string
t.column "address", :string
t.column "city", :string
t.column "region", :string
t.column "postal_code", :string
t.column "country", :string
t.column "phone", :string
t.column "fax", :string
end
end
创建一个视图 来举例出客户的 列表。 并且每一列都能托放,那就的定义一个放置你托放的列。添加一个运行报表的链接,以及一个让报表复位的链接。
app/views/customers/report.rhtml:
<
h1>Custom Report</h1>
<% for column in Customer.column_names %>
<div id="<%= column %>" style="cursor:move;">
<%= column %>;
</div>
<%= draggable_element("#{column}", :revert => false) %>
<% end %>
<div id="select-columns">
<% if session['select_columns'] %>
<%= session['select_columns'].join(", ").to_s %>
<% end %>
</div>
<%= link_to_remote "Run Report",
:update => "report",
:url => { :action => "run" } %>
(<%= link_to "reset", :action => 'reset' %>)
<div id="report">
</div>
<%= drop_receiving_element("select-columns",
:update => "select-columns",
:url => { :action => "add_column" }) %>
在 Customers 控制器中定义一个 add_column ,用来对那些列被放入接受区域的时候触发的ajax 请求响应, 在定义 一个运行报表的方法以及一个同通过清除 色素sion 哈希表的 select_cloumns 来复位报表。
[
quote]controllers/customers_controller.rb:
class CustomersController < ApplicationController
def report
end
def add_column
if session['select_columns'].nil?
session['select_columns'] = []
end
session['select_columns'] << params[:id]
render :text => session['select_columns'].join(", ").to_s
end
def run
if session['select_columns'].nil?
render :text => '<p style="color: red;">no fields selected</p>'
else
@customers = Customer.find_by_sql("select
#{session['select_columns'].join(", ").to_s} from customers")
render :partial => 'report'
end
end
def reset
session['select_columns'] = nil
redirect_to :action => 'report'
end
end
现在创建一个名字是_report.rhtml 的局部的视图来显示报表本身。
app/views/customers/_report.rhtml:
<table>
<tr>
<% for column in session['select_columns'] %>
<th><%= column %></th>
<% end %>
</tr>
<% for customer in @customers %>
<tr>
<% for column in session['select_columns'] %>
<td><%=h customer.send(column) %></td>
<% end %>
</tr>
<% end %>
</table>
布局当然修要包含 javascript 库以及定义 在报表视图中用来接受 区域的样式。
app/views/layouts/customers.rhtml:
<html>
<head>
<title>Customers: <%= controller.action_name %></title>
<%= stylesheet_link_tag 'scaffold' %>
<%= javascript_include_tag :defaults %>
<style type="text/css">
#select-columns {
position: relative;
width: 400px;
height: 90px;
background-color: #e2e2e2;
border: 2px solid #ccc;
margin-top: 20px;
padding: 10px;
}
</style>
</head>
<body>
<p style="color: green"><%= flash[:notice] %></p>
<%= yield %>
</body>
</html>
[/color][/size]
分享到:
相关推荐
程序员需要创建一个处理PrintPage事件的过程,在此过程中,利用`PrintPageEventArgs`参数中的Graphics对象来绘制页面内容。`HasMorePages`属性决定是否需要继续打印更多的页面。如果该属性为False,表示仅打印当前...
实例202 如何在一个数据集中浏览另一个数据集的数据 实例203 如何在数据库更新过程中增加事务操作 实例204 如何在程序中实现查找字段 实例205 如何在程序中实现自定义字段 实例206 如何使用字段拖放功能 实例...
2. **Elib**:Elib是一个通用的控件库,包含了一系列实用的组件,如日期时间选择器、颜色选择器、图像处理控件等。Elib的设计目的是简化常见的开发任务,提高代码的可读性和可维护性,使开发者能够快速构建用户界面...
用户可以根据需要,使用VBA等编程语言在Excel中创建自定义函数,从而扩展Excel的功能。 十一、表头下面衬张图片 在表头下方衬托图片,可以使得表格更加美观,增强视觉效果。 十二、用连字符“&”来合并文本 使用...
0136 使用FileCreate函数创建一个图形文件 88 0137 使用GetCurrentDir函数返回当前目录 89 0138 在指定路径中搜索指定的文件 89 0139 使用FileExists函数判断指定文件是否存在 90 0140 使用FileGetAttr函数...
拖放功能允许用户通过鼠标将数据从一个位置移动到另一个位置,提供了更加直观和用户友好的交互体验。 在PB中实现数据窗口的拖放操作主要涉及以下几个关键知识点: 1. **DragDrop事件**:这是PB中处理拖放操作的...
操作大文件,自定义了一个操作大文件的类,并进行了测试。 chapter7 实现了声音录制等功能。 CHtmlViewProjV2 详细演示了HtmlView的使用与HtmlView事件站点拦截的实现、js调用。 CIVStringSet_Demo 自定义了一个...
操作大文件,自定义了一个操作大文件的类,并进行了测试。 chapter7 实现了声音录制等功能。 CHtmlViewProjV2 详细演示了HtmlView的使用与HtmlView事件站点拦截的实现、js调用。 CIVStringSet_Demo 自定义了一个...
操作大文件,自定义了一个操作大文件的类,并进行了测试。 chapter7 实现了声音录制等功能。 CHtmlViewProjV2 详细演示了HtmlView的使用与HtmlView事件站点拦截的实现、js调用。 CIVStringSet_Demo 自定义了一个...
操作大文件,自定义了一个操作大文件的类,并进行了测试。 chapter7 实现了声音录制等功能。 CHtmlViewProjV2 详细演示了HtmlView的使用与HtmlView事件站点拦截的实现、js调用。 CIVStringSet_Demo 自定义了一个...
操作大文件,自定义了一个操作大文件的类,并进行了测试。 chapter7 实现了声音录制等功能。 CHtmlViewProjV2 详细演示了HtmlView的使用与HtmlView事件站点拦截的实现、js调用。 CIVStringSet_Demo 自定义了一个...
操作大文件,自定义了一个操作大文件的类,并进行了测试。 chapter7 实现了声音录制等功能。 CHtmlViewProjV2 详细演示了HtmlView的使用与HtmlView事件站点拦截的实现、js调用。 CIVStringSet_Demo 自定义了一个...
0136 使用FileCreate函数创建一个图形文件 88 0137 使用GetCurrentDir函数返回当前目录 89 0138 在指定路径中搜索指定的文件 89 0139 使用FileExists函数判断指定文件是否存在 90 0140 使用FileGetAttr函数...
"综合实例"则将以上多种技术结合,提供了一个完整功能的应用程序案例,帮助开发者了解如何在实际项目中整合各种技术。 这些源码实例覆盖了C# WinForm开发的各个方面,对于初学者来说是一份宝贵的参考资料,对于有...
通过本章的学习,读者将对Oracle Inventory Management有一个全面的认识。 **1.4 库存功能** Oracle Inventory Management提供了丰富的功能来支持企业的库存管理需求: - **接收到发放的活动周期**:从接收货物到...
1. **初始化仓库**:使用`git init`命令创建一个新的Git仓库,或者`git clone`克隆远程仓库到本地。 2. **添加文件**:使用`git add`命令将文件添加到暂存区,例如`git add .`将所有更改添加进去。 3. **提交更改*...
实例202 如何在一个数据集中浏览另一个数据集的数据 实例203 如何在数据库更新过程中增加事务操作 实例204 如何在程序中实现查找字段 实例205 如何在程序中实现自定义字段 实例206 如何使用字段拖放功能 实例...
实例202 如何在一个数据集中浏览另一个数据集的数据 实例203 如何在数据库更新过程中增加事务操作 实例204 如何在程序中实现查找字段 实例205 如何在程序中实现自定义字段 实例206 如何使用字段拖放功能 实例...
一洽在线客服系统为用户提供了一个集登录管理、实时监控、菜单设置于一体的综合平台。通过细致的功能划分,帮助企业提升客服工作效率和服务质量。从登录界面到系统主界面的各个部分都进行了精心设计,确保用户能够...