Я знаю, что Вы попросили Java, но это кажется мне задачей, хорошо подходящей для языка сценариев. Вот быстрое (очень простое) решение, записанное в Groovy.
Записи test.csv
string,float1,float2,integer
hello world,1.0,3.3,4
goodbye world,1e9,-3.3,45
hello again,-1,23.33,456
hello world 3,1.40,34.83,4999
hello 2 world,9981.05,43.33,444
csvtoxml.groovy
#!/usr/bin/env groovy
def csvdata = []
new File("test.csv").eachLine { line ->
csvdata << line.split(',')
}
def headers = csvdata[0]
def dataRows = csvdata[1..-1]
def xml = new groovy.xml.MarkupBuilder()
// write 'root' element
xml.root {
dataRows.eachWithIndex { dataRow, index ->
// write 'entry' element with 'id' attribute
entry(id:index+1) {
headers.eachWithIndex { heading, i ->
// write each heading with associated content
"${heading}"(dataRow[i])
}
}
}
}
следующий XML к stdout:
<root>
<entry id='1'>
<string>hello world</string>
<float1>1.0</float1>
<float2>3.3</float2>
<integer>4</integer>
</entry>
<entry id='2'>
<string>goodbye world</string>
<float1>1e9</float1>
<float2>-3.3</float2>
<integer>45</integer>
</entry>
<entry id='3'>
<string>hello again</string>
<float1>-1</float1>
<float2>23.33</float2>
<integer>456</integer>
</entry>
<entry id='4'>
<string>hello world 3</string>
<float1>1.40</float1>
<float2>34.83</float2>
<integer>4999</integer>
</entry>
<entry id='5'>
<string>hello 2 world</string>
<float1>9981.05</float1>
<float2>43.33</float2>
<integer>444</integer>
</entry>
</root>
Однако код делает очень простой парсинг (не принимающий во внимание заключенные в кавычки или оставленные запятые), и это не составляет возможные отсутствующие данные.
Я бы обрезал содержимое любой ячейки сверх определенного размера (с многоточием для обозначения усечения) и позволял щелкнуть ячейку, чтобы отобразить всплывающее окно с полным содержимым отображается в прокручиваемом окне. Или я бы отобразил содержимое этих потенциально больших ячеек в настраиваемом UserControl, который сам содержит полосы прокрутки, если текст превышает определенную длину.
Вы столкнулись с проблемой, которая возникает из-за непреднамеренного использования DataGridView, поэтому я не удивлен, что нет простого встроенного способа справиться с этим.
Обновление : для просмотра журналов ReportViewer
может быть более подходящим элементом управления. Вот несколько ссылок по его использованию: