按顺序用 sqlite 数据库中的表行填充表视图部分
Posted
技术标签:
【中文标题】按顺序用 sqlite 数据库中的表行填充表视图部分【英文标题】:Populate the table view sections with rows of table in sqlite database in an order 【发布时间】:2011-12-12 14:00:36 【问题描述】:我有 2 个视图控制器页面。添加包含保存按钮的提醒页面作为导航栏的右栏按钮
我之前遇到过关于根据添加提醒页面中的保存次数查看提醒页面的表格视图中的部分数量的问题:
我找到了根据保存提醒的数量生成单元格的解决方案
这是代码:
-(NSInteger)numberOfSectionsInTableView:(UITableView *)view
NSInteger numTableRecords = -1;
sqlite3_stmt *statement;
if (sqlite3_open([self.databasePath UTF8String], &remindersDB) == SQLITE_OK)
NSString *sqlStatement = [NSString stringWithFormat: @"select count(*) from reminders"];
const char *sql = [sqlStatement cStringUsingEncoding:NSUTF8StringEncoding];
if(sqlite3_prepare_v2(remindersDB, sql, -1, &statement, NULL) == SQLITE_OK)
while(sqlite3_step(statement) == SQLITE_ROW)
numTableRecords = sqlite3_column_int(statement, 0);
else
printf("could not prepare statement: %s\n", sqlite3_errmsg(remindersDB));
else
NSLog(@"Error in Opening Database File");
sqlite3_close(remindersDB);
return numTableRecords;
现在我的问题是我能够检索数据,但不是以正确的方式。我的意思是这是我用来检索数据的代码
if (cell == nil)
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellId] autorelease];
view.backgroundColor = [UIColor clearColor];
cell.backgroundColor = [[UIColor alloc]initWithPatternImage:[UIImage imageNamed:@"reminderbutton.png"]];
label1 = [[[UILabel alloc]initWithFrame:CGRectMake(26, 3, 30, 40)]autorelease];
label1.backgroundColor = [UIColor clearColor];
label1.textColor = [UIColor whiteColor];
label2 = [[[UILabel alloc]initWithFrame:CGRectMake(45, 3, 100, 40)]autorelease];
label2.backgroundColor = [UIColor clearColor];
label2.textColor = [UIColor whiteColor];
label3 = [[[UILabel alloc]initWithFrame:CGRectMake(119, 3, 100, 40)]autorelease];
label3.backgroundColor = [UIColor clearColor];
label3.textColor = [UIColor whiteColor];
label4 = [[[UILabel alloc]initWithFrame:CGRectMake(198, 3, 120, 40)]autorelease];
label4.backgroundColor = [UIColor clearColor];
label4.textColor = [UIColor whiteColor];
//Retrieve the values of database
const char *dbpath = [self.databasePath UTF8String];
sqlite3_stmt *statement;
if (sqlite3_open(dbpath, &remindersDB) == SQLITE_OK)
NSString *querySQL = [NSString stringWithFormat:@"SELECT * from reminders ORDER BY id"];
const char *query_stmt = [querySQL UTF8String];
if (sqlite3_prepare_v2(self.remindersDB ,query_stmt , -1, &statement, NULL) == SQLITE_OK)
if (sqlite3_step(statement) == SQLITE_ROW)
NSString *ID = [[[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 0)]autorelease];
NSString *nameField = [[[NSString alloc]initWithUTF8String:(const char *) sqlite3_column_text(statement, 1)]autorelease];
NSString *eventField = [[[NSString alloc]initWithUTF8String:(const char *) sqlite3_column_text(statement, 2)]autorelease];
NSString *dateField = [[[NSString alloc]initWithUTF8String:(const char *) sqlite3_column_text(statement, 3)]autorelease];
label1.text = ID;
label2.text = nameField;
label3.text = eventField;
label4.text = dateField;
sqlite3_finalize(statement);
sqlite3_close(self.remindersDB);
[cell addSubview:label1];
[cell addSubview:label2];
[cell addSubview:label3];
[cell addSubview:label4];
return cell;
我已经插入了 4 个提醒,4 个单元格出现了,但问题在于显示
如下所示
如何让 4 个提醒连续显示在 4 个单元格中,我的意思是第 1 个提醒第 1 个,第 2 个提醒第 2 个,依此类推..
请帮我解决这个问题,提前谢谢大家:)
对不起...我在以下链接中找到了该问题的完整解决方案:
Retrieve all rows inserted in sqlite database and display in table view cells containing labels as subviews with different sections
抱歉这个问题...感谢每一位观看此内容的人,如果有用,请采纳
因此我没有删除这个问题,再见 TC :)
【问题讨论】:
【参考方案1】:我给你一个建议,试试吧。我希望它会起作用。
做一件事,只需从viewDidAppear
或viewWillAppear
中的sqlite 检索数据并将数据保存在nsmutableArray 中。
然后在 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
中返回 [yourArray count]。
对于重新加载表,只需尝试使用 [self.tableview reloadData]
我希望它会工作。请让我知道任何进一步的说明。
【讨论】:
一个小疑问我应该在哪里放置reload Data语句以及如何显示检索到的数据,我应该像以前一样使用标签 我实现了你的建议,但表格视图显示为平面背景,标题视图标题为添加提醒页面,请帮助我在哪里磨损 你把背景颜色弄清楚了吗?是的,你可以使用标签并添加到 cell.contentview 您的单元数问题是否解决。 [self.tableview reloadData] 应该写在保存按钮点击方法上。 如果没有完成,请您尝试一天,然后我明天会澄清。我要离开这一天。再见,祝你好运。【参考方案2】:要制作具有所需颜色的单元格,只需在
中编写以下代码cell.contentView.backgroundColor=[UIColor colorWithPatternImage:@"Give your cell image"]
在(UITableViewCell *)tableView:(UITableView *)view cellForRowAtIndexPath:(NSIndexPath *)indexPath
方法中而不是在条件中,你应该把它放在条件之外。以及为什么用这种方法做数据库工作。它会减慢您的应用程序。让我知道任何澄清。
【讨论】:
嘿,我真的非常感谢两天以来对我的问题的耐心和回应,实际上我做了你所建议的一切,它没有来,我应该放置我的项目的 zip 文件,以便沟通差距可以填补 也是为了更好地理解问题 o/p 与上面的屏幕截图相同 具有空白背景和添加提醒视图的标题视图标题值的那个 现在我进行了更改,我采用了一个方法 -(void)getData 并编写了用于从数据库中检索数据的代码,并将标签显示在表格视图的单元格中。然后我调用了 [self getData] viewDidAppear方法中的方法,然后调用[self.tableView reloadData],单元格没有显示,这是问题请看第一个屏幕截图并与其他两个比较以上是关于按顺序用 sqlite 数据库中的表行填充表视图部分的主要内容,如果未能解决你的问题,请参考以下文章