菜单

表格接口(行列操作)

下载

前言

对于表格设计我们提供了TTable.h,对于表格的视图设计我们提供了TTableView.h供用户调用,下面将详细讲解这两个头文件中的部分重点接口。首先,在添加完表格并进行表格设计后,生成的代码大致如下图所示:

由图所示,图中的wMSqliteTable1的指针对应的为表格设计,取用的接口为TTable.h中的接口。在进行了表格设计后,会生成一个tv_wMSqliteTable1的指针对应表格视图设计,取用的接口为TTableView.h中的接口。

注意

TTable 中的接口大多对应表格的样式,对于每行/每列或是整个表格的数据处理,例如:获取选中的行列值。对于 TTableView 中的接口大多都是对数据源的的操作,如跳转上一页/下一页。

该表格适用于所有带表格的控件,如下图所示:

TTable

重点接口展示

c++ 复制代码
/**
 * @LEVEL0
 * @brief 添加列并赋初值
 * @param col	列的id
 * @param value	增加行时该列的默认值
 */
virtual void addColumn(const string& col, const string& value="");
/**
 * @LEVEL0
   * @brief 设置列并赋初值
 * @param colindex	序号
 * @param colname	列名
 * @param defvalue	初值
 */
virtual void setColumn(int colindex, const string& colname, const string& defvalue="");
  /**
   * @LEVEL0
   * @brief 检查列名是否存在并返回列的序号
   * @param column_name
   * @return 列的序号 >=0:OK  <0:不包含
   */
virtual int hasColumn(const string& columnName) const;
  /**
   * @LEVEL0
   * @brief 获取列名
   * @param col		列索引号
   * @return 不存在, 返回空
   */
virtual string getColumnName(int col);
  /**
   * @LEVEL0
   * @brief 返回列名
   * @return
   */
virtual vector<string> getColumnNames();
  /**
   * @LEVEL0
   * @brief 获取指定列中值列表
   * @param col	指定列的id
   * @param values	存储该列所有行的值
   * @return	不存在指定列,返回false. 否则返回true
   */
virtual bool getColumnValues(const string& col, vector<string>& values);
  /**
   * @LEVEL0
   * @brief 获取列数
   */
virtual int getColumnCount();
  /**
   * @LEVEL0
   * @brief 删除指定列
   * @param col 列名
   * @return	不存在指定列,返回false. 否则返回true
   */
virtual bool delColumn(const string& col);
/**
 * @LEVEL0
   * @brief 删除所有列
 * @return
 */
bool delColumnAll();
/**
 * @LEVEL0
 * @brief 在尾部简单新增行
 * @param str	字符串
 * @param split	分隔符
 */
virtual void addRow(const string& str="", const string& split=",");
  /**
   * @LEVEL0
   * @brief 在尾部简单新增行
   * @param row	值列表
   */
virtual void addRow(vector<string>& row);
/**
 * @LEVEL0
 * @brief 在尾部新增行
 *  	新增时比较列ID与新增行参数中键值
 * @param row	值列表
 */
virtual void addRow(vector<KV_Str_Str>& row);
  /**
   * @LEVEL0
   * @brief 在指定位置简单新增行
   * @param pos 插入位置的索引
   * @param row 值列表
   */
virtual bool insertRow(int pos, vector<string>& row);
/**
 * @LEVEL0
 * @brief 在指定位置新增行
 * 		新增时比较列ID与新增行参数中键值
 * @param pos 插入位置的索引
 * @param row 值列表
 */
virtual bool insertRow(int pos, vector<KV_Str_Str>& row);
/**
 * @LEVEL0
 * @brief 删除指定行
 * @param rowIndex 行索引
 * 		如果指定行<0的数,则删除全部
 * @return
 */
virtual bool delRow(int rowIndex);
/**
 * @LEVEL0
 * @brief 删除所有行
 */
virtual void delAllRow();
  /**
   * @LEVEL0
   * @brief 返回指定行数据
   * @param rowIndex	行号 0...n
   * @return
   */
virtual vector<string> getRow(int rowIndex);
  /**
   * @LEVEL0
   * @brief 获取指定行列值
   * @param rowIndex  行号:0...n
   * @param colName	列名
   * @param res		返回值
   * @return
   */
virtual string getValue(int rowIndex, const string& colName);
  /**
   * @LEVEL0
   * @brief 获取指定行指定列值
   * @param rowIndex  行号:0...n
   * @param colIndex	列号:0...n
   * @param res		返回值
   * @return
   */
virtual string getValue(int rowIndex, int colIndex);
  /**
   * @LEVEL0
   * @brief 设置指定行指定列的值
   * @param rowIndex  行号:0...n
   * @param colIndex	列号:0...n
   * @param value		设置值
   * @return
   */
virtual bool setValue(int rowIndex, int colIndex, const string& value);
  /**
   * @LEVEL0
   * @brief 从其它TTable拷贝数据进来
   * @param other
   */
virtual void copy(TTable& other);
/**
 * @LEVEL0
 * @brief 从其它表将数据合并(复制)进来
 * @param other 其它表,列数要与本表一致
 */
bool merge(TTable& other);
/**
 * @LEVEL0
 * @brief 设置选择项序号
 * @param sel
 */
virtual void setSelectedIndex(int sel, SttObject* obj=nullptr);
/**
 * @LEVEL0
 * @brief 返回选中项序号
 * @return
 */
virtual int getSelectedIndex();
/**
 * @LEVEL0
 * @brief 获取键值列、显示值列序号
 * @param k	返回键值列序号
 * @param l	返回显示列序号
 */
virtual void getKeyLabelIndex(int& k, int& l);
/**
 * @HideCA 数据的行数
 */
int size();
/**
 * @brief 获取总记录数
 * @return
 */
virtual int getRecordCnt();
/**
 * @brief (关联变量)总记录数
 * @param v
 */
void bindRecordCnt(Ivariable v);
/**
 * @brief 通知刷新
 */
void notify();

可引用的变量

c++ 复制代码
/**@brief 关键字段(列名)*/
string 			m_key;
/**@brief 显示字段(列名)*/
string 			m_label;
/**@brief 列集合  K:列名  V:默认值*/
vector<Column> 	m_columns;
/**@brief 行集合*/
vector<Row> 	m_rows;
/**@brief status*/
uint8_t mStatus;
/**@brief 选中行索引*/
int selectedIndex;
/**@brief 总记录数(关联变量)*/
Ivariable v_record_cnt;

使用方法

以上面的wMSqliteTable1指针为例

c++ 复制代码
// 获取第0列的名称
string colName = wMSqliteTable1->getColumnName(0);
// 获取所有的行集合
vector<Row> rows = wMSqliteTable1->m_rows;

TTableView

TTableViews 是 TTable 的子类。

重点接口介绍

c++ 复制代码
/**
 * @brief 获取当前分页序号
 * @return
 */
int getPageIndex();
/**
 * @brief 获取总分页数
 * @return
 */
int getPageCnt();
/**
 * @brief 设置分页大小
 * @param size
 */
void setPageSize(int size);
/**
 * @brief 获取每页记录数
 * @return
 */
int getPageSize();
/**
 * @brief 获取总记录数
 * @return
 */
int getRecordCnt();
/**
 * @brief 跳转第一页
 * @return
 */
void navFirst();
/**
 * @brief 跳转下一页
 */
void navNext();
/**
 * @brief 跳转上一页
 */
void navBack();
/**
 * @brief 跳转最后一页
 */
void navLast();
/**
 * @brief (关联变量)分页记录数
 * @param v
 */
void bindPageSize(Ivariable v);
/**
 * @brief (关联变量)当前页序号
 * @param v
 */
void bindPageIndex(Ivariable v);
/**
 * @brief (关联变量)总页数
 * @param v
 */
void bindPageCnt(Ivariable v);
/**
 * @brief 获取数据:从数据库中查询数据,并根据notify是否刷新控件
 * @param notifiy	是否通知控件刷新
 */
void drawData(bool notifiy);
/**
 * @HideCA 基类已显示
 * @brief 取变量类型
 */
uint8_t type();
/**
 * @LEVEL1
 * @brief 重新定义数据源,用于条件查询时改变查询语句
 * @param tbl 表名
 * @param cond where条件部分(不要含WHERE这个词),注意默认值是字符串"NULL",不是指针NULL。为"NULL"时,保持原条件不变
 */
void refine(const string& tbl, const string& cond="NULL");
/**
 * @brief 是否启用倒序
 */
void enDesc(bool b);
/**
 * @brief 重设数据库连接。由于U盘热插拔后,盘符变化,在U盘上的db路径就变化了
 */
void resetDB(IDatabase * db);
/**
 * @HideCA
 * @brief 获取绑定数据的sql语句
 * @param bpage 是否增加offset x limit x语句
 */
string combineSql(bool bpage);
/**
 * @HideCA
 * @brief 页面大小变化响应
 * @param org
 * @param data
 */
void onPageSizeChanged(SttObject * org, IVariable* data);
/**
 * @HideCA
 * @brief 当前页变化响应
 * @param org
 * @param data
 */
void onPageIndexChanged(SttObject * org, IVariable* data);

可引用的变量

c++ 复制代码
IDatabase *m_db;			//数据源
string m_tbl;				//表名称
string m_fields;			//表字段 空或XXX,XXXX,XXX
string m_cond;				//查询条件(不含WHERE)
bool m_isDesc;				//是否倒序
int m_pg_ix;				//当前页序号
int m_pg_size;				//页记录大小
int m_pg_cnt;				//总页数
int m_record_cnt;			//总记录数
Ivariable v_page_size;		//(关联变量)分页记录数
Ivariable v_page_ix;		//(关联变量)当前页序号
Ivariable v_page_cnt;		//(关联变量)总页数

使用方法

以上面的tv_wMSqliteTable1指针为例

c++ 复制代码
// 刷新数据源
string colName = tv_wMSqliteTable1->drawData(true);
// 获取表名称
string tblName = tv_wMSqliteTable1->m_tbl;

案例讲解

简单案例可参考数据库操作案例
高阶案例可参考查看数据库案例

最近修改: 2025-01-09Powered by