Ext获取某一列的值

问:

如题我有三列,现在显示了5行,我想获取 第2行的第一列数据,要怎么写啊




答:


1) 表格数据选择



行选择模式:

Js代码
var rowcount = grid.getSelectionNode().getSelections();

var rowcount = grid.getSelectionNode().getSelections();
可以获取全部选中的记录,得到的rowcount将是一个Array,比如想获取sex列的数据,语句如下

Js代码
var strsex = rowcount[i].get(‘sex’);

var strsex = rowcount[i].get(‘sex’);
单元格选择模式


如果在GridPanel的配置属性增加sm属性如下

Js代码
sm:new Ext.grid.CellSelectionModel();

sm:new Ext.grid.CellSelectionModel();
则表格的选择模式为单元格选择模式。当单击时将选中对应的某一个单元格,而不是默认的选择某一行。选择方式如下

Js代码
var cell = grid.getSelectionNode().getSelectedCell();

var cell = grid.getSelectionNode().getSelectedCell();
得到的cell记录了当前选择的行(cell[0])以及列(cell[1]).可以通过一下语句得到该单元格数据

Js代码
var colname = grid.getColumnModel().getDataIndex(cell[1]); //获取列名
var celldata = grid.getStore().getAt(cell[0]).get(colname); //获取数据

var colname = grid.getColumnModel().getDataIndex(cell[1]); //获取列名
var celldata = grid.getStore().getAt(cell[0]).get(colname); //获取数据
getStore():获取表格的数据集
getAt():获取该数据集cell[0]行
get():获取该行colname的数据


2) 为表格增加链接



有时我们需要为表格中的某一列添加一个链接。可以利用renderer配置属性为该列添加html
如下:{id:'3',header:'名称',dataIndex:'name',renderer:DomUrl},
定义DomUrl方法



Js代码
function DomUrl(value){
return "<a href=>"+value+"</a>";
}

function DomUrl(value){
return "<a href=>"+value+"</a>";
}
如果表格内的数据是一个链接如:www.sina.com这样写法自然没有问题,但是大多数时候我们在表格中不会直接写一个链接,如果又需要根据单元格内容动态为链接添加几个参数。那这种写法就几乎没有什么用了。因为这个属性是在表格初始化的时候定义好的,而且表格初始化之后这个属性无法改变,也就是只读属性。


处理方法如下:
定义一个全局变量,初始值为0;DomUrl函数如下

Js代码
function DomUrl(value){
var row = grid.getSelectionModel().selectRow(startrow);//选中当前行
var rownum = grid.getSelectionModel().getSelected();//获取当前行
startrow ++;
var strurl = "abc.jsp?id=" + rownum.get('id');//获取当前选中行的值,并组织链接字符串
return "<a href='"+strurl+"'>"+value+"</a>";
}

function DomUrl(value){
var row = grid.getSelectionModel().selectRow(startrow);//选中当前行
var rownum = grid.getSelectionModel().getSelected();//获取当前行
startrow ++;
var strurl = "abc.jsp?id=" + rownum.get('id');//获取当前选中行的值,并组织链接字符串
return "<a href='"+strurl+"'>"+value+"</a>";
}
不过不要忘记在下次提交的时候将startrow赋值为0。


3) 表格的属性


表格的属性分为配置属性(在操作表格时无法修改),以及其他可读写属性,方法,以及事件。如下:


配置属性



a) activeItem:渲染布局时激活的子元素。
b) applyTo:指定渲染对象。
c) autoDestroy:当容器的子元素从容器中移除时是否自动销毁。
d) autoExpandColumn:指定自动填充表格剩余区域的列id
e) autoExpandMax:可自动扩张的最大宽度。
f) autoExpandMin:可自动扩张的最小宽度
g) autoHeight:自动扩充高度
h) autoShow:是否自动显示
i) autoWidth:自动扩充宽度
j) bbar/tbar:底部/顶部状态栏
k) bufferResize:容器再布局的缓冲频率
l) colModel/cm:列模式
m) cls:组件的额外css格式。
n) collapsible:是否显示快捷隐藏按钮
o) defaults:指定默认配置。
p) disableSelection:是否禁止选择表格行或列
q) enableDragDrop:是否允许表格列的拖放操作。
r) enableHdMenu:是否显示表格列的菜单。
s) frame:边框是否显示
t) loadMask: 是否显示加载动画
u) selModel/sm:表格选择模式
v) store:表格数据集
w) stripeRows:是否显示分隔线。
x) title:表格标题


方法


a) getColumnModel():得到表格列模型
b) getGridEl():得到表格下的元素
c) getPosition():得到组件的当前位置,返回一个数组
d) getSelectionModel():得到选中模型
e) getSize():得到组件大小
f) getStore():得到组件的数据集
g) getView():得到表格的GridView对象。
h) hide():隐藏当前组件
i) isVisible():判断当前组件是否显示
j) setDisabled( Boolean):设置组件的可用性
k) un():解除组件的监听
l) on():为组件添加监听
on ( String eventName, Function handler, [Object scope] )
eventName:添加监听的名称
handler:事件处理函数
scope:事件响应的作用域,包括scope,delay,single,buffer。

<think>好的,我现在需要解决用户的问题:如何在Python中从数据结构或数据库中选取特定列的。首先,用户之前已经询问过关于数据库查询的问题,现在他们可能想进一步了解如何处理内存中的数据结构,比如列表或数组,或者继续深入数据库操作。根据用户提供的引用[1],他们有一个data对象,是通过读取文本文件生成的二维列表。每个子列表代表一行数据,包含多个数。用户可能希望从这个二维列表中提取某一列,比如所有行的第一个元素。此外,用户也可能需要从数据库中提取特定列,但之前的问题已经部分覆盖了数据库部分,所以可能需要更详细的数据结构处理。首先,我需要分情况讨论:处理内存中的数据结构(如列表、NumPy数组、Pandas DataFrame)和从数据库中查询。对于数据结构部分,用户给出的例子是二维列表,所以需要展示如何用列表推导式提取列。同时,可能用户的数据结构更复杂,比如使用NumPy或Pandas,这些库有更高效的方法,应该涵盖。 然后,对于数据库部分,用户之前的问题已经涉及,可能需要简要回顾并补充更多细节,比如使用ORM工具(如SQLAlchemy)或者不同数据库驱动(如sqlite3)。但根据用户当前的问题,重点可能在数据结构,所以这部分可能需要详细展开。 接下来,用户提到的引用[2]涉及字符串相似度,可能和当前问题关联不大,但需要确认是否有关联。用户可能是在处理数据后需要进行字符串匹配,但当前问题主要是提取列,所以可能不需要深入讨论这部分,但可以留到相关问题中。 在回答结构上,需要按照用户的要求,分点说明,包括内存数据结构和数据库操作。同时,要确保代码示例正确,比如处理二维列表时,注意索引是否正确,以及处理可能存在的空或不同长度行的情况。另外,用户提到“如何用到我们项目中”,可能需要结合实际应用场景,比如从数据中提取特定特征列进行分析。需要确保示例贴近实际应用,比如提取某列进行计算或可视化。最后,生成的相关问题需要与当前主题相关,比如如何处理不同数据结构、性能优化、异常处理等。需要确保问题有逻辑连贯性,帮助用户深入理解后续步骤。</think>### 一、从内存数据结构中提取列 #### 1. 基础列表结构(基于用户提供的data对象) 假设数据结构为二维列表,每个子列表代表一行数据: ```python data = [ [0, 0.0888, 201, 36.02, 28, 0.5885], [1, 0.1523, 198, 35.76, 30, 0.6211], [2, 0.2047, 205, 37.89, 25, 0.5993] ] ``` 提取第$n$列(索引从0开始): ```python # 提取第2列(索引为1) column_1 = [row[1] for row in data] print(column_1) # 输出: [0.0888, 0.1523, 0.2047] ``` #### 2. NumPy数组结构 对于高性能数计算场景: ```python import numpy as np arr = np.array(data) column_3 = arr[:, 3] # 提取第4列(索引为3) print(column_3) # 输出: [36.02 35.76 37.89] ``` #### 3. Pandas DataFrame结构 处理表格数据时更高效的方法: ```python import pandas as pd df = pd.DataFrame(data, columns=['id', 'rate', 'value', 'temp', 'count', 'score']) column_temp = df['temp'].tolist() # 提取'temp'列并转为列表 print(column_temp) # 输出: [36.02, 35.76, 37.89] ``` ### 二、从数据库中提取列(补充说明) #### 1. 使用原生SQL查询 ```python # 接续用户之前的数据库连接示例 cursor.execute("SELECT column_name FROM table_name") column_values = [row[0] for row in cursor.fetchall()] ``` #### 2. 使用ORM框架(以SQLAlchemy为例) ```python from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) # 查询name列 engine = create_engine('sqlite:///mydatabase.db') Session = sessionmaker(bind=engine) session = Session() names = [user.name for user in session.query(User.name)] ``` ### 三、特殊场景处理 #### 1. 处理缺失 ```python # 当某些行可能缺少列时 safe_column = [row[2] if len(row)>2 else None for row in data] ``` #### 2. 动态列选择 ```python def extract_column(data, col_index): return [row[col_index] for row in data] if all(len(row) > col_index for row in data) else [] ``` ### 四、性能优化建议 1. **向量化操作**:使用NumPy/Pandas处理超过$10^4$行的数据时,速度比列表推导快$10-100$倍[^1] 2. **生成器表达式**:对大数据集使用`(row[1] for row in data)`减少内存占用 3. **数据库分页**:使用`LIMIT offset, count`分批获取数据 ```python # 分页查询示例 page_size = 1000 for page in range(0, total_rows, page_size): cursor.execute(f"SELECT col FROM table LIMIT {page_size} OFFSET {page}") yield [row[0] for row in cursor] ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值