使用sqlite数据库中的表行按顺序填充表视图节

时间:2011-12-12 14:00:36

标签: iphone uitableview sqlite

我有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个单元格正在出现,但问题在于显示

出现如下

enter image description here

如何连续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:)

2 个答案:

答案 0 :(得分:2)

我给你一个建议就试试吧。我希望它能奏效。

做一件事,只需从viewDidAppearviewWillAppear中的sqlite检索数据,并将数据保存在nsmutableArray中。

然后在- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section中返回[yourArray count]。

并且重新加载表只需尝试使用[self.tableview reloadData]

我希望它会起作用。请告诉我任何进一步的澄清。

答案 1 :(得分:1)

用于制作具有所需颜色的单元格,只需在

中编写以下代码即可
cell.contentView.backgroundColor=[UIColor colorWithPatternImage:@"Give your cell image"]

(UITableViewCell *)tableView:(UITableView *)view cellForRowAtIndexPath:(NSIndexPath *)indexPath 方法中,而不是在条件之外,你应该把它放在条件之外。以及为什么要在此方法中执行数据库工作。它会减慢你的应用程序。让我知道任何澄清。