Witam.
W trakcie tworzenia projektu SSIS (Visual Studio 2008) napotkałem się na problem z którym nie mogę sobie poradzić. W projekcie znajduje się Script Task który importuje pewne dane do kontrolki datagridview. Wszystko poprawnie działa, program nie wyrzuca żadnych błędów. Niestety problem pojawia się gdy próbuję skopiować zawartość komórki w kontrolce datagridview. Mogę skopiować zawartość komórki gdy wejdę w tryb edycji ale wolałbym żeby była możliwość skopiowania zawartości komórki tylko przy jej zaznaczeniu. Przy próbie skopiowania(ctrl + c) zawartości zaznaczonej komórki wyskakuje błąd:
Wystąpił nieobsługiwany wyjątek w składniku aplikacji. Jeśli klikniesz przycisk kontynuuj aplikacja zignoruje błąd i podejmie próbę kontynuacji
Bieżący wątek musi być ustawiony na tryb jednowątkowego apartamentu aby można było wykonywać wywołania OLE. Upewnij się że w funkcji Main jest zaznaczony STAThreadAttribute
Szczegóły:
Szczegółowe informacje na temat wywoływania debugowania w trybie JIT (just in time)
zamiast tego okna dialogowego znajdują się na końcu tego komunikatu.
************** Debugowanie w trybie JIT **************
Aby włączyć debugowanie w trybie JIT (just-in-time), plik .config tej
aplikacji lub komputera (machine.config) musi mieć
wartość jitDebugging ustawioną w sekcji system.windows.forms.
Aplikacja musi być również skompilowana z włączonym
debugowaniem.
Na przykład:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
Gdy debugowanie JIT jest włączone, wszystkie nieobsługiwane wyjątki
są wysyłane do debugera JIT zarejestrowanego na komputerze
i nie są obsługiwane w tym oknie dialogowym.
Teraz zastanawiam się czy standardowo kopiowanie zaznaczonej komórki jest w ogóle możliwe w tej kontrolce czy trzeba napisać funkcję która to obsłuży? Niestety google nie pomogło mi w rozwiązaniu tego problemu. Są rozwiązania ale tylko jeśli program nie jest częścią ssis czyli tutaj nie mają zastosowania albo nie działają. Wszelkie sugestie mile widziane. Z góry dzięki za pomoc.
Kod głównego skryptu:
Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
Imports System.Windows.Forms
Imports System.Xml
Imports System.Data.OleDb
<System.AddIn.AddIn("ScriptMain", Version:="1.0", Publisher:="", Description:="")> _
<System.CLSCompliantAttribute(False)> _
Partial Public Class ScriptMain
Inherits Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
Enum ScriptResults
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
End Enum
Public Sub Main()
Dim Dialog1 As New Form1
Dim oleDA As New OleDbDataAdapter()
Dim dt As New DataTable()
oleDA.Fill(dt, Dts.Variables("VAR_OBJECT_EMAIL_CRM").Value)
Dialog1.DataGridView1.AutoGenerateColumns = True
Dialog1.DataGridView1.DataSource = dt
Dialog1.DataGridView1.Refresh()
Dialog1.ShowDialog()
If Dialog1.DialogResult = DialogResult.OK Then
Dts.TaskResult = ScriptResults.Success
end if
End Sub
End Class
Kod Windows Form:
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
CBZakazEmailingu.SelectedIndex = 1
End Sub
Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BDodaj.Click
Me.DialogResult = System.Windows.Forms.DialogResult.OK
Me.Close()
End Sub
Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BAnuluj.Click
Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.Close()
End Sub
End Class
dodanie znaczników <code class="vbnet"> - Furious Programming