使用MySQL C#创建递归MenuStrip

时间:2014-11-03 11:40:37

标签: c# mysql winforms menustrip

我有下一个表节点。


1.子模块。

  sub_id  sub_name          subid_parent
  1       Articulos         NULL
  2       Proveedores       NULL
  3       Presentaciones    1
  4       Categorias        1
  5       Subcategorias     4
  6       Pasillos          1
  7       Compras           2

2. ModulesOptions。

modoption_id modoption_name sub_id

1              Nuevo Articulo           1
2              Modificar Articulo       1
3              Nuevo Proveedor          2
4              Modificar Proveedor      2
5              Nueva Presentacion       3
6              Modificar Presentacion   3
7              Nueva Categoria          4
8              Modificar Categoria      4
9              Nueva Subcategoria       5
10             Modificar Subcategoria   5
11             Nuevo Pasillo            6
12             Modificar Pasillo        6
13             Nueva Compra             7
14             Modificar Compra         7

现在我想创建一个像这样的递归menustrip。

Articles                                             Proveedores
   L Nuevo Articulo                                     L Nuevo Proveedor
   L Modificar Articulo                                 L Modificar Proveedor
   L Presentaciones                                     L Compras
       L Nueva Presentacion                                 L Nueva Compra
       L Modificar Presentacion                             L Modificar Compra
   L Categorias
       L Nueva Categoria
       L Modificar Categoria
       L SubCategoria
           L Nueva SubCategoria
           L Modificar SubCategoria
   L Pasillos
       L Nuevo Pasillo
       L Modificar Pasillo

这是我的代码。

DataSet DataSet = new DataSet();
DataSet.Tables.Add(DataTable_SubModules); // Loaded from Database
DataSet.Tables[0].TableName = "SubModules";

DataSet.Tables.Add(DataTable_ModulesOptions); // Loaded from Database
DataSet.Tables[1].TableName = "Modules_Options";

提前谢谢(y)。

1 个答案:

答案 0 :(得分:1)

MenuStrip menuStrip = new MenuStrip();
List<ToolStripMenuItem> items = new List<ToolStripMenuItem>();
for(int a = 0; a< dataSet.Tables[0].Rows.Count;a++){

    ToolStripMenuItem item = new ToolStripMenuItem();
    item.Name = dataSet.Tables[0].Rows[a]["sub_name"];
    item.Text = dataSet.Tables[0].Rows[a]["sub_name"];
    items.Add(item);
    int parent = dataSet.Tables[0].Rows[a]["subid_parent"];
    if(parent == null) //this wont work btw since you cant null int, i would suggest you use 0 as no parent instead
        menuStrip.Items.Add(item);
    else
        items[parent-1].Items.Add(item);
}

for(int a = 0; a< dataSet.Tables[1].Rows.Count;a++){

    ToolStripMenuItem item = new ToolStripMenuItem();
    item.Name = dataSet.Tables[1].Rows[a]["modoption_name"];
    item.Text = dataSet.Tables[1].Rows[a]["modoption_name"];
    int parent = dataSet.Tables[1].Rows[a][" sub_id"];
    items[parent-1].Items.Add(item);
}

尝试此操作并更改

DataSet DataSet = new DataSet();
to 
DataSet dataSet = new DataSet();

因为您正在调用它与该类相同的名称。正如我所提到的那样,数据库中没有null的东西使用一种不同的方法,比如使用0来表示没有父母的菜单项(直接在menustrip上)