Here I have created Sql Script that will get data as per your requirement.Now you can simply bind it to Any DataControl.
SQL
CREATE TABLE #Table(Header VARCHAR(50),[Text] VARCHAR(50))
INSERT INTO #Table VALUES
('header1','text1'),
('header1','text2'),
('header2','text1'),
('header3','text1'),
('header3','text2'),
('header3','text3')
SELECT * FROM #Table
DECLARE @cols NVARCHAR(MAX);
DECLARE @Query AS NVARCHAR(MAX);
DECLARE @PivotQuery AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(c.Header)
FROM #Table c
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'')
SET @PivotQuery = 'SELECT '+@cols+'
FROM
(
SELECT *,Row_Number() OVER (ORDER BY (SELECT 0)) as RowNum
FROM #Table
)
AS source
PIVOT
(
MAX([Text]) FOR [Header] IN ('+@cols+')
) AS pvt'
SELECT 'After pivoting Table'
EXEC sp_sqlexec @PivotQuery
SELECT 'After Removing Null vlaue From Table'
SET @Query = 'SELECT ' + @cols + ' FROM
(
SELECT Val, Mon, ROW_NUMBER() OVER (PARTITION BY Mon ORDER BY val) AS rn
FROM(
SELECT '+@cols+'
FROM
(
SELECT *,Row_Number() OVER (ORDER BY (SELECT 0)) as RowNum
FROM #Table
)
AS source
PIVOT
(
MAX([Text]) FOR [Header] IN ('+@cols+')
) AS pvt
) AS p
UNPIVOT
(
Val FOR Mon IN ('+@cols+')
) AS unpvt
) AS src
PIVOT
(
MAX(src.Val) FOR Mon IN ('+ @cols +')
)
AS pvt'
EXEC sp_sqlexec @Query
DROP TABLE #Table
Screenshot