对于数据绑定控件,我们通常提供data text field和data value field (在简单的控件(如Dropdownlist)中),但在Gridview等控件中提供更多的字段()。通常,数据源是IEnumerable类型的。
发布于 2012-02-29 10:09:56
我从来不知道我能如此容易地找到这些信息,而LLyod在使用反射来从数据源中查找数据方面实际上是错误的。当我通过Reflector检查时,没有一个数据控件使用它;(
解决问题的链接
http://msdn.microsoft.com/en-us/library/ms366540.aspx
你是怎么做的,下面是
protected override void PerformDataBinding(IEnumerable retrievedData)
{
base.PerformDataBinding(retrievedData);
// Verify data exists.
if (retrievedData != null)
{
string dataStr = String.Empty;
foreach (object dataItem in retrievedData)
{
if (DataTextField.Length > 0)
{
dataStr = DataBinder.GetPropertyValue(dataItem,
DataTextField, null);
}
else
{
PropertyDescriptorCollection props =
TypeDescriptor.GetProperties(dataItem);
if (props.Count >= 1)
{
if (null != props[0].GetValue(dataItem))
{
dataStr = props[0].GetValue(dataItem).ToString();
}
}
}
}
}
}如果上面的代码看起来是希腊语和拉丁语,那么您必须学习asp.net控件开发的课程,才能理解正在做什么。
发布于 2012-02-29 09:18:59
DataControlField in GridView)将处理DataBinding事件。DataRowView或实体实例)。这是通过DataBinder.GetDataItem传递实际控件或控件的NamingContainer来完成的。例如,如果您正在为更高级别的数据绑定控件(如DataControlField )实现一个较低级别的控件(如GridView ),那么它将处理单元控件的数据绑定,因此它将使用单元格的命名容器传递给使用当前数据绑定上下文的DataBinder.GetDataItem方法来获得相同的数据。DataField字符串仅为属性名称,那么您可以查找和缓存属性描述符,然后对不同的数据项使用相同的方法。我建议您使用Reflector等工具来检查相关控件的代码,以获得更好的想法。
https://stackoverflow.com/questions/9496065
复制相似问题