Как избежать повторного связывания сетки при каждой инициализации элемента управления? - PullRequest
2 голосов
/ 02 декабря 2011

Я создал пользовательский элемент управления с сеткой. Я хотел бы связать эту сетку один раз и использовать ее снова и снова в моем приложении. Если я помещаю привязку в элемент управления, данные извлекаются столько раз, сколько я использую элемент управления. Как мне связать это только один раз ??

public ClientLookUp()
    {
        InitializeComponent();
        vw_clientsTableAdapter.Fill(dsclientlkup.vw_clients); //This occurs as many times as I have the user control, instead of just once.

    }

Ответы [ 3 ]

0 голосов
/ 02 декабря 2011

Если вы действительно хотите использовать одну и ту же сетку в вашем элементе управления снова и снова, вы можете создать одну статическую сетку, и ваш конструктор ClientLookUp добавит ее в нужное место - Panel иличто угодно - когда бы ни создавался новый.

Прежде чем идти по этому пути, спросите себя, действительно ли это то, что вы хотите сделать.Наличие такой же идентичной сетки, существующей во многих местах, может вызвать проблемы в будущем.Если вы хотите поддержать редактирование в сетке, вы обнаружите, что изменение одного значения изменяет одинаковое значение во всех других ваших сетках ..

РЕДАКТИРОВАТЬ

Я пыталсязаставить приведенный ниже код работать, но я не уверен, что такой подход будет возможен.Кажется, что как только вы пытаетесь прикрепить один и тот же элемент пользовательского интерфейса в более чем одно место, он перемещается из последнего места, куда вы его поместили;не похоже, что вы можете иметь одну и ту же сетку, находясь в более чем одном месте одновременно.Это имеет смысл, когда вы об этом думаете.

Вот код, который я пробовал.Может быть, это будет вам полезно.

    public UserControl1()
    {
        InitializeComponent();

        this.Controls.Add(myStaticGridView);
        myStaticGridView.Dock = DockStyle.Fill;
    }

    static DataGridView _staticGrid;
    public DataGridView myStaticGridView
    {
        get
        {
            if (_staticGrid != null)
                return _staticGrid;

            _staticGrid = new DataGridView();
            _staticGrid.Columns.Add("A", "A");
            _staticGrid.Columns.Add("B", "B");
            _staticGrid.Columns.Add("C", "C");

            _staticGrid.Columns[0].DataPropertyName = "A";
            _staticGrid.Columns[1].DataPropertyName = "B";
            _staticGrid.Columns[2].DataPropertyName = "C";

            _staticGrid.DataSource = new[] {
                new { A = "someA", B = "someB", C = "someC"},
                new { A = "someA", B = "someB", C = "someC"},
                new { A = "someA", B = "someB", C = "someC"},
                new { A = "someA", B = "someB", C = "someC"},
            };

            return _staticGrid;
        }
    }

И затем загрузка элемента управления будет выглядеть следующим образом:

    private void button1_Click(object sender, EventArgs e)
    {
        flowLayoutPanel1.Controls.Add(new UserControl1());
    }
0 голосов
/ 02 декабря 2011

Если вы хотите загрузить данные только один раз, то загрузите их либо в статическую переменную, либо в отдельный класс, на который ссылается элемент управления.

0 голосов
/ 02 декабря 2011

Ну, все, что вы положите в конструктор, будет выполняться каждый раз, когда вы создаете объект!Как насчет предоставления метода Initialize, который вы можете вызывать всякий раз, когда вам нужно перезагрузить данные ??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...