2016-11-21 8 views
-1
機能の

コール:C#関数は、空のリストを返しながら、空の関数イマイチでリスト

List<ProceduraEtapuPolaFormularza> prawoPolGrida = impuls.pobierzPrawaPolFormularza(krpEtapDlaOsoby.pe_id_etapu, pole.idPola, poleGrida.id_pola_g); 

機能:

public List<ProceduraEtapuPolaFormularza> pobierzPrawaPolFormularza(int peIdEtapu,int fdpIdPola,int? fdpgIdPolaG) 
{ 
    var p = new OracleDynamicParameters(); 
    p.Add("p_pe_id_etapu", peIdEtapu, OracleDbType.Int32, ParameterDirection.Input); 
    p.Add("p_fdp_id_pola", fdpIdPola, OracleDbType.Int32, ParameterDirection.Input); 
    p.Add("p_fdpg_id_pola_g", fdpgIdPolaG, OracleDbType.Int32, ParameterDirection.Input); 
    p.Add("p_refcursor", null, OracleDbType.RefCursor, ParameterDirection.Output); 
    List<ProceduraEtapuPolaFormularza> queryList = new List<ProceduraEtapuPolaFormularza>(); 
    queryList = connection.Query<ProceduraEtapuPolaFormularza>("ktr_coliber_pcg.pobierz_pe_pola_form", param: p, commandType: CommandType.StoredProcedure).ToList<ProceduraEtapuPolaFormularza>(); 
    return queryList; 
} 

は、デバッガでイムは、私はこの機能に入るとナビゲート"return querylist"には1要素ありますが、関数の呼び出しに戻ると、リストカウントは0になります。 この関数はconstrucorから呼び出されていると付け加えたいと思います。 REFパラメータとして一覧ここで間違っている何

を作成する

  • 切り抜いた方法を出力パラメータ
  • リストとして

    • リスト: は、私はいくつかのオプションを試してみましたか?

      コンストラクタ(ルック機能 "TworzFormularz"):

      public KorespondencjaWindowForm(KorespondencjaEtapDlaOsoby _krpEtapDlaOsoby, ImpulsRepository _impuls, FormMain formMain = null, KorespondencjaMDIForm mdiParentForm = null) 
      { 
          _formMain = formMain; 
          impuls = _impuls; 
          InitializeComponent(); 
          gridViewFormularz.CellValueChanged += GridView1_CellValueChanged1; 
      
          krpEtapDlaOsoby = _krpEtapDlaOsoby; 
          UzupelnijNaglowekISzczegoly(_krpEtapDlaOsoby.id_korespondencji); 
          TworzFormularz(); 
          TworzFormularzKlientow(); 
          PobierzZalaczniki(); 
          DopasujLayoutGrida(); 
          _mdiFormParent = mdiParentForm; 
          DevExpress.Skins.SkinManager.EnableFormSkins(); 
          DevExpress.LookAndFeel.LookAndFeelHelper.ForceDefaultLookAndFeelChanged(); 
          SkinManager.EnableMdiFormSkins(); 
          gridViewFormularz.PopupMenuShowing += GridView1_PopupMenuShowing; 
          try 
          { 
           impuls.WczytajUstawieniaKolumnGrida(int.Parse(_formMain.podstawowyNrEwidencyjnyOsobyZalogowanej.ToString()), int.Parse(gridViewFormularz.Name), null, ref gridViewFormularz); 
          } 
          catch (Exception error) 
          { 
           Program.logger.Error("KorespondencjaWindowForm.WczytajUstawieniaKolumnGrida():" + error.Message); 
          } 
          gridViewKlienci.CustomColumnDisplayText += GridViewKlienci_CustomColumnDisplayText; 
          // repositoryItemLookUpEditTypAdresu.CustomDisplayText += RepositoryItemLookUpEditTypAdresu_CustomDisplayText; 
          listaHistorii= impuls.pobierzHistorieKorespondencji(krpEtapDlaOsoby.id_korespondencji); 
          bindingSourceHistoria.DataSource = listaHistorii; 
          gridViewKlienci.RowCellStyle += gridViewKlienci_RowCellStyle; 
      
      } 
      

      そして今、 "TworzFormularz" ボディ:

      public void TworzFormularz() 
      { 
      
          referencjeFormularzy = new Dictionary<dynamic, FormularzDefinicjaPola>(); 
          Formularz f = impuls.pobierzFormularz(krpEtapDlaOsoby.form_id_formularza); 
          if (f == null) //sprawdz czy znaleziono formularz 
          { 
           MessageBox.Show("Nie znaleziono formularza.", "", MessageBoxButtons.OK, MessageBoxIcon.Error); 
           this.Close(); 
           return; 
          } 
          FormularzDefinicjaPola[] pola = impuls.pobierzPolaDlaFormularza(f.fdIdDefinicji); // pobierz pola dla tego formularza 
      
          foreach (FormularzDefinicjaPola pole in pola) // dla wszystkich pól na formularzu 
          { 
           List<ProceduraEtapuPolaFormularza> prawaPolFormularza = impuls.pobierzPrawaPolFormularza(krpEtapDlaOsoby.pe_id_etapu, pole.idPola, null); //prawa dostepu 
      
           if (pole.typPola.ToUpper() == "EDIT" || pole.typPola.ToUpper() == "MEMO") 
           { 
      
            TextEdit t = new TextEdit(); 
            t.AutoSize = false; 
            t.Location = new Point(pole.pozycjaX, pole.pozycjaY); 
            t.Size = new Size(pole.szerokosc, pole.wysokosc); 
            t.Name = pole.idPola.ToString(); 
            t.Tag = pole.typDanych; 
            panelControl1.Controls.Add(t); 
            t.AutoSize = false; 
            LabelControl label = new LabelControl(); 
            label.Text = pole.opisWyswietlany; 
            label.Name = pole.idPola.ToString(); 
            label.Location = new Point(pole.pozycjaX-label.Width-1 , pole.pozycjaY); 
            panelControl1.Controls.Add(label); 
            label.Location = new Point(pole.pozycjaX - label.Width-1 , pole.pozycjaY); 
            panelControl1.AutoSize = false; 
            label.AutoSize = false; 
            //obsluga praw do pola 
            ProceduraEtapuPolaFormularza prawoPola = prawaPolFormularza.FirstOrDefault(); 
            if (prawaPolFormularza.Count > 1) 
            { 
             Program.logger.Warn("KorespondencjaWindowForm.TworzFormularz(): Znaleziono wiecej jak jedno prawo do pola o definicji: " + pole.idPola + " dla etapu: " + krpEtapDlaOsoby.id_etapu); 
            } 
            if (prawoPola != null && prawoPola.widocznosc!=null) 
            { 
             if (prawoPola.widocznosc.ToUpper() == "EDYCJA" || prawoPola.widocznosc.ToUpper() == "EDIT" || prawoPola.widocznosc.ToUpper() == "EDITABLE" || prawoPola.widocznosc.ToUpper() == "EDIT ABLE" || prawoPola.widocznosc.ToUpper() == "EDIT_ABLE") 
             { 
              t.Enabled = true; 
             } 
             else if (prawoPola.widocznosc.ToUpper() == "TYLKO ODCZYT" || prawoPola.widocznosc.ToUpper() == "TYLKO_ODCZYT" || prawoPola.widocznosc.ToUpper() == "READ" || prawoPola.widocznosc.ToUpper() == "READ_ONLY" || prawoPola.widocznosc.ToUpper() == "READ ONLY") 
             { 
              t.Enabled = false; 
      
             } 
             else if (prawoPola.widocznosc.ToUpper() == "NIEWIDOCZNE" || prawoPola.widocznosc.ToUpper() == "INVISIBLE") 
             { 
              t.Visible = false; 
              label.Visible = false; 
             } 
            } 
      
            referencjeFormularzy.Add(t, pole); 
      
           } 
           if (pole.typPola.ToUpper() == "CXGRID") 
           { 
            DataTable dataSetGrida; 
            PoleFormularza[] widokDefinicjiGrida = impuls.pobierzDefinicjeGrida(pole.idPola,krpEtapDlaOsoby.form_id_formularza); // przekazujemy idDefinicjiPola, oraz idFormularza 
            if (widokDefinicjiGrida.Count() <= 0) 
            { 
             Program.logger.Error("TworzFormularz(): Nie wczytano kolumn dla grida o id_definicji: " + pole.idPola.ToString()); 
             continue; 
            } 
            //tworzenie data source dla grida 
            dataSetGrida = UtworzDataTableDlaGrida(widokDefinicjiGrida,pole.idPola, true); 
            gridViewFormularz.CustomUnboundColumnData += GridView1_CustomUnboundColumnData; 
      
            PoleFormularza[] widokWartosciGrida = impuls.pobierzWidokGrida(pole.idPola, krpEtapDlaOsoby.form_id_formularza); 
            //jezeli sa wiersze... 
            if (widokWartosciGrida.Count() > 0) 
            { 
            } 
            grid.DataSource = dataSetGrida; 
            _formMain.LoadNavigatorImages24x24(ref grid); 
            gridViewFormularz.Name = pole.idPola.ToString(); 
            //ustawienia grida. 
            grid.Location = new Point(pole.pozycjaX, pole.pozycjaY); 
            grid.Size = new Size(pole.szerokosc, pole.wysokosc); 
            grid.MainView = gridViewFormularz; 
            gridViewFormularz.InitNewRow 
            += GridView1_InitNewRow; 
            grid.Select(); 
            grid.Anchor = (AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Left); 
            grid.KeyPress += Grid_KeyPress; 
            gridViewFormularz.OptionsBehavior.AllowAddRows = 
             DevExpress.Utils.DefaultBoolean.True; 
            grid.Width = panelControl1.Width; 
            gridViewFormularz.OptionsSelection.MultiSelect = true; 
            grid.UseEmbeddedNavigator = true; 
            panelControl1.Controls.Add(grid); 
            grid.ForceInitialize(); 
            #region utworzenie ColumnEditow 
            foreach (GridColumn col in gridViewFormularz.Columns) 
            { 
             PoleFormularza poleGrida = widokDefinicjiGrida.Where(x => x.tytul == col.FieldName).FirstOrDefault(); 
             if (poleGrida == null) 
             { 
              Program.logger.Error("TworzFormularz() : nie znaleziono definicji pola grid, dla pola o tytule: " + col.FieldName); 
              continue; 
             } 
             else if (poleGrida.rodzaj_pola == RodzajPolaEnum.B && poleGrida.lista_wartosci != null && poleGrida.lista_wartosci.Length > 0) 
             { 
              //TODO: oprogramuj button 
              continue; 
             } 
             else if (poleGrida.rodzaj_pola == RodzajPolaEnum.B && (poleGrida.lista_wartosci == null || poleGrida.lista_wartosci.Length == 0)) 
             { 
              List<ProceduraEtapuPolaFormularza> prawoPolGrida = impuls.pobierzPrawaPolFormularza(krpEtapDlaOsoby.pe_id_etapu, pole.idPola, poleGrida.id_pola_g); 
              ProceduraEtapuPolaFormularza prawoPola2 = prawoPolGrida.FirstOrDefault(); 
              if (prawoPola2!=null && (prawoPola2.widocznosc.ToUpper()=="NIEWIDOCZNE" || prawoPola2.widocznosc.ToUpper() == "INVISIBLE" || prawoPola2.widocznosc.ToUpper() == "NIEWIDOCZNY")) 
              { 
               col.Visible = false; 
              } 
      
              RepositoryItemTextEdit obj = new RepositoryItemTextEdit(); 
              col.ColumnEdit = obj; 
             } 
             else 
             { 
              using (var t = impuls.connection.BeginTransaction()) 
              { 
               try 
               { 
      
                List<ProceduraEtapuPolaFormularza> prawoPolGrida = impuls.pobierzPrawaPolFormularza(krpEtapDlaOsoby.pe_id_etapu, pole.idPola, poleGrida.id_pola_g); 
                ProceduraEtapuPolaFormularza prawoPola2 = prawoPolGrida.FirstOrDefault(); 
                if (prawoPola2 != null && (prawoPola2.widocznosc.ToUpper() == "NIEWIDOCZNE" || prawoPola2.widocznosc.ToUpper() == "INVISIBLE" || prawoPola2.widocznosc.ToUpper() == "NIEWIDOCZNY")) 
                { 
                 col.Visible = false; 
                } 
                RepositoryItemComboBox obj = new RepositoryItemComboBox(); 
                col.ColumnEdit = obj; 
      
               } 
               catch (Exception error) 
               { 
                t.Rollback(); 
      
               } 
      
              } 
      
             } 
            } 
            #endregion 
            UzupelijWierszeGrida(ref widokWartosciGrida, ref dataSetGrida); 
            UzupelnijEdytoryGrida(ref gridViewFormularz, widokDefinicjiGrida); 
            gridViewFormularz.Columns["PolaFormularza"].Visible = false; 
            // poczatek inicjalizacji wartosci grida (jeżeli użytkownik coś zmieni, to obsługa dalsza jest w evencie cell changed. 
            //jezeli uzytkownik chce dodac nowy wiersz, jego obsluga nastąpi w initNewRowEvent. 
            // impuls.pasteClipboardToGrid(gridView1); 
      
           } 
           if (pole.typPola.ToUpper() == "COMBOBOX") 
           { 
            ComboBoxEdit cbEdit = new ComboBoxEdit(); 
            cbEdit.Name = pole.idPola.ToString(); 
            cbEdit.Location = new Point(pole.pozycjaX , pole.pozycjaY); 
            cbEdit.Size = new Size(pole.szerokosc, pole.wysokosc); 
            if (pole.listaWartosci != null && !pole.listaWartosci.ToUpper().Contains("SELF") && pole.typListy == "D") 
            { 
             dynamic src = impuls.pobierzSelectDlaGrida(pole.listaWartosci); 
             cbEdit.Properties.Items.AddRange(src); 
            } 
            if (pole.typListy == "S" || pole.typListy == "B" && pole.listaWartosci != null && pole.listaWartosci.Length > 0) 
            { 
             string[] splity = @pole.listaWartosci.Split('\n'); 
             cbEdit.Properties.Items.AddRange(splity); 
            } 
            cbEdit.AutoSize = false; 
            panelControl1.Controls.Add(cbEdit); 
            cbEdit.Visible = true; 
            LabelControl label = new LabelControl(); 
      
            label.Text = pole.opisWyswietlany; 
            label.Name = pole.idPola.ToString(); 
            label.Location = new Point(pole.pozycjaX-label.Width-1, pole.pozycjaY); 
            panelControl1.Controls.Add(label); 
            label.Location = new Point(pole.pozycjaX - label.Width-1 , pole.pozycjaY); 
            label.AutoSize = false; 
      
            cbEdit.AutoSize = false; 
            //obsluga praw do pola 
            ProceduraEtapuPolaFormularza prawoPola = prawaPolFormularza.FirstOrDefault(); 
            if (prawaPolFormularza.Count > 1) 
            { 
             Program.logger.Warn("KorespondencjaWindowForm.TworzFormularz(): Znaleziono wiecej jak jedno prawo do pola o definicji: " + pole.idPola + " dla etapu: " + krpEtapDlaOsoby.id_etapu); 
            } 
            if (prawoPola != null && prawoPola.widocznosc != null) 
            { 
             if (prawoPola.widocznosc.ToUpper() == "EDYCJA" || prawoPola.widocznosc.ToUpper() == "EDIT" || prawoPola.widocznosc.ToUpper() == "EDITABLE" || prawoPola.widocznosc.ToUpper() == "EDIT ABLE" || prawoPola.widocznosc.ToUpper() == "EDIT_ABLE") 
             { 
              cbEdit.Enabled = true; 
             } 
             else if (prawoPola.widocznosc.ToUpper() == "TYLKO ODCZYT" || prawoPola.widocznosc.ToUpper() == "TYLKO_ODCZYT" || prawoPola.widocznosc.ToUpper() == "READ" || prawoPola.widocznosc.ToUpper() == "READ_ONLY" || prawoPola.widocznosc.ToUpper() == "READ ONLY") 
             { 
              cbEdit.Enabled = false; 
             } 
             else if (prawoPola.widocznosc.ToUpper() == "NIEWIDOCZNE" || prawoPola.widocznosc.ToUpper() == "INVISIBLE") 
             { 
              cbEdit.Visible = false; 
              label.Visible = false; 
             } 
            } 
      
            referencjeFormularzy.Add(cbEdit, pole); 
           } 
      
          } 
      
      
          SimpleButton button = new SimpleButton(); 
          button.Text = "Zapisz"; 
          button.Click += Button_Click; 
          button.Location = new Point(grid.Location.X , grid.Location.Y - 25); 
          panelControl1.Controls.Add(button); 
          SimpleButton buttonWyslij = new SimpleButton(); 
          buttonWyslij.Text = "Wyślij"; 
      
      
          panelControl1.ResumeLayout(); 
          buttonWyslij.Location = new Point(button.Location.X + button.Width + 10, button.Location.Y); 
          panelControl1.PerformLayout(); 
          panelControl1.Controls.Add(buttonWyslij); 
          buttonWyslij.Click += ButtonWyslij_Click; 
          pobierzWartosciPol(pola); 
      } 
      

      関数を呼び出した場所:

      using (var t = impuls.connection.BeginTransaction()) 
      { 
          try 
          { 
           List<ProceduraEtapuPolaFormularza> prawoPolGrida = impuls.pobierzPrawaPolFormularza(krpEtapDlaOsoby.pe_id_etapu, pole.idPola, poleGrida.id_pola_g); 
           ProceduraEtapuPolaFormularza prawoPola2 = prawoPolGrida.FirstOrDefault(); 
           if (prawoPola2 != null && (prawoPola2.widocznosc.ToUpper() == "NIEWIDOCZNE" || prawoPola2.widocznosc.ToUpper() == "INVISIBLE" || prawoPola2.widocznosc.ToUpper() == "NIEWIDOCZNY")) 
           { 
            col.Visible = false; 
           } 
           RepositoryItemComboBox obj = new RepositoryItemComboBox(); 
           col.ColumnEdit = obj; 
      
          } 
          catch (Exception error) 
          { 
           t.Rollback(); 
      
          } 
      } 
      
  • +0

    表示されたコードはおそらく問題ではありません。コンストラクタから追加のコードを追加するか、コンストラクタ全体を表示します。 – Igor

    +2

    さて、変数の初期値の新しいリストを作成して直ちに上書きすることはできません。 'var queryList = connection.Query(...)。ToList();'だけを使用してください。 (私はあなたが 'ToList'の型引数を必要としないことを強く疑っています...) –

    +0

    私はそれを行い、それは仕事をしませんでした。 前にこのリストを作成することは、絶望の行為でした。 –

    答えて

    0

    ナッシング私が投稿したコードで間違っていた。 おそらくどこでもヌルを表示しているデバッガの問題です。 リストを反復するために "foreach"ループを作成し、一度入力しました。

    複数の再オープンの後、デバッガのクリーニングとビルドの問題がなくなりました。

    関連する問題