2015-07-07 3 views
1

У меня есть DataTable, который имеет много столбцов и только одну строку:Как разбить DataTable в две отдельные колонны

... 
DataSet myDataSet = new DataSet(); 
da.Fill(myDataSet); 

myDataTable = new DataTable(); 
myDataTable = myDataSet.Tables[0]; 
... 

Как я могу разделить DataSet/DataTable иметь одинаковое количество столбцов (если это - нечетное число, разделите столбцы так, чтобы первый DataTable имел дополнительный столбец).

Сценарий № 1:

Главная DataTable:

col1 col2 col3 col4 col5 col6 col7 col8 
9  0  9  5  7  4  9  3 

DataTable1:

col1 col3 col3 col4 
9  0  9  5 

DataTable2:

col5 col6 col7 col8 
7  4  9  3 

Scen арио # 2:

Главная DataTable:

col1 col2 col3 col4 col5 col6 col7 
9  0  9  5  7  4  9 

DataTable1:

col1 col3 col3 col4 
9  0  9  5 

DataTable2:

col5 col6 col7 
7  4  9 
+1

Не могли бы вы объяснить, что вы хотите достичь? Это возможно (вне курса), чтобы достичь этого, но я не могу придумать никаких причин для этого ... Я совершенно уверен, что есть лучшее решение для вашей проблемы - что бы это ни было ... – Shnugo

+0

У меня есть два отдельных ретранслятора что я пытаюсь разделить данные между ними. Ответ в этом вопросе: http://stackoverflow.com/questions/31254126/how-to-generate-dynamic-labels-and-use-the-column-name-and-value-as-the-text работает, за исключением того, что я хотел бы разделить данные и использовать два отдельных для заполнения двух отдельных повторителей. – SearchForKnowledge

ответ

2

Вы можете скопировать всю таблицу данных, а затем удалить столбцы, которые дон Не хочу.

Так что для первого примера, следующий код будет возвращать первые четыре столбца в datatable1 и остальные столбцы в DataTable 2.

Вы можете изменить свой код в соответствии с вашим числом столбцов

DataTable dataTable1; 
dataTable1 = myDataTable.Copy(); 
dataTable1.Columns.RemoveAt(4); 
dataTable1.Columns.RemoveAt(5); 
dataTable1.Columns.RemoveAt(6); 
dataTable1.Columns.RemoveAt(7); 

DataTable dataTable2; 
dataTable2 = myDataTable.Copy(); 
dataTable2.Columns.RemoveAt(0); 
dataTable2.Columns.RemoveAt(1); 
dataTable2.Columns.RemoveAt(2); 
dataTable2.Columns.RemoveAt(3); 
+0

Спасибо, но это не всегда такое же количество столбцов. – SearchForKnowledge

+0

Да, вам нужно изменить его в соответствии с размером столбца –

+0

Нет динамичного способа его выполнения? – SearchForKnowledge

1

Вы можете а также использовать перегруженную версию DataView.ToTable(String, Boolean, String[]) для достижения этой цели прохождения требуемых имен столбцов, как показано ниже

DataView view1 = new DataView(myDataSet.Tables[0]); 
DataTable table1 = view1.ToTable("Table1", true, "col1", "col3", "col4", "col5", "col6"); 


DataView view2 = new DataView(myDataSet.Tables[0]); 
DataTable table2 = view2.ToTable("Table2", true, "col2", "col7", "col8"); 
Смежные вопросы