Как мне пройти через DataBindings, чтобы добавить Control.Parse и Control.Format? - PullRequest
0 голосов
/ 16 февраля 2011

Я немного новичок в C #.У меня есть WinForm с несколькими десятками различных элементов управления (многие из них элементы управления TextBox).Я использовал конструктор, чтобы добавить привязку данных ко всем из них, чтобы получить данные при загрузке формы.Однако значения в базе данных зашифрованы.(Они выглядят так: «MasAFfa31sdf3fE23AF235 ==», когда они должны выглядеть следующим образом: «Сьюзи-Доу».) Я хотел иметь возможность добавить метод в обработчик событий Format для расшифровки данных каждой привязки до ее появления в форме.

Мои вопросы: Как я могу создать метод, который циклически перебирает this.DataBindings и добавляет обработчик события Format для расшифровки значения перед отображением формы?Как назначить привязку к привязкам данных для элемента управления?

Вот то, о чем я думал.

Сначала я бы вызвал этот метод в методе загрузки:

    private void PatientForm_Load(object sender, EventArgs e)
    {            
        this.tableAdapter.Fill(this.DBDataSet.People);

        UpdateBindings(this);
    }

Затем я перебрал бы элементы управления this, чтобы зарегистрировать EventHandler для каждого элемента управления TextBox:

    private void UpdateBindings(Control controlGroup)
    {
        object controlItem;
        foreach (object controlItemLoop in controlGroup.Controls)
        {
            // Recurse through this control's items and get their bindings...
            controlItem = (Control)controlItemLoop;
            UpdateBindings((Control)controlItem);

            // Update Controls for Data Formatting
            TextBox controlItemTextBox = default(TextBox);
            if (controlItem is TextBox)
            {
                controlItemTextBox = (TextBox)controlItem;
                int i = 0;
                foreach (Binding binding in controlItemTextBox.DataBindings)
                {
                    Binding b = new System.Windows.Forms.Binding(controlItemTextBox.DataBindings[i].PropertyName, controlItemTextBox.DataBindings[i].DataSource, controlItemTextBox.DataBindings[i].BindingMemberInfo.BindingMember, true);

                    // Here, how do I assign a control's Control.DataBindings?
                    // Like this? controlItemTextBox.DataBindings[i] = b;

                    b.Parse += new ConvertEventHandler(BindingParse_TextBox);
                    b.Format += new ConvertEventHandler(BindingFormat_TextBox);
                    i++;
                }
            }
        }
        this.patientsBindingSource.ResetCurrentItem();
    }

Затем, конечно:

    private void BindingFormat_TextBox(object sender, ConvertEventArgs e)
    {
        // Decrypt
        if (e.DesiredType != typeof(string))
            return;
        if (e.Value.GetType() != typeof(string))
            return;
        string value = 
        try
        {
            e.Value = Decrypt((string)e.Value);
        }
        catch(Exception error)
        {
            MessageBox.Show("A formatting error occurred. Please attempt the operation again.\n\n" + error.Message, "Data Formatting Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
        }
    }

Как я могусделать это?

1 Ответ

0 голосов
/ 16 февраля 2011

Если привязки данных уже существуют, вам не нужно создавать их заново, просто чтобы добавить вызов разбора:

foreach (Binding binding in controlItemTextBox.DataBindings)
    {
        binding.Parse += new ConvertEventHandler(BindingParse_TextBox);
        binding.Format += new ConvertEventHandler(BindingFormat_TextBox);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...