Фон : я заполняю множество asp.net c # GridViews и ListViews из базы данных, и впоследствии пользователи могут экспортировать их в Excel. Я хочу экспортировать как родной Excel (не HTML). Я не могу использовать автоматизацию офиса, и я использую JET, который отлично работает. Я не контролирую машины пользователей.
Вопрос : при экспорте вы должны указать Jet, какой тип у каждого поля, в моем случае «text» (varchar) или «numeric» (double). Разница в том, что если вы экспортируете числовой столбец, пользователи могут суммировать данные в Excel, где строки экспортируются с начальным апострофом и поэтому не используются в арифметике.
В настоящее время я анализирую первую строку данных Grid / ListView, проверяю, является ли каждое значение числовым или текстовым, и соответственно назначаю тип столбцу. Это работает, за исключением случаев, когда в первом столбце есть что-то, что выглядит числовым, но на самом деле это текстовая строка. Я не хочу анализировать каждую строку, чтобы убедиться, что у меня правильный тип данных, так как некоторые из этих экспортов довольно велики.
Когда я загружаю Grid / ListView из базы данных, база данных точно знает, какой тип у каждого поля. Итак, мой вопрос ... как мне извлечь тип элемента базы данных за элементом Grid / ListView? Я мог бы явно закодировать его как атрибут элемента, но это дублирует информацию, которая у меня уже есть, если только я смогу добраться до нее.
Я знаю, что там, где у меня есть DataTable, я могу получить базовый тип из этого, но в основном у меня нет удобных таблиц, только Grid / ListView.
-
(редактировать)
Обратите внимание, что Jet выдаст, если вы попытаетесь вставить пустую строку в числовой столбец, который может содержать пустые значения. Способ сделать это - опустить это имя столбца в операторе вставки или вывести ноль.