2014-09-12 4 views
1

У меня есть веб-приложение ASP.NET. Это приложение делает из глоссария элементов типа, подобные следующему:Span Two Columns при динамическом добавлении элементов управления

glossary

Это проходит через все буквы алфавита для элементов. Я рендеринга это и добавив его непосредственно в коллекцию Controls в Control Server, используя следующие:

 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

Это может быть разное количество предметов. Таким образом, на самом деле в разделе «А» может быть 25 записей и, возможно, 1 под «Z». Вышеприведенное является лишь примером, оно проходит через все буквы A-Z. Ожидаемый результат будет основан на количестве контента, он будет разделен поровну между двумя столбцами. Я должен сделать это на стороне сервера (я думал, используя Table или HtmlTable и связанные объекты).

Howe вы бы реализовали решение для разделения контента поровну в таблице или подобных (вроде равнодушных на подход).

ответ

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); 
       } 
      } 
Смежные вопросы