动态添加控件时跨两列

时间:2014-09-12 20:59:44

标签: c# asp.net

我有一个ASP.NET Web应用程序。此应用程序呈现词汇表类型的项目,类似于以下内容:

glossary

这会查看项目字母表中的所有字母。我正在渲染它并使用以下内容将其直接附加到服务器控件中的Controls集合:

     List<char> alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray().ToList();
     foreach (char c in alpha)
     {
            Label lblAlphaCharacter = new Label();
            lblAlphaCharacter.Font.Size = 24;
            lblAlphaCharacter.Font.Bold = true;
            lblAlphaCharacter.Text = c.ToString(CultureInfo.InvariantCulture);
            Controls.Add(lblAlphaCharacter);
            Controls.Add(new LiteralControl("<p>"));
            FilterOnAlphaCharacter(this, Page, c);
             Controls.Add(new LiteralControl("<p>"));
      }

        private static void FilterOnAlphaCharacter(Control control, Page page, char character)
        {

            foreach (List<Things> item in items)
            {
                string title = item.Title;
                string description = item.Definition;
                HyperLink link = new HyperLink();
                link.Text = title;
                control.Controls.Add(link);

                Label lblDescription = new Label();
                lblDescription.Text = string.Format(" - {0}", description);
                control.Controls.Add(lblDescription);
            }
        }
    }

我试图根据内容对此进行平分,因此它看起来像这样:

enter image description here

这可能有不同数量的项目。所以实际上,“A”下可能有25个条目,“Z”下可能有1个条目。以上只是一个例子,它遍历所有字母A-Z。预期结果将基于内容量,它将在两列之间平均分配。我必须做这个服务器端(我正在考虑使用Table或HtmlTable和相关对象)。

Howe你会实现一个解决方案,在表格或类似内容中平均分割内容(对方法无动于衷)。

1 个答案:

答案 0 :(得分:1)

试试这个:

 //it shows the number of line that inserting during the process
            private int _inserteditemCount;
            //its number of items in each column
            private int _itemsCount;
            //line height use for determine paragraph line height
            private const string Lineheight = "30px";

            protected void Page_Load(object sender, EventArgs e)
            {
                _inserteditemCount = 0;


      var alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
//you can do this query in data access layer
                    var listCountcount = new Thingsclass().GetThings().Count;
                    //Count of rows on dictionary + number of leters
                    _itemsCount = (listCountcount + alpha.Count()) / 2;
                    var leftdiv = new HtmlGenericControl("div");
                    var rightdiv = new HtmlGenericControl("div");
                    //you can change this styles 
                    leftdiv.Style.Add("display", "inline-block");
                    leftdiv.Style.Add("width", "50%");
                    leftdiv.Style.Add("float", "Left");
                    rightdiv.Style.Add("display", "inline-block");
                    rightdiv.Style.Add("float", "right");
                    rightdiv.Style.Add("width", "50%");
                    foreach (var c in alpha)
                    {
                        var lblAlphaCharacter = new Label();
                        lblAlphaCharacter.Font.Size = 24;
                        lblAlphaCharacter.Font.Bold = true;
                        lblAlphaCharacter.Text = c.ToString(CultureInfo.InvariantCulture);
                        var control = _inserteditemCount <= _itemsCount ? leftdiv : rightdiv;
                        var paragraph = new HtmlGenericControl("p");
                        paragraph.Style.Add("line-height", Lineheight);
                        paragraph.Controls.Add(lblAlphaCharacter);
                        control.Controls.Add(paragraph);
                        FilterOnAlphaCharacter(leftdiv, rightdiv, c.ToString());
                        _inserteditemCount++;
                    }
                    Panel1.Controls.Add(leftdiv);
                    Panel1.Controls.Add(rightdiv);
                }

            private void FilterOnAlphaCharacter(Control leftctr, Control rightctr, string character)
            {
//you can do this query in data access layer
                    var items = new Thingsclass().GetThings().Where(c => c.chara.ToLower().Equals(character.ToLower()));

                foreach (var item in items)
                {
                    var paragraph = new HtmlGenericControl("p");
                    paragraph.Style.Add("line-height", Lineheight);
                    var control = _inserteditemCount <= _itemsCount ? leftctr : rightctr;

                    var title = item.Title;
                    var description = item.Description;
                    var link = new HyperLink { Text = title };
                    paragraph.Controls.Add(link);

                    var lblDescription = new Label { Text = string.Format(" - {0}", description) };
                    paragraph.Controls.Add(lblDescription);
                    _inserteditemCount++;
                    control.Controls.Add(paragraph);
                }
            }