2016-01-04 2 views
-2

таблице:крест или один ко многим

<table border="1"> 
 
    <tr> 
 
    <td><b>Name</b></td> 
 
    <td><b>Selection</b></td> 
 
    </tr> 
 
    <tr> 
 
    <td>Color</td> 
 
    <td>1,2,3</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Shape</td> 
 
    <td>a,b</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Cut</td> 
 
    <td>x</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Range</td> 
 
    <td>y</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Purity</td> 
 
    <td>8,9</td> 
 
    </tr> 
 
</table>

У меня есть один ключ, как: цвет | Форма | Вырезать | Диапазон | Чистота

И я хочу, чтобы петля на колоннах для выбора и нужно привести как следующий

1axy8
1axy9
1bxy8
1bxy9
2axy8
2axy9
2bxy8
2bxy9
3axy8
3axy9
3bxy8
3bxy9

Как я могу перебирать столбцы выбора?

+0

Проверить это http://www.codeproject.com/Articles/26050/Permutations-Combinations-and-Variations-using-C-G – Agalo

ответ

0

Вам необходимо рекурсивно проанализировать данные, чтобы получить результаты, которые вы ищете.
Попробуйте этот код

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      DataTable dt = new DataTable(); 
      dt.Columns.Add("Name", typeof(string)); 
      dt.Columns.Add("Selection", typeof(string)); 

      dt.Rows.Add(new object[] { "Color", "1,2,3" }); 
      dt.Rows.Add(new object[] { "Shape", "a,b" }); 
      dt.Rows.Add(new object[] { "Cut", "x" }); 
      dt.Rows.Add(new object[] { "Range", "y" }); 
      dt.Rows.Add(new object[] { "Purity", "8,9" }); 

      Recursion recursion = new Recursion(dt); 
      List<string> results = recursion.GetData(0); 
     } 
    } 
    public class Recursion 
    { 
     public DataTable data { get; set; } 
     public Recursion(DataTable data) 
     { 
      this.data = data; 
     } 
     public List<string> GetData(int level) 
     { 
      if (level == data.Rows.Count - 1) 
      { 
       return data.Rows[level].Field<string>("Selection").Split(new char[] {','}).Select(x => x.ToString()).ToList(); 
      } 
      else 
      { 

       List<string> children = GetData(level + 1); 
       List<string> results = data.Rows[level].Field<string>("Selection").Split(new char[] { ',' }).Select(x => children.Select(y => x + "|" + y)).SelectMany(z => z).ToList(); 
       return results; 
      } 

     } 
    } 
} 
​ 
​ 
+0

Это не HTML. Пожалуйста, запустите опцию кода snipet. В нем будет отображаться таблица, которая по умолчанию является Datatable в C#. –

+1

Никогда не видел DataTable, как раньше. Я обновил свой код для работы с DataTable. – jdweng

+0

Спасибо, jdweng. Как я хочу вот так: –

Смежные вопросы