【问题标题】:need a more efficient way of working with object data source in .net需要一种更有效的方式来处理 .net 中的对象数据源
【发布时间】:2011-04-01 14:54:12
【问题描述】:

我在我的一些页面中使用 .net 编写网站我需要使用 datagrid 来显示一些数据并将我的数据绑定到 datagrid 我使用对象数据源,如下所示:

//this is 
public class userData
{
    private long userid = 0;
    private string username = null;
    private long amounts = 0;
    private DateTime registerdate;

    public long Userid
    {
        get { return userid; }
        set { userid = value; }
    }

    public string Username
    {
        get { return username; }
        set { username = value; }
    }

    public long Amounts
    {
        get { return amounts; }
        set { amounts = value; }

    }

    public DateTime Registerdate
    {
        get { return registerdate; }
        set
        { registerdate = value;}

    }

    }

//my businesshelper class

public class BusinessHelper
{
    public BusinessHelper()
    {
        //
        // TODO: Add constructor logic here
        //
    }


    public ICollection GetusersAmount()
    {
        ArrayList list = new ArrayList();
        DataSet1TableAdapters.userTableAdapter usert = new DataSet1TableAdapters.userTableAdapter();
        DataSet1.userDataTable ud = usert.GetData();


        foreach(DataSet1.userRow R in ud)
        {
            userData user = new userData();
            user.Amounts = R.Amount;
            user.Registerdate = R.registerdate;
            user.Userid = R.userID;
            user.Username = R.username ;
            list.Add(user);

        }
        return list;
    }
}

然后在我的 apsx 文件中,我放置一个 objectdatasource 并将 select 语句绑定到 GetUsersAmount(),然后将 obejctdatasource 绑定到我的 datagrid

但我认为我选择的方式效率不高,我只是想听听你做这些事情的方式。

问候。

【问题讨论】:

    标签: .net asp.net business-objects


    【解决方案1】:

    您可以从使用自动属性开始:

    public class userData
    {
      //  private long userid = 0;
    
        public long Userid    { get; set;   }
    
        ....
    }
    

    并且,假设您想保留 TableAdapter:

    // untested
    DataSet1.userDataTable ud = usert.GetData();
    
    var list = from r in ud.Rows.AsEnumerable()
               select new userData() { Userid = r.userID, Username = r.username }
    
    return list; // maybe list.ToList()
    

    顺便说一句,我建议好好看看你的命名约定,那些小写的类名让我很困惑。

    【讨论】:

    • 我不知道 高效 中的“austin powers”是什么意思。因此,只想从编码工作的角度(而不是其他方面)来挑剔上述代码是有效的。
    • 实际上我想以自定义方式填充数据网格并操作一些数据,例如将格鲁吉亚日历日期转换为阳历日期等等......我想使用 ODS(Obejct 数据源)但我真的不知道我的方式是否正确?在分页和编辑方面,当它绑定到数据网格时,我可以依赖 ODS 吗?
    • @VinaYc,OP 想要将它提供给 Datagrid。相比之下,这里的任何优化都将是微不足道的。我将效率视为“易于编写/维护”
    【解决方案2】:

    我不认为你做错了什么(最多,正如其他海报所建议的,你可以使用 DataReader 而不是数据集)。 userData 类通常称为 DTO(数据传输对象)或实体类。您还有其他 DTO 选择,例如,您可以使用类型化数据表或通用数据集。自定义类是最灵活的选择,但当然需要付出最大的努力——因为您必须手动编码它们并编写逻辑来填充/保存它们。有一些框架(OR Mapper)可以减少这些繁琐的工作并自动生成数据访问代码。此类工具的示例是实体框架(ADO.NET 实体模型)、Linq To Sql、NHibernate 等。

    【讨论】:

      【解决方案3】:

      我不会使用数据集来填充您的业务对象列表,但会使用 SqlDataReader 或类似的东西。数据集的开销比 DataReader 多。

      我还会使用 Collection(或基于 IEnumerable 的东西)来返回业务对象列表。转换到 ArrayList 和从 ArrayList 转换可能会产生成本。

      您可能还希望在您的方法中实现一些分页支持,除非您的数据网格一次显示每条记录。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-21
        • 2015-07-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多