我有一个从SqlDataReader
语句返回的ExecuteDataReader
。
我想要的只是:在绑定到网格之前更改数据读取器中的列名。
情况如下:
问题是:如果存储过程中的一列为大写,而网格中的相关列为小写,则网格不填充。
我有很多基于这个架构的存储过程。其中一些有许多行可显示。正因为如此,我使用数据读取器来提高性能。
例如,在返回数据读取器后,我有两列(A,B
)。
在将列'A'
绑定到网格(如reader.GetName(i)
)之前,我希望将它更改为'a'
(转换为小写)
我想做些像
reader.SetName(i)
但是,我们无法更改数据读取器列名。
发布于 2012-12-18 22:39:23
发布于 2012-12-18 22:16:53
您可以尝试使用预定义的列名将DbDataReader加载到DataTable中,然后在tout应用程序中使用该表作为数据源。
发布于 2012-12-18 23:35:37
我在这里的建议是:分离UI和数据库代码。如果您的UI受数据读取器的影响,那么这只会让我问:“为什么UI要与数据读取器对话?”这两件事在堆栈的两端完全相反。我将通过让DAL返回一个填充的POCO/DTO类型(或者可能是视图模型类型)的具体列表来抽象,即
public List<Customer> GetCustomers({some filter etc}) {...}
然后绑定到它,即
var customers = dal.GetCustomers(...);
...
someUI.DataSource = customers;
然后用以下属性很好地定义Customer
类型:
public class Customer {
public int Id {get;set;}
public string Name {get;set;}
...
}
DAL上的任何实现更改现在都与UI完全分离。
https://stackoverflow.com/questions/13946476
复制