मैं एक्सटेंशन विधियों का उपयोग करके मजबूत टाइप किए गए विंडोज फॉर्म डेटाबेस में देख रहा हूं। मैं नीचे के रूप में Xavier से दूर नीचे दी गई सहायता मिल गया है:मजबूत टाइप किए गए विंडोज फॉर्म डेटाबेस
txtBoundInt.DataBindings.Add<Contact>
(bindingSource, tb => tb.Text, contact => contact.Id);
या इस:
cboBoundSelectedItem.DataBindings.Add
<Contact, ComboBox>
(bindingSource, cbo => cbo.SelectedItem, con => con.ContactType)
वहाँ हो रहा है
using System;
using System.Linq.Expressions;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public static Binding Add<T>
(this ControlBindingsCollection dataBindings,
object dataSource,
Expression<Func<Control, object>> controlExpression,
Expression<Func<T, object>> objectExpression)
{
return Add(dataBindings, dataSource, controlExpression, objectExpression, false);
}
public static Binding Add<T>
(this ControlBindingsCollection dataBindings,
object dataSource,
Expression<Func<Control, object>> controlExpression,
Expression<Func<T, object>> objectExpression,
bool formattingEnabled)
{
string controlPropertyName = ProcessExpression(controlExpression.Body);
string bindingTargetName = ProcessExpression(objectExpression.Body);
return dataBindings
.Add(controlPropertyName, dataSource, bindingTargetName, formattingEnabled);
}
public static Binding Add<T, K>
(this ControlBindingsCollection dataBindings,
object dataSource,
Expression<Func<K, object>> controlExpression,
Expression<Func<T, object>> objectExpression)
{
return Add(dataBindings, dataSource, controlExpression, objectExpression, false);
}
public static Binding Add<T, K>
(this ControlBindingsCollection dataBindings,
object dataSource,
Expression<Func<K, object>> controlExpression,
Expression<Func<T, object>> 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<T, K>");
}
return propertyName;
}
}
अब मैं इस तरह एक DataBinding सेट कर सकते हैं यद्यपि अभिव्यक्तियों का बहुत सारे कास्टिंग चल रहा है। क्या कोई बेहतर तरीका है?
संपादित करें: मैं एक बेहतर तरीका खोजने के किया था, लेकिन मुझे लगता है कि जवाब देने के लिए इस सवाल का बदलने के लिए मुसीबत में मिला - यह reproduced below @Carl_G से है।
कृपया अपने प्रश्न को उत्तर में संशोधित न करें। यदि आपको कोई समाधान मिला है, तो इसे उत्तर अनुभाग में जाना होगा। एक समाधान के लिए Google लिंक को तेजी से ब्राउज़ करने का प्रयास करने वाले व्यक्ति के लिए, "ठीक है, मुझे एक समाधान मिला" पढ़ने के लिए बहुत ही विचलित है, यह जानने के बिना कि आपका प्रश्न क्या था, या यह मूल्यांकन करने में सक्षम है कि यह विज़िटर की समस्या पर लागू है या नहीं। –
ओह ठीक है, नियमों से खेलना है .. – stuartd
यह ध्यान दिया जाना चाहिए कि सी # 6 में नया नाम() फ़ंक्शन का उपयोग स्ट्रिंग का उपयोग करने से बचने के लिए भी किया जा सकता है। https://msdn.microsoft.com/en-us/library/dn986596.aspx –