根据从treeview中选取的子节点填充复选框

时间:2016-04-11 15:37:39

标签: c# winforms checkbox treeview

我有一个TreeView和一个单独的panel 3 checkboxes。 Treeview数据是从数据库中提取的,此数据库在Product表中有两个表ModelModel,有3个columns - twoDoor,{ {1}}和threeDoor。 我的TreeView看起来像这样;

fiveDoor

在单独的面板上有3 CAR(PRODUCT) ->FORD(MODEL) ->BMW(MODEL) ->VW(MODEL) ;

  • 双门
  • 三门
  • 五门

这些checkboxes的状态已在checkboxes db中定义。 如何在Model

中选择任何子节点(模型)来显示其状态

我的代码:

TreeView

1 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题,您可以采取以下措施。

首先,创建一个类来保存您的Model信息:

class ModelInfo
{
    public string Name { get; set; }
    public bool TwoDoor { get; set; }
    public bool ThreeDoor { get; set; }
    public bool FiveDoor { get; set; }
}

其次,修改您的PopulateTreeView方法,如下所示:

public void PopulateTreeView(int parentId, TreeNode parentNode)
{

    // ...    

    foreach (DataRow dr in dtchildc.Rows)
    {
        // Populate model info from the data
        var modelInfo = new ModelInfo { Name = dr["ModelName"].ToString() };
        //modelInfo.TwoDoor = dr[...];
        //modelInfo.ThreeDoor = dr[...];
        //modelInfo.FiveDoor = dr[...];

        // Create and add a new node
        var childNode = (parentNode == null ? treeView1.Nodes : parentNode.Nodes).Add(modelInfo.Name);

        // Associate info with the node
        childNode.Tag = modelInfo;
    }

    // ...              
}

关键部分是将ModelInfo存储在Node.Tag属性中,以便以后检索。

最后,订阅TreeView.AfterSelect事件并在事件处理程序中放入如下内容:

// Get the model info from the selected node
var modelInfo = e.Node != null ? e.Node.Tag as ModelInfo : null;
// Update the checkboxes accordingly
chkTwoDoor.Checked = modelInfo != null && modelInfo.TwoDoor;
chkThreeDoor.Checked = modelInfo != null && modelInfo.ThreeDoor;
chkFiveDoor.Checked = modelInfo != null && modelInfo.FiveDoor;

表示双状态复选框样式,或者

chkTwoDoor.CheckState = modelInfo == null ? CheckState.Indeterminate : modelInfo.TwoDoor ? CheckState.Checked : CheckState.Unchecked;
chkThreeDoor.CheckState = modelInfo == null ? CheckState.Indeterminate : modelInfo.ThreeDoor ? CheckState.Checked : CheckState.Unchecked;
chkFiveDoor.CheckState = modelInfo == null ? CheckState.Indeterminate : modelInfo.FiveDoor ? CheckState.Checked : CheckState.Unchecked;

表示三态复选框样式。