С# привязка datagridview к datatable в форме и управлении

У меня есть следующий код:

        DataGridView lGrid = new DataGridView();
        BindingSource _bind = new BindingSource();
        DataTable Table = new DataTable();

        this.Controls.Add(lGrid);
        lGrid.AutoGenerateColumns = true;


        List<string> ColumnsNames = new List<string>();
        ColumnsNames.Add("ID");
        ColumnsNames.Add("NAME");

        foreach (string Name in ColumnsNames)
            Table.Columns.Add(Name);

        DataColumn col = Table.Columns["ID"];
        DataColumn[] keys = new DataColumn[1];
        keys[0] = Table.Columns["ID"];
        Table.PrimaryKey = keys;

        lGrid.DataSource = _bind;
        _bind.DataSource = Table;

        int i = lGrid.Columns.Count;

который заполняет lGrid столбцами в datatable просто отлично, когда этот код выполняется в конструкторе формы. Однако, когда я перемещаю его в конструктор управления, привязка не работает, и я = 0. Почему это так и что я могу с этим поделать?

Обновление1

OK. конструкторы самые простые

открытый частичный класс Form1 : Form {

    public Form1()
    {
          InitializeComponent();
         //CODE GOES HERE
    }
}

VS

public class mycontrol : Control
{
    public mycontrol()
    {
        //CODE GOES HERE
    }
}


public partial class Form1 : Form
{

    public Form1()
    {
          InitializeComponent();

          mycontrol ll = new mycontrol();
          this.Controls.Add(ll);
    }
}

person Anya    schedule 24.02.2011    source источник
comment
Это Winforms/WPF/ASP.NET?   -  person Robbie Tapping    schedule 24.02.2011
comment
Можете ли вы опубликовать два конструктора, в которых возникает проблема?   -  person Matthew Cox    schedule 24.02.2011
comment
@Робби, это winforms   -  person Anya    schedule 24.02.2011


Ответы (1)


Используйте думать, если вы

lDataGrid.Bind();

тогда вы получите Count()

или проверьте количество событий AfterDataBinding.

person Robbie Tapping    schedule 24.02.2011
comment
datagridview, похоже, не имеет метода Bind, но проверка счетчика в событии DataBindingComplete действительно работает, спасибо. Может ли кто-нибудь объяснить мне, почему он не связывается сразу, как в форме? - person Anya; 24.02.2011
comment
Причина в том, что вы вызываете код в своем классе MyControl, а не в элементе управления формой. и если я прав, запуск вашего приложения еще не привязан. Кто-то может объяснить это немного лучше, чем я. Если бы вы действительно имели элемент управления как часть формы в вызове InitializeComponent(), вы бы получили привязку напрямую. - person Robbie Tapping; 24.02.2011