2

データテーブル列をGridviewにバインドできます

ここでは、データテーブルの列から個別の値を選択し、それらをTreeViewに挿入します。

string[] menuGroup = ((from DataRow row1 in _ds.Tables["Rest_grdvitems"].Rows
                       orderby row1["Menu_Group"]
                   select row1["Menu_Group"].ToString()).Distinct()).ToArray();

           TreeNode node = new TreeNode("All Items");
           TV_Categories_List.Nodes.Add(node);
           foreach (string menuitem in menuGroup)
           {
               TreeNode node1 = new TreeNode(menuitem);
               TV_Categories_List.Nodes.Add(node1);
           }

TreeViewに挿入する行の数が多いため、反復を避ける必要があります。

ヘップしてくれませんか?

4

1 に答える 1

1

TreeView (または ListView) を DataSource に直接バインドすることはできません。

@IamStalker がコメントとして述べているように、内部の WinForms バインディング コントロール メカニズムには反復があります。データを反復して TreeView に入力することに問題はありません。

.BeginUpdateパフォーマンスが主な関心事である場合は、ノードを追加するコードを() とメソッドで囲む必要があり.EndUpdate()ます。これにより、移入操作中に TreeView 表示の更新がロックされます。これは、WinForms TreeView にのみ適用されます

反復を 1 回だけ行うには、LINQ を次のように変更する必要があります (string[] の代わりに var を配置し、.ToArray() を削除します)。そのため、LINQ ステートメントはIEnumerable<string>string[] ではなく LINQ を返します。この方法では、TreeView を設定する foreach ループでのみ列挙されます。

var menuGroup = (from DataRow row1 in _ds.Tables["Rest_grdvitems"].Rows
                orderby row1["Menu_Group"]
                select row1["Menu_Group"].ToString()).Distinct();

TreeNode node = new TreeNode("All Items");

TV_Categories_List.BeginUpdate();

TV_Categories_List.Nodes.Add(node);
foreach (string menuitem in menuGroup)
{
    TreeNode node1 = new TreeNode(menuitem);
    TV_Categories_List.Nodes.Add(node1);
}

TV_Categories_List.EndUpdate();
于 2013-02-26T06:42:13.113 に答える