winforms 如何将datatable绑定到bindingsource作为数据源?

ql3eal8s  于 2022-12-14  发布在  其他
关注(0)|答案(1)|浏览(155)

我有一个带有datagridview的小型winforms powershell图形用户界面,datagridview使用一个数据表作为数据源,该数据表从SQL-Server中获取数据。
现在,我想使用DataGridViewAutoFilter库实现一个筛选器,它要求我在绑定源中拥有数据。根据我在网上找到的内容,我认为您可以只使用数据表作为绑定源的数据源,如下所示:

#Add assemblies
Add-Type -assembly System.Windows.Forms;

$script:stage = 'Prelive';

#region.stage - collects multiple strings like connstring from ext. script
#Skip to function GetAWTagebuch for the actual script
if($script:stage){
    #region0.externeKomponenten
        # SkriptVersion
        $script:version = "0.1.0.5" 

        #"Stage: $script:stage , Quartal: $Quartal, Periode: $Periode, Zeitpunkt: $Zeitpunkt, Periodenconnstring: $PeriodeConnection"  | Out-File -FilePath "\\filegradientprelive\data\Deployment\Auslieferung\Quartalsunabhaengig\KVNO\Powershell_Skripte\BackupActivity\output.txt"
        if($script:stage -eq "Live"){
          $Toolspath = "\\filegradientlive\data\Deployment\Ausfuehrung\Powershell\Tools\Tools.ps1"
        }
        elseif($script:stage -eq "Prelive"){
          $Toolspath = "\\filegradientprelive\data\Deployment\Ausfuehrung\Powershell\Tools\Tools.ps1"
        }

        if (Test-Path $Toolspath) {
            . (Get-Item $Toolspath)
        }
        elseif(Test-Path ((Get-Item -Path $MyInvocation.MyCommand.Path).DirectoryName + "\Tools.ps1")){
            # Prämisse: Toolsskript liegt im gleichen Scriptverzeichnis
            . ((Get-Item -Path $MyInvocation.MyCommand.Path).DirectoryName + "\Tools.ps1")    
        }
        else{
            Write-Host "Es konnte kein Tools-Skript eingebunden werden. Das Skript wird beendet."
            echo
            exit
        }
    #endregion0.externeKomponenten

    #region1.GlobaleVariablen
        [string]$script:LogLauf='1'
        [string]$script:stage = $script:stage
        [string]$script:Periode = $Periode

        $script:GrundParam = get-Grundparameter -Stage $script:stage -Periode $Periode -LoggingTabelle $LoggingTabelle

        #Folgende Werte werden als Grundparameter zurückgeliefert
        [string]$script:CS_Systempruefung = $script:GrundParam.CS_Systempruefung;
        [string]$script:CS_Gradient = $script:GrundParam.CS_Gradient;
        [string]$script:CS_KVnet = $script:GrundParam.CS_KVnet;
        [string]$script:CS_Logging = $script:GrundParam.CS_Logging;
        [string]$script:LoggingTabelle = $script:GrundParam.LoggingTabelle;
        [string]$script:LogLaufId = $script:GrundParam.LogLaufId;
        [string]$script:Fileserver = $script:GrundParam.Fileserver;
        [string]$script:Auslieferungspfad = $script:GrundParam.Auslieferungspfad;
        [string]$script:Einzelinstanz_gerade = $script:GrundParam.Einzelinstanz_gerade;
        [string]$script:Einzelinstanz_ungerade = $script:GrundParam.Einzelinstanz_ungerade;
        [string]$script:DWH_Sammelinstanz = $script:GrundParam.DWH_Sammelinstanz;
        [string]$script:Sammelinstanz = $script:GrundParam.Sammelinstanz;
        [string]$script:AkonInstanz = $script:GrundParam.AkonInstanz;
        [string]$script:KVOnlineInstanz = $script:GrundParam.KVOnlineInstanz;

        #Zusätzliche Parametr bei angabe einer Periode
        [string]$script:Periode = $Periode;
        [string]$script:CS_Periode = $script:GrundParam.CS_Periode;
        [string]$script:CS_Workflow  = $script:GrundParam.CS_Workflow;
        #[string]$script:CS_Intermediate = $script:GrundParam.CS_Intermediate;
        [string]$script:PeriodenInstanz = $script:GrundParam.PeriodenInstanz;
        [string]$script:Sammelinstanz_Periode = $script:GrundParam.Sammelinstanz_Periode;
        #[string]$script:IntermediateInstanz = $script:GrundParam.IntermediateInstanz;
        [string]$script:IntermediateDB = $script:GrundParam.IntermediateDB;
        [string]$script:PeriodenId = $script:GrundParam.PeriodenId;
        [string]$script:KVnetTyp = $script:GrundParam.KVnetTyp;
    #endregion1.GlobaleVariablen
}

function GetAWTagebuch {
    $dt = PM_DB-TableResult -Periode $script:stage -SQL ("SELECT * FROM [dbo].[IUP_AWtable];") -ConnectionString $script:CS_Systempruefung -LogConnectionString $script:CS_Logging -LogTable $script:LoggingTabelle -TestName AWtable;
}

function GenerateForm {
    #Form parameters
    $form_dbtest = New-Object System.Windows.Forms.Form;
    $form_dbtest.Name = 'Binding Source Test';
    $form_dbtest.Text = 'Binding Source Test';
    $form_dbtest.Size = '1310, 650';
    $form_dbtest.StartPosition = 1;
    $form_dbtest.BackColor = '#3D6387';
    $form_dbtest.FormBorderStyle = 3;

    #Bindingsource
    $BSBindingSource = New-Object System.Windows.Forms.BindingSource;
    
    #DataTable
    $dt = New-Object System.Data.DataTable;
    GetAWTagebuch

    $BSBindingSource.DataSource = $dt;

    #DGV
    $dgv = New-Object System.Windows.Forms.DataGridView;
    $dgv.Name = 'dataGridView1';
    $dgv.Size = '1235, 441';
    $dgv.Anchor = (4, 8, 1);
    $dgv.Location = '13, 21';
    $dgv.RowTemplate.DefaultCellStyle.ForeColor = '#000096';
    $dgv.TabIndex = 3;
    $dgv.ColumnHeadersHeightSizeMode = 2;
    $dgv.RowHeadersVisible = $True;
    $dgv.RowHeadersWidth = 24;
    $dgv.AllowUserToAddRows = $False;
    $dgv.AllowUserToDeleteRows = $False;
    $dgv.AllowUserToOrderColumns = $True;
    $dgv.DataSource = $BSBindingSource;

    $form_dbtest.Controls.Add($dgv);

    [void]$form_dbtest.ShowDialog();
}

GenerateForm

不管什么原因,这不工作,虽然。我没有得到一个错误,但DGV没有显示任何东西。谁能告诉我,我做错了什么/我如何做正确的?

编辑:包含整个脚本。它从函数GetAWTagebuch开始。在此之前的部分从外部脚本获取connectionstring和其他字符串

0kjbasz6

0kjbasz61#

像在c#中一样执行此操作而不进行绑定

$dt = New-Object System.Data.DataTable;
$dt.Columns.Add("col1") | Out-Null
$dt.Columns.Add("col2") | Out-Null
$dt.Rows.Add(@("1","2")) | Out-Null

$datagridview.DataSource = $dt

相关问题