-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(); } }
表示されたコードはおそらく問題ではありません。コンストラクタから追加のコードを追加するか、コンストラクタ全体を表示します。 – Igor
さて、変数の初期値の新しいリストを作成して直ちに上書きすることはできません。 'var queryList = connection.Query(...)。ToList();'だけを使用してください。 (私はあなたが 'ToList'の型引数を必要としないことを強く疑っています...) –
私はそれを行い、それは仕事をしませんでした。 前にこのリストを作成することは、絶望の行為でした。 –