C# 递归树视图建筑(使用颜色)
我目前正在构建一个小型的C应用程序,使用户能够将一些数据从Excel转换为另一张工作表中的另一种视图 在该数据中,有一个层次结构:实体>扇区>子扇区>分区>…>房间 ... 这意味着最多可以有3个额外的未命名步骤 如您所见,数据基于颜色,橙色为实体,~灰色为扇区,蓝色为子扇区,白色为房间 当用户加载Excel文件时,它还将工作表名称作为实体加载,并将其添加到树视图中;以下是方法:C# 递归树视图建筑(使用颜色),c#,excel,colors,treeview,treenode,C#,Excel,Colors,Treeview,Treenode,我目前正在构建一个小型的C应用程序,使用户能够将一些数据从Excel转换为另一张工作表中的另一种视图 在该数据中,有一个层次结构:实体>扇区>子扇区>分区>…>房间 ... 这意味着最多可以有3个额外的未命名步骤 如您所见,数据基于颜色,橙色为实体,~灰色为扇区,蓝色为子扇区,白色为房间 当用户加载Excel文件时,它还将工作表名称作为实体加载,并将其添加到树视图中;以下是方法: private void BT_load_Click(object sender, EventArgs e) {
private void BT_load_Click(object sender, EventArgs e)
{
Tools.SelectExcelFile(OF_xls);
try
{
xlApp = new Excel.Application();
xlWorkbook = xlApp.Workbooks.Open(LB_path.Text, 3, 1);
Template_Metro test = new Template_Metro();
foreach(Excel.Worksheet wSheet in xlWorkbook.Worksheets)
{
test.Entites.Add(new Entite(wSheet.Name));
}
foreach(Entite entite in test.Entites)
{
myTreeView.Nodes.Add(entite.Nom);
}
}
catch(Exception x)
{
Tools.ErrorBox(x);
}
}
加载操作完成后,用户在树视图中选择一个节点,我们将使用CoeurDePole作为示例,并提示用户选择图片上黑框中的内容。
当用户选择Excel上的数据并单击“创建”按钮时,应使用相应的层次结构更新树
//IN THE FORM CLASS
private void BT_create_Click(object sender, EventArgs e)
{
if (myTreeView.SelectedNode != null)
{
Excel.Range selection = xlApp.Selection;
Tools.AddNodes(selection, myTreeView);
}
else
{
MessageBox.Show("Sélectionnez une entité dans laquelle ajouter les données", "Erreur");
}
}
//IN THE STATIC TOOLS CLASS
public static void AddNodes(Excel.Range selectedCells,
TreeView treeView)
{
List<Color> colors = GetColors(selectedCells);
try
{
/*
* This creates simple nodes within the selected node
* foreach (Excel.Range cell in selection.Cells)
* {
* treeView.SelectedNode.Nodes.Add(((Excel.Range)cell).Value2.ToString());
* }
*/
}
catch
{
MessageBox.Show("Aucunes cellules sélectionnées!", "Erreur");
}
}
public static List<Color> GetColors(Excel.Range selection)
{
List<Color> colors = new List<Color>();
Color color;
foreach (Excel.Range selectionCell in selection.Cells)
{
color = ColorTranslator.FromOle(Convert.ToInt32(selectionCell.Interior.Color));
if (colors.Contains(color) == false)
{
colors.Add(color);
}
}
return colors;
}
此外,我还创建了与实体、扇区…相对应的简单类,每个类都包含来自较低层次结构的对象列表。e、 g.类实体包含一个扇区列表
提前感谢您提供的任何帮助,我不需要C答案,但非常感谢您提供的一些算法帮助
Elliott没有一种算法可以模仿人脑。大部分颜色是随机的。我会首先修复工作表,使颜色一致。没有颜色的行是A列包含数据的行。所以第13行和第15行我会在A列中添加数据。不幸的是A列并不总是包含数据。。。我之所以使用颜色,是因为在每个项目中,excel文件都包含一个固定的颜色代码。是客户机修复数据,因为他们所建的房间包含或不包含有用的数据,然后修复创建excel文件的人的颜色不一致。也许一把枪会有帮助。但是仍然不能回答我的问题,关于如何根据本例中使用的颜色代码递归创建treenode:p