|
|
|
Supreme Being
      
участник
Last Login: 16.04.2008 11:44
Сообщ.: 366,
Visits: 2 473
|
|
| По условиям задачи я должен дать возможность пользователю выгрузить полученный отчет в виде таблицы (datagrid) в файл Excel на локальной машине пользователя. Ранее я делал это с помощью Ole-автоматизации Set oExcel=CreateObject("Excel.Application") и.т.д.,с последующем добавлением адреса приложения в trusting. Но теперь объемы данных выросли и уже отобразить такой объем данных на одной странице невозможно. видимо надо использовать paging. соответственно тогда мой метод работает только для текущей страницы(page).Как выгрузить данные в Excel со всех страниц datagrid? Или может быть есть способ выгрузить данные сразу из набора данных в файл xls на локальной системе пользователя? Использую:winxp sp2, vs2003 fcl 1.1 С уважением,
|
|
|
|
|
Supreme Being
      
участник
Last Login: 16.04.2008 11:44
Сообщ.: 366,
Visits: 2 473
|
|
Так я вывожу grid:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Если впервые загружена
Dim a, dor_sokr, pred_sokr As String
If Me.IsPostBack = False Then
Try
If Session.Item("dor") <> 0 Then
'делаем это если не сетевой уровень
OdbcCommand1.CommandText = "SELECT NAME,SNAME FROM IC00.Dor WHERE DOR_KOD =" & Session.Item("dor") & ""
CNN.Open()
reader = OdbcCommand1.ExecuteReader()
reader.Read()
a = reader("NAME")
dor_sokr = reader("SNAME")
reader.Close()
''''''
If Session.Item("dor") <> 0 And Session.Item("pred") <> 0 Then
OdbcCommand2.CommandText = "SELECT SNAME FROM IM00.Pred WHERE PRED_ID =" & Session.Item("Pred") & ""
reader2 = OdbcCommand2.ExecuteReader()
reader2.Read()
pred_sokr = RTrim(Replace(reader2("SNAME"), dor_sokr, ""))
reader2.Close()
End If
'''''''''''''''''''''''''''''''
Label2.Text = "Дорога = '" & a & "', " & pred_sokr & " Отчетная дата = '" & Session.Item("o_date_now").Substring(0, 10) & "'"
CNN.Close()
End If
''''''''''''''''''''''''''''''''
a = Session("page")
DMPRM.CurrentPageIndex = Session("page")
DMPRM.SelectedIndex = Session("item")
Dim ds As DataSet = getdataset(PR)
bindgrid(ds)
Catch ex As Exception
err3_msg = "ОШИБКА : Внимание! Произошла серьезная ошибка системы. Пожалуйста, свяжитесь с разработчиками и " _
& "передайте следующее описание ошибки: " & ex.Message
Label2.Text = err3_msg
Finally
If (Not CNN Is Nothing) Then
CNN.Close()
End If
End Try
End If
'Переменная для поля сортировки
PR = Me.ViewState("pr")
End Sub
Public Function getdataset(ByVal PR) As DataSet
'Отчетный месяц и год
Dim mes_o, god_o, mes_t, god_t As String
mes_o = Session.Item("o_date_now").Substring(5, 2)
god_o = Session.Item("o_date_now").Substring(0, 4)
Dim prm_SQL As String
Dim str_per As String '?
Dim i As Integer '?
'определяем уровень пользователя
If Session.Item("dor") = 0 And Session.Item("pred") = 0 Then
'уровень сети
Label2.Text = "Сетевой уровень" & " Отчетная дата = '" & Session.Item("o_date_now").Substring(0, 10) & "'"
prm_SQL = "SELECT NAME_BALDERJ,ADRES,NAZNACH,S_OBSH,ETAZ_NADZEM,ETAZ_PODZEM,"
prm_SQL &= "PROT,BAL_STOIM,NUM_INV_KART,ID_DM "
prm_SQL &= "FROM IM00.DM "
prm_SQL &= IIf(PR = "NAME_BALDERJ", "ORDER BY NAME_BALDERJ ", _
IIf(PR = "NAZNACH", "ORDER BY NAZNACH ", _
IIf(PR = "S_OBSH", "ORDER BY S_OBSH ", _
IIf(PR = "PROT", "ORDER BY PROT ", _
IIf(PR = "NUM_INV_KART", "ORDER BY NUM_INV_KART ", _
IIf(PR = "REG_NOM", "ORDER BY REG_NOM ", _
IIf(PR = "NAME_Z", "ORDER BY NAME_Z ", _
"ORDER BY NAME_BALDERJ")))))))
Button2.Enabled = False 'скрываем возможность редактирования таблицы
DMPRM.Columns.Item(0).Visible = False
DMPRM.Columns.Item(11).Visible = False
Else
If Session.Item("dor") <> 0 And Session.Item("pred") = 0 Then
'уровень дороги
prm_SQL = "SELECT NAME_BALDERJ,ADRES,NAZNACH,S_OBSH,ETAZ_NADZEM,ETAZ_PODZEM,"
prm_SQL &= "PROT,BAL_STOIM,NUM_INV_KART,ID_DM "
prm_SQL &= "FROM IM00.DM,IM00.PRED "
prm_SQL &= "WHERE IM00.DM.pred_id=IM00.PRED.pred_id and IM00.PRED.dor_kod=" & Session.Item("dor") & " "
prm_SQL &= IIf(PR = "NAME_BALDERJ", "ORDER BY NAME_BALDERJ ", _
IIf(PR = "NAZNACH", "ORDER BY NAZNACH ", _
IIf(PR = "S_OBSH", "ORDER BY S_OBSH ", _
IIf(PR = "PROT", "ORDER BY PROT ", _
IIf(PR = "NUM_INV_KART", "ORDER BY NUM_INV_KART ", _
IIf(PR = "REG_NOM", "ORDER BY REG_NOM ", _
IIf(PR = "NAME_Z", "ORDER BY NAME_Z ", _
"ORDER BY NAME_BALDERJ")))))))
Button2.Enabled = False 'скрываем возможность редактирования таблицы
DMPRM.Columns.Item(0).Visible = False
DMPRM.Columns.Item(11).Visible = False
' SELECT count(*)
'FROM IM00.DM ,im00.pred where IM00.DM.pred_id=im00.pred.pred_id and im00.pred.dor_kod=17
Else
'уровень линейного предприятия
prm_SQL = "SELECT NAME_BALDERJ,ADRES,NAZNACH,S_OBSH,ETAZ_NADZEM,ETAZ_PODZEM,"
prm_SQL &= "PROT,BAL_STOIM,NUM_INV_KART,ID_DM "
prm_SQL &= "FROM IM00.DM "
prm_SQL &= "WHERE PRED_ID=" & Session.Item("Pred") & " "
prm_SQL &= IIf(PR = "NAME_BALDERJ", "ORDER BY NAME_BALDERJ ", _
IIf(PR = "NAZNACH", "ORDER BY NAZNACH ", _
IIf(PR = "S_OBSH", "ORDER BY S_OBSH ", _
IIf(PR = "PROT", "ORDER BY PROT ", _
IIf(PR = "NUM_INV_KART", "ORDER BY NUM_INV_KART ", _
IIf(PR = "REG_NOM", "ORDER BY REG_NOM ", _
IIf(PR = "NAME_Z", "ORDER BY NAME_Z ", _
"ORDER BY NAME_BALDERJ")))))))
End If
End If
Dim cmd As New Odbc.OdbcCommand(prm_SQL, CNN)
Dim DA As New Odbc.OdbcDataAdapter(cmd)
Dim ds As New DataSet
Try
CNN.Open()
DA.Fill(ds)
'Dim rowz As DataRow
'For Each rowz In ds.Tables("Table").Rows
' If Trim(rowz("BAL_STOIM")) = 12385954 Then
' rowz("DATE_W") = ""
' End If
'Next
Catch ex As Exception
err3_msg = "ОШИБКА : Внимание! Произошла серьезная ошибка системы. Пожалуйста, свяжитесь с разработчиками и " _
& "передайте следующее описание ошибки: " & ex.Message
Label2.Text = err3_msg
Finally
If (Not CNN Is Nothing) Then
CNN.Close()
End If
End Try
'CNN.Close()
Return ds
End Function
'Заполнить GRID
Public Sub bindgrid(ByVal ds As DataSet)
DMPRM.DataSource = ds
DMPRM.DataBind()
End Sub
|
|
|
|
|
Supreme Being
      
участник
Last Login: 16.04.2008 11:44
Сообщ.: 366,
Visits: 2 473
|
|
| Или вопрос очень сложный, или спрашиваю не так...
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Наверное дело не в сложности. Просто никто не знает что тут посоветовать.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 16.04.2008 11:44
Сообщ.: 366,
Visits: 2 473
|
|
to Bazile:
Посоветуйте хоть что нибудь! Время поджимает, проект стоит.
С уважением,
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Извини, babken76, но чем тебе помочь я не знаю.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 16.04.2008 11:44
Сообщ.: 366,
Visits: 2 473
|
|
Ты имеешь в виду, что не решал задачу выгрузки данных в MS Excel на локальную машину пользователя? Подскажите хотя бы, куда копать?
С уважением,
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Возможно стоит рассмотреть альтернативы в виде CSV файла или искать специализированные компоненты для генерации xls файлов.
|
|
| |