最好是设计成,可以设定产品类别对应的显示那些字段的功能。即在左边点击某一类别后,从设定中读取出对应的显示字段,可编辑列等相关信息。然后重新绑定你的gridview。
就是一个这样的思路,可能具体实施起来会形成一个系统。但有助与后续功能的开发和控制。。

解决方案 »

  1.   


    商品类别层数未知的话,用递归建吧
    ID Name PID
    绑定TreeNode的url时,把对应的ID绑定上
      

  2.   

    1、产品类别对应的需要显示的字段开发人员是不知道的,是用户自定义的,因为开发人员并不知道软件使用者是卖什么商品的
    2、产品类别对应的需要显示的几个关键字段,这几个字段不仅要在DataGridView上需要显示,同时也要在双击记录弹出的明细窗体上也需要显示,并且需要按顺序显示所有的自定义字段
    我的设计表为:
    商品类别表:
    typeId  name      parentId
    1       家用电器    0
    2       小家电      1
    3       电吹风      2商品类别和对应的字段的关系表:
    ID typeId fieldName      displayName fieldType value   unit isMajorField controlType
    1  3      goodsName      商品名称    string    HP8203       1            textbox
    2  3      productCompany 生产厂家    string    Philips      1            textbox
    3  3      stock          库存量      int       10      只   1            textbox
    4  3      weight         产品净重    fload     0.65    KG   0            textbox
    5  3      color          颜色        string    粉红         1            combolbox 
    这个系统的问题关键是在,该系统的使用者是卖任何商品的,所以商品类别和商品都是需要用户来自定义,大家觉得我的表设计有什么问题存在不? 或者希望大家能给一个更好的设计方案,谢谢
      

  3.   

    用treeView控件就可以搞店了
    #region TreeNode 添加无限节点函数
            /// <summary>
            /// TreeNode 添加无限节点函数
            /// </summary>
            /// <param name="treeNodeCollection"></param>
            /// <param name="dt"></param>
            /// <param name="AreaID"></param>本级编码
            /// <param name="SjAreaID"></param>上级编码
            /// <param name="AreaName"></param>本级编码名称
            /// <param name="ParentFlag"></param>上级编码标志
            /// LoadTreeNode(treeView1.Nodes[0].Nodes, dte, "AreaID", "SjAreaID", "AreaNanme", "0"); 引用函数
            /// treeView1.Nodes[0].Expand();展开父节点
            public void LoadTreeNode(TreeNodeCollection treeNodeCollection, DataTable dt, string AreaID, string SjAreaID, string AreaName, string ParentFlag)
            {
                try
                {
                    if (dt.Rows.Count <= 0) return;
                    TreeNode tmpNode;
                    string oldFilter = dt.DefaultView.RowFilter;
                    DataView dv = new DataView(dt);
                    dv.Sort = dt.DefaultView.Sort;
                    if (dv[0][SjAreaID].GetType() == typeof(System.String))
                        dv.RowFilter = SjAreaID + "='" + ParentFlag + "'";
                    else
                        dv.RowFilter = SjAreaID + "=" + ParentFlag;
                    if (oldFilter != string.Empty)
                        dv.RowFilter = dv.RowFilter + " and " + oldFilter;
                    foreach (DataRowView drv in dv)
                    {
                        tmpNode = new TreeNode();
                        tmpNode.Text = drv[AreaName].ToString().Trim() + "(" + drv[AreaID] + ")";
                        tmpNode.Tag = drv[AreaID];
                        string father = drv[AreaID].ToString();
                        treeNodeCollection.Add(tmpNode);
                        LoadTreeNode(tmpNode.Nodes, dt, AreaID, SjAreaID, AreaName, father);
                    }
                }
                catch (Exception te)
                {
                    MessageBox.Show(te.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }
            #endregion
      

  4.   

    另外加一个表存用户的商品类别:
    userid  usertypeId 
    1000    1,2,3,4...
    1001    2,3,4 .....
    ..................... 
      

  5.   

    Tree递归,显示各种类的商品名称
    每一种商品都对应一个商品类别
      

  6.   


    好像大家都没理解我的意思啊,我问的问题并不是Tree怎么实现,而是针对商品的自定义,数据库表应怎么设计?“每一种商品都对应一个商品类别”你说的这个应该是针对已经存在的商品来说的,可现在没有一个常规的商品表,因为不同商品的规则参数都是不同的,不能简单的将所有商品存在一个商品表的,不能简单的认为只要建一个商品种类表和一个商品表,商品表对应商品种类表的主键,不能简单的这么认为啊。郁闷啊,大家都想的太简单了