将图像仅添加到树视图中的一个节点

Adding an image to only one node within a Tree View

我目前正在根据客户请求修改树视图控件(Telerik MVC 扩展)。他们的要求很简单:如果树中的某个项目有附件,则在节点旁边添加一个回形针以识别它。

到目前为止,我已经能够这样做,但是发现了一个小问题。我可以将图像添加到某些具有附件的节点,但是,所有没有附件的节点都应该没有图像(这样,我的意思是它们应该在树中正常显示)。相反,我发现树放置了一个与回形针图像大小相同的空白。

有没有办法动态关闭此空白(也就是如果不需要则不添加图像 Url)?下面是我执行此过程的代码(由于只有底层显示附件,因此在树的扩展方法上完成)。

导航控制器

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult GetNextTreeViewLevel(TreeViewItem node)
{
    ...
    //If bottom layer, then execute the following
    var data = _TreeRepo.GetProcessesByParcel(int.Parse(values[1]), cntTreeList);
    nodes = from item in data
              select new TreeViewItem
              {
                 Text = item.strProcess,
                 Value = "PR" + "," + item.cntProcess.ToString(),
                 LoadOnDemand = false,
                 Enabled = true,
                 Selected = SelectedSearchResult.ToString().Length > 0
                                        && SelectedSearchResult.ToString().Split('~').Length > 3
                                        && decimal.Parse(SelectedSearchResult.ToString()
                                            .Split('~')
                                            .Last()
                                            .Substring(2)) == item.cntProcess
                 ImageUrl = item.ysnHasAttachment.HasValue && item.ysnHasAttachment.Value == 1
                              ? @"/Content/NewImages/attachment.png"
                              : string.Empty
              };
    return new JsonResult { Data = nodes };
}

外观的屏幕截图without/with 图片代码 Url:

我终于想出了解决这个问题的方法。问题是我如何将数据添加到节点。最初的逻辑是在获取数据后进行 Linq 查询以获取 IEnumerable 对象。

因此,每个节点都试图添加图像(即使有 none)。因此看起来很奇怪 space。以下是我如何修改此逻辑以正确获取数据。

var processNodes = new List<TreeViewItem>();
var data = _TreeRepo.GetProcessesByParcel(int.Parse(values[1]), cntTreeList);

foreach (var item in data)
{
    #region Process has at least one Attachment
    if (item.ysnHasAttachment.HasValue && item.ysnHasAttachment.Value == 1)
        processNodes.Add(new TreeViewItem
        {
           Text = item.strProcess,
           Value = "PR" + "," + item.cntProcess.ToString(),
           LoadOnDemand = false,
           Enabled = true,
           Selected = SelectedSearchResult.ToString().Length > 0
                        && SelectedSearchResult.ToString().Split('~').Length > 3
                        && decimal.Parse(SelectedSearchResult.ToString()
                        .Split('~')
                        .Last()
                        .Substring(2)) == item.cntProcess,
           ImageUrl = "/Content/NewImages/smallAttachment.png"
        });
    #endregion
    #region Process has no Attachments
    else
        processNodes.Add(new TreeViewItem
        {
           Text = item.strProcess,
           Value = "PR" + "," + item.cntProcess.ToString(),
           LoadOnDemand = false,
           Enabled = true,
           Selected = SelectedSearchResult.ToString().Length > 0
                        && SelectedSearchResult.ToString().Split('~').Length > 3
                        && decimal.Parse(SelectedSearchResult.ToString()
                        .Split('~')
                        .Last()
                        .Substring(2)) == item.cntProcess
        }
   #endregion
}
nodes = processNodes;

此时,您现在可以return节点。那些应该有附件图标的会,那些不应该有的不会。有趣的是 4 个月后,你可以想出一些即兴的东西。