0

我有一个包含这些列的数据库

|Name|Quantity|Price|Type|Eta|Language|
|Farmakon|200.1mg|35€|F|2|EN|
|Botron|13g|35€|F|15|ES|
|Botron|10g|31€|F|13|ES|
|Puller|0.50mg|35€|T|1|EN|
|Rovtres|7.2cl|35€|BN|12|UK|

我用这个光标

Cursor c = mDb.rawQuery(
                        "SELECT Id AS _id, Name, Quantity, Price, FROM mytable "
                                + "WHERE Type LIKE ? AND Eta LIKE ? AND Language LIKE ? ORDER BY Name",
                        new String[] { "%" + type + "%", "%" + eta + "%",
                                "%" + language + "%" });

获取值

|Name|Quantity|Price|
|Botron|10g|31€|F|13|ES|
|Botron|13g|35€|
|Farmakon|200.1mg|35€|
|Puller|0.50mg|35€|
|Rovtres|7.2cl|35€|

这将用于填充 Grid

我使用这段代码用 SimpleCursorAdapter 填充网格:

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
        R.layout.row, c, cols, views);

现在我需要根据名称乘以数量的值,例如所有Botron行的数量都应该乘以10.1 ,保持测量单位g、mg等。

因为我必须填充网格,所以这种操作应该在 Cursor c 中完成。

我该如何解决这个问题?

4

3 回答 3

1

因为我必须填充网格,所以这种操作应该在 Cursor c 中完成。

您无法修改,Cursor但您可以在适配器上使用简单ViewBinder的来进行额外的计算:

    adapter.setViewBinder(new ViewBinder() {

        @Override
        public boolean setViewValue(View view, Cursor cursor,
                int columnIndex) {
            if (view.getId() == R.id.theidOfTheViewWithTheQuantity) {
                // get the quantity from the Cursor, but I don't know how you stored it
                float quantity = cursor.getFloat(columnIndex);
                // get the name
                String name = cursor.getString(cursor.getColumnIndex(the_column_name));
                if (name.equals("Botron" )) {
                    quantity = quantity * 10.0f;
                    ((TextView)view).setText(String.valueOf(quantity));
                }
                return true;
            }
            return false;
        }

    });
于 2012-12-16T15:22:32.627 回答
0

我不确定 SQLite 是否支持将函数作为其查询的一部分,因此我建议扩展CursorAdapterbindView()并在您的方法中执行乘法。

于 2012-12-16T15:16:42.253 回答
0

您可以在将值从 加载到SimpleCursorAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder()时更改这些值。cursorGrid

于 2012-12-16T15:19:25.967 回答