1

次の方法でプロジェクトのツリービューに入力します。

            Gtk.ListStore treeview1ListStore = new Gtk.ListStore (typeof (String), typeof (String));
protected void FillTreeView(TreeView MyTreeView, Gtk.ListStore TreeViewListStore, String[] Column1, String[] Column2)
{
    for(Int32 i=0;i!=Column1.Length;i++)
    {
       TreeViewListStore.AppendValues(Column1[i],Column2[i]);
    }
    MyTreeView.Model=TreeViewListStore
}

このメソッドを次の方法で呼び出します。

String[] column1 = new String[]{"column1_1","column1_2","column1_3"};
String[] column2 = new String[]{"column2_1","column2_2","column2_3"};
this.FillTreeView(this.treeview1, treeview1ListStore, column1,column2);

ここで、ツリービュー値の一部を変更したいのですが、使用する場合:

    foreach(Gtk.Object currentNode in treeviewListStore)
    {

    }

プログラムがクラッシュします。ListStoreの値を変更するにはどうすればよいですか?

4

2 に答える 2

2

SetValues()関数を使用することを考えましたか?これは、選択したrawのみに必要な値を入力する例です。このコードは簡単に変更できるため、TreePathを使用して特定の行に値を変更できます。

TreeIter iter; TreeModel model;

if( MyTreeView.Selection.GetSelected(out model, out iter))
    TreeViewListStore.SetValues(iter,"column1_1","column1_2","column1_3");
于 2012-11-25T15:53:53.840 に答える
0

これは、特定の「行」で更新が行われる例です。columnNumberはモデルのインデックスとして使用されます。

    public void updateDataOfListStoreInTreeView(ListStore mListstore, int ColumnNumber, params string[] str)
    {
        try {
            bool bUpdated = false;
            TreeIter tmpTreeIter; 

            mListStore.GetIterFirst(out tmpTreeIter);
            object o = mListStore.GetValue(tmpTreeIter, ColumnNumber);
            while(o!=null)
            {
                if(o.ToString()==str[ColumnNumber].ToString()) {
                    mListStore.SetValues(tmpTreeIter,str); // update row
                    bUpdated=true;
                    break;
                }
                if(mListStore.IterNext(ref tmpTreeIter)) {
                    o = mListStore.GetValue(tmpTreeIter, ColumnNumber);
                }
                else 
                    o = null;
            }

            if(!bUpdated)  
                mListStore.AppendValues (str); // Add some data to the store
        }
        catch (Exception e)
        {
            Console.WriteLine("WARNING: adding to treeview caused exception");
        }
    }
于 2016-06-06T12:57:46.227 に答える