Конференция ".Net" » Добавление объектов в ArrayList не в обработчике Form_Load [C#, WinXP]
 
  • Галинка © (17.01.07 04:51) [0]
    Нашла у мелкомягких связку "датагрид - аррайлист". Но они добавляют данные в аррайлист в обработчике события загрузки формы, а мне надо добавлять по нажатию на кнопку. Если в обработчике загрузки формы ничего не добавить в аррайлист, то при позднем добавлении данные не отображаются - строки остаются просто пустыми. В чем секрет?

    Вот код приложения:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Collections;

    namespace ArrayList_DataGridView
    {
       public partial class Form1 : Form
       {
           private ArrayList ArrGuitar;
           private CurrencyManager curMan;
           private bool IsRefresh = false;

           public Form1()
           {
               InitializeComponent();
               ArrGuitar = new ArrayList();
               ArrGuitar.Add(new Guitar(0, "", ""));

               curMan = (CurrencyManager)dataGridView1.BindingContext[ArrGuitar];

               dataGridView1.AutoGenerateColumns = false;
               dataGridView1.DataSource = ArrGuitar;
               colID.DataPropertyName = "ID";
               colName.DataPropertyName = "Name";
               colJahr.DataPropertyName = "Jahr";
               curMan.Refresh();
           }


           private void button1_Click(object sender, EventArgs e)
           {
               IsRefresh = true;
               this.Refresh();
           }


           private void Form1_Paint(object sender, PaintEventArgs e)
           {
               if (IsRefresh)
               {
                   if ((ArrGuitar[0] as Guitar).ID == 0) ArrGuitar.RemoveAt(0);
                   ArrGuitar.Add(new Guitar(1, "Hayneken", "1967"));
                   ArrGuitar.Add(new Guitar(2, "Godzilla", "1962"));
                   ArrGuitar.Add(new Guitar(3, "Crimona", "1977"));
                   

                   curMan = (CurrencyManager)dataGridView1.BindingContext[ArrGuitar];

                   curMan.EndCurrentEdit();
                   curMan.Refresh();
                   IsRefresh = false;
               }

           }
       }
    }



    чтобы попробовать закоментируйте строки:
    ArrGuitar.Add(new Guitar(0, "", ""));
    if ((ArrGuitar[0] as Guitar).ID == 0) ArrGuitar.RemoveAt(0);

  • Галинка © (17.01.07 04:58) [1]
    Попробовала связывать только после добавления данных. Вроде работает. Т.е. "заранее" связывать нельзя?
  • DiamondShark © (17.01.07 11:26) [2]

    > В чем секрет?

    А откуда связанный контрол узнает, что в ArrayList чего-то добавили?
    ArrayList об этом не сообщает.

    Выход:
    Либо связывать после добавления данных, либо использовать в качестве источника данных наследника (или обёртку), реализующего IBindingList.
  • Галинка © (17.01.07 15:59) [3]
    Спасибо. Пойдк читать умные книги...
 
Конференция ".Net" » Добавление объектов в ArrayList не в обработчике Form_Load [C#, WinXP]
Есть новые Нет новых   [118834   +93][b:0][p:0.002]