Сильные напечатанные данные Windows Forms DataBindingC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Сильные напечатанные данные Windows Forms DataBinding

Сообщение Anonymous »

Я изучаю сильные напечатанные данные Windows Forms DataBinding с использованием методов расширения. Я получил эту последующую помощь от Ксавье, как показано ниже: < /p>
using System;
using System.Linq.Expressions;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public static Binding Add
(this ControlBindingsCollection dataBindings,
object dataSource,
Expression controlExpression,
Expression objectExpression)
{
return Add(dataBindings, dataSource, controlExpression, objectExpression, false);
}

public static Binding Add
(this ControlBindingsCollection dataBindings,
object dataSource,
Expression controlExpression,
Expression objectExpression,
bool formattingEnabled)
{
string controlPropertyName = ProcessExpression(controlExpression.Body);
string bindingTargetName = ProcessExpression(objectExpression.Body);

return dataBindings
.Add(controlPropertyName, dataSource, bindingTargetName, formattingEnabled);
}

public static Binding Add
(this ControlBindingsCollection dataBindings,
object dataSource,
Expression controlExpression,
Expression objectExpression)
{
return Add(dataBindings, dataSource, controlExpression, objectExpression, false);
}

public static Binding Add
(this ControlBindingsCollection dataBindings,
object dataSource,
Expression controlExpression,
Expression objectExpression,
bool formattingEnabled
)
{
string controlPropertyName = ProcessExpression(controlExpression.Body);
string bindingTargetName = ProcessExpression(objectExpression.Body);

return dataBindings.Add(controlPropertyName, dataSource, bindingTargetName, formattingEnabled);
}

private static string ProcessExpression(Expression expression)
{
string propertyName;
if (expression is MemberExpression)
{
propertyName = ((MemberExpression) (expression)).Member.Name;
}
else if (expression is UnaryExpression)
{
propertyName = ((MemberExpression) ((UnaryExpression) (expression)).Operand).Member.Name;
}
else
{
throw new InvalidOperationException(
"Unknown expression type error in DataBindingsExtensionMethods.Add");
}
return propertyName;
}
}
< /code>
Теперь я могу настроить дату данных, как это: < /p>
txtBoundInt.DataBindings.Add
(bindingSource, tb => tb.Text, contact => contact.Id);
< /code>
или это: < /p>
cboBoundSelectedItem.DataBindings.Add

(bindingSource, cbo => cbo.SelectedItem, con => con.ContactType)
< /code>
Похоже, что происходит много выражений. Есть ли лучший способ? < /P>

Редактировать: Я нашел лучший способ - это воспроизводится ниже @carl_g. < /P>

Подробнее здесь: https://stackoverflow.com/questions/344 ... atabinding
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»