对象数据源非常适合小型项目,但是在将数据层信息嵌入应用程序的UI层时,它们的伸缩性不好。我建议您仅将它们用于非常小的应用程序和暂存器测试内容。如果您决定使用它们,请做好准备,以应对将来的扩展和维护问题。
应用程序架构=可维护性+可伸缩性+ ......
而且我想,我阅读的开始学习应用程序体系结构的每篇文章都使用一些类来构建业务数据层,并用于ObjectDataSource将表示层与业务层连接起来。
看来我错了。真正用于业务层及其与表示层的连接的最佳方法是什么?
当我设置一个DataSource控件并想要使用.ToString()as时DisplayMember,我需要设置DisplayMember最后一个或ValueMember将覆盖它.
从ListControl继承的控件可以显示不同类型的对象.如果对象上不存在指定的属性或DisplayMember的值为空字符串(""),则显示对象的ToString方法的结果.
代码重现:
类:
class SomeClass
{
public string PartA { get; set; }
public string PartB { get; set; }
public string WrongPart { get { return "WRONG"; } }
public override string ToString()
{
return $"{PartA} - {PartB}";
}
}
Run Code Online (Sandbox Code Playgroud)
形成:
var testObj = new SomeClass() { PartA = "A", PartB = "B" };
comboBox1.DataSource = new [] { testObj };
comboBox1.DisplayMember = "";
comboBox1.ValueMember = "WrongPart"; …Run Code Online (Sandbox Code Playgroud) 我有一个gridview,我在页脚行中创建了一个Insert Template.
我有一个绑定到业务对象的ObjectDataSource.
我有一个永远不会被触发的OnInserting事件处理程序.
一旦我在ObjectDataSource上调用.Insert,程序就会遇到错误.我收到的错误是没有值,我应该检查以确保值字典不为空.
我没有看到插入字典作为参数的方法.我已经看到提到抓取ObjectDataSourceView并使用它的Insert方法,但我没有看到任何提及如何做到这一点,MSDN声称你没有访问权限.
是反思的方式去这里?有没有更好的方法在gridview上插入行?我在这里的步骤中遗漏了哪些明显的东西?
下面是代码:
ObjectDataSource:
<asp:ObjectDataSource ID="LeasesDS" runat="server" OnInserting="LeasesDS_Inserting"
DataObjectTypeName="CLS.BusObjects.LeaseObj" DeleteMethod="Delete"
InsertMethod="Insert" OldValuesParameterFormatString="original_{0}"
SelectMethod="GetLeasesByCustomerID" TypeName="CLS.BusObjects.LeaseObj"
UpdateMethod="Update">
<SelectParameters>
<asp:Parameter Name="customerID" Type="Int32" />
</SelectParameters>
<InsertParameters>
<asp:Parameter Name="CustomerID" Type="Int32" />
<asp:Parameter Name="PurchaseDate" Type="DateTime" />
<asp:Parameter Name="AutoYear" Type="Int32" />
<asp:Parameter Name="Make" Type="String" />
<asp:Parameter Name="Model" Type="String" />
<asp:Parameter Name="LeaseEndDate" Type="DateTime" />
</InsertParameters>
</asp:ObjectDataSource>
Run Code Online (Sandbox Code Playgroud)
CodeBehind方法:
protected void LeasesGrid_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Insert" && Page.IsValid)
{
LeasesDS.Insert();
}
}
protected void LeasesDS_Inserting(object sender, ObjectDataSourceMethodEventArgs e)
{
DropDownList GridCustomersList …Run Code Online (Sandbox Code Playgroud) 这真是让我烦恼,所以我希望有人可以帮助我一点
1)假设页面包含用户控件,则在UserControl.Page_Load之前触发Page.Page_Load:
a)我假设如果Page包含ObjectDataSource1控件,那么ObjectDataSource1将在UserControl.Page_Load之前执行数据绑定?!
b)如果是这种情况,那么Page.Prerender也会在UserControl.Page_Load之前发生吗?
c)如果UserControl包含ObjectDataSource2控件,该控件是否会在ObjectDataSource1(直接包含在Page内)的同时执行数据绑定?
但这没有多大意义,因为我会假设UserControl中的控件遵循UserControl的生命周期而不是Page的?
无论如何,我认为托管用户控件的网页无法接收事件或调用用户控件中包含的控件的方法?!如果是这样,那么web页面如何能够在ObjectDataSource2上调用databind ?
感谢名单
编辑:
我混淆的主要原因是以下一些书的引用:
...用户的国家,州和城市只能从配置文件中读取一次并保存在本地变量中.UserControl.Page_Load不能用于此,因为UserControl.ObjectDataSource完成的自动绑定发生得更早,所以我们必须使用UserControl.Page_Init事件处理程序
我假设在上面引用作者建议如果用户控件包含ODS,那么这个ODS将在UserControl.Page_Load之前执行数据绑定,这不是你所说的?
BTW - 用户控制上面提到的引用是在设计时添加到网页
另一个编辑:
我做了一些谷歌搜索,这本书(或其中的一部分)可通过以下链接获得.
无论如何,引用来自第257页,它基本上是描述ArticleListing.ascx用户控件的部分的一部分.
顺便说一句 - 这样你就不会认为我是妄想......我不希望任何人阅读关于该用户控件的整个部分,我只是认为第257页的代码可能会提供足够的上下文来弄清楚作者究竟是什么意思
我正在使用实体框架1.0并尝试使用可访问我的外观的objectdatasource输出Gridview.问题是,它似乎特别困难,并没有看到任何真正做我想在互联网上做的事情.
对于那些知道的人来说,gridview需要一个objectdatasource,它不能自动排序然后你必须手动完成.没那么糟糕.它变成了一场噩梦,当我们将分页和过滤器设置添加到gridview的数据源时.
经过几个小时在互联网上搜索,我问你,伙计们,如果有人知道一个链接,可以解释我如何混合网格视图和objectdatasource的Pagging,Sorting和过滤!
提前致谢,对不起我的英语.
我有一个连接到ObjectDatasource的Select方法,这个方法可能抛出异常,我不知道如何处理它!
问题是我没有控制它.呈现页面时,ObjectDatasource直接调用select方法,并直接抛出未处理的异常.
另一方面,如果它有问题,我不想让它返回空集合,因为集合可能是空的而没有问题.
那么,我在哪里可以处理异常?
还有其他选择吗?
我正在Visual Studio 2013上开发Web应用程序,我遇到了下一个问题:
"AddressMaintenance.App_Code.DAL.DataSetTableAdapters.VALUESTableAdapter"类型不明确:它可能来自程序集"C:\ Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\47bb176a\b43c95ba\App_Code .xtamkrzu.DLL'或汇编'C:\ inetpub\wwwroot\AddressMaintenance\bin\AddressMaintenance.DLL'.请在类型名称中明确指定程序集.
我已经阅读了互联网和其他用户的问题,我没有找到错误.我也尝试在IIS7上运行应用程序(不在我正在开发Web的计算机上),我得到了同样的错误.
使应用程序崩溃的代码是:
<asp:ObjectDataSource
ID="ODS_GetUsers"
runat="server"
SelectMethod="getUsers"
TypeName="AddressMaintenance.App_Code.DAL.DataSetTableAdapters.USERSTableAdapter">
<SelectParameters>
<asp:Parameter DefaultValue="Active" Name="value_type" Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
Run Code Online (Sandbox Code Playgroud)
先感谢您.
我正在使用ObjectDataSource将数据绑定到GridView; 它工作正常,除了它总是创建一个新对象用作数据源.我可以很好地完成所有设置但我不能使用现有对象的实例来指定它作为"数据源".是否有可能做到这一点?如果是这样,怎么样?
如果不可能,为什么?
编辑:这是发生了什么的要点(对象类型已更改):在第一页上,您正在编辑狗的属性.其中一个属性是"有小狗",如果它是真的,下一页你指定那些小狗的名字.在我的情况下发生的事情是那些小狗没有与原始狗相关联,而是与"新"狗相关联.(我的问题是"母狗"的含义是巧合.;-))
我试图使用ObjectDataSource启用分页.这需要我使用SelectCountMethod(因此网格可以知道有多少页面).我的ObjectDataSource如下所示:
<asp:ObjectDataSource ID="ItemsDataSource" runat="server" SelectMethod="GetContentGridItems"
TypeName="ContentItemExtensions" SelectCountMethod="GetContentGridItemsCount" EnablePaging="True">
<SelectParameters>
<asp:QueryStringParameter Name="contentItemID" QueryStringField="cid" DbType="Guid" />
<asp:QueryStringParameter Name="contentTypeID" QueryStringField="tid" Type="String" />
<asp:QueryStringParameter Name="contentTypeGroup" QueryStringField="tgid" Type="String" />
<asp:QueryStringParameter Name="parentItemID" QueryStringField="pcid" DbType="Guid" />
<asp:QueryStringParameter Name="parentFieldID" QueryStringField="pfld" type="String" />
</SelectParameters>
Run Code Online (Sandbox Code Playgroud)
相应的静态类看起来像这样:
public static class ContentItemExtensions
{
public static DataTable GetContentGridItems(Guid? contentItemId,string contentTypeID, string contentTypeGroup, Guid? parentItemID, string parentFieldID,int maximumRows, int startRowIndex)
public static int GetContentGridItemsCount(Guid? contentItemId,string contentTypeID, string contentTypeGroup, Guid? parentItemID, string parentFieldID)
}
Run Code Online (Sandbox Code Playgroud)
当我不使用分页时,一切正常,但是当我启用分页时,我得到以下异常,清楚地说明它需要什么:
ObjectDataSource'ProjectsDataSource'找不到具有参数的非泛型方法'GetContentGridItemsCount':contentItemID,contentTypeID,contentTypeGroup,parentItemID,parentFieldID.
我的方法有这些参数,并且不是通用的,所以我没有线索.谁能帮我?
有什么不同?我什么时候应该更喜欢一个?
以及与此相关的一些小问题:
如果我有对象数据,什么时候调用saveObject?
它看起来像垃圾收集器回收所有我的多米诺手柄.我试图向下转换然后克隆它,但它没有帮助(它怎么知道它仍然是一个多米诺骨牌对象?).有解决方法吗?
如果我从xPages创建"var tmpVar = new package.TestClass()",它会在更新时被回收.但是,如果我从bean创建java对象,它就会停留在那里.正确?
objectdatasource ×10
asp.net ×6
c# ×5
.net ×2
gridview ×2
ado.net ×1
architecture ×1
asp.net-2.0 ×1
data-binding ×1
javabeans ×1
paging ×1
sorting ×1
winforms ×1
xpages ×1