Loading ...

Forse Click è la migliore libreria per il parsing della riga di comando che ho provato in Python.

E' stata veramente facile usarla; prima di tutto installiamola:

$ pip install click

Oggi vediamo come usare finestre modali con AngularJS.

In pratica, cliccando su un tasto, vedremo il dettaglio di un record nella finestra modale.

Partiamo quindi dalla tabella che espone i dati:

                    <table class="table table-bordered table-condensed table-striped">
                        <thead>
                            <tr>
                                <th>Titolo</th>
                                <th>Autore</th>
                                <th>Editore</th>
                                <th></th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr ng-repeat="book in books| filter:searchText">
                                <td>{{book.title}}</td>
                                <td>{{book.author}}</td>
                                <td>{{book.editor}}</td>
                                <td>
                                    <button type="button" class="btn btn-sm btn-primary"
                                            ng-click="open(book)">Dettaglio</button>
                                </td>
                            </tr>
                        </tbody>
                    </table>

Su come prendere i dati potete vedere questo articolo (anche se non usiamo una table in quel caso, ma il concetto è uguale).

Faccio un passo in più, e vediamo come aprire una finestra di dialogo cliccando su un elemento della ListView.

Qui abbiamo visto come riempire una ListView da dati JSON.

Come possiamo vedere, sulla ListView mostriamo solo un campo rispetto a quelli che prendiamo.

Adesso, cliccando su una riga, vogliamo vedere anche gli altri.

Prima di tutto creiamo un altro file QML (detail_dialog.qml) con questo dentro:

import QtQuick 2.0

Item {
    id: detailDialog
    anchors.fill: parent
    PropertyAnimation {
        target: detailDialog
        property: "opacity"
        duration: 400
        from: 0
        to: 1
        easing.type: Easing.InOutQuad
        running: true
    }

    Rectangle {
        id: dialogWindow
        width: 200
        height: 200
        radius: 10
        border.color: "black"
        anchors.centerIn: parent
        Text {
            anchors.centerIn: parent
            text: "AUTORE: " + author + "\nEDITORE: " + editor + "\nPREZZO: " + price + "\nISBN: " + isbn + "\nNOTE: " + note
        }
        MouseArea{
            anchors.fill: parent
            onClicked: {
                detailDialog.destroy()
            }
        }
    }
}

Adesso dobbiamo intercettare l'evento click sulla riga nella finestra principale.

Abbiamo visto come riempire una ListView in Android usando dati in formato JSON.

Solo che la lista risulta "statica" nel senso che come ci arriva la leggiamo, e non possiamo ordinarla.

Qui vediamo proprio questo: come ordinare una ListView simulando una tabella con righe e colonne.

Partiamo dalla Activity principale:

public class MainActivity extends Activity {
    
    private TextView txtTitolo = null;
    private TextView txtCreazione = null;
    private ListView listView = null;
    private SimpleAdapter adapter = null;
    private ArrayList> list = new ArrayList>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setLista();
        txtTitolo = (TextView) findViewById(R.id.h_titolo);
        txtCreazione = (TextView) findViewById(R.id.h_creazione);
        txtTitolo.setOnClickListener(new ListSort(list, "titolo", adapter));
        txtCreazione.setOnClickListener(new ListSort(list, "creazione", adapter));
    }
    
    private void setLista() {
        try {
            listView = (ListView) findViewById(R.id.lista_articoli);
            JSONArray jsonArray = new JSONArray(JsonFile.read(path + "blog_articoli.json"));
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jo = jsonArray.getJSONObject(i);
                HashMap map = new HashMap();
                map.put("id", jo.getString("id"));
                map.put("titolo", jo.getString("titolo"));
                map.put("creazione", jo.getString("creazione"));
                map.put("modifica", jo.getString("modifica"));
                map.put("count", jo.getString("count"));
                list.add(map);
            }
            adapter = new SimpleAdapter(this, list, R.layout.rows,
                    new String[] { "titolo", "creazione", "modifica", "count" },
                    new int[] { R.id.titolo, R.id.creazione, R.id.modifica, R.id.count });
            listView.setAdapter(adapter);
        } catch (JSONException e) {
        } catch (Exception e) {
        }
    }

}

Tralascio tutta la parte del recupero dati, partendo che l'abbiate già messa a punto (quella parte non cambia).

In una pagina aspx ho un LinkButton con il quale attivo un evento.

La cosa più "problematica" è che devo passare il valore del LinkButton ad un altro componente.

In questo caso non bastano le solite proprietà Value o Text.

Andiamo con ordine; questo il componente nella pagina:

<asp:LinkButton ID="btn_art_singolo" runat="server" OnCommand="go_Click" CommandName='<%# DataBinder.Eval(Container.DataItem, "ARTICOLO") %>'>
   <%# DataBinder.Eval(Container.DataItem, "ARTICOLO") %>
</asp:LinkButton>

Il LinkButton sta dentro a un Repeater e prende il valore in maniera dinamica da database.

Tanto per cominciare no avremo un evento OnClick ma u nevento OnCommand.