如何给ObjectDataSource的SelectParameters传递一个自定义类型?

Jamesczh 2006-05-09 04:54:36
这是一个查询页面,我是通过GridView绑定一个ObjectDataSource来处理的。界面上有十个查询参数,我本来的做法是将十个查询参数,作为ObjectDataSource的SelectParameters的十个参数,后面发现这样过于复杂,我就想把这十个查询参数作为一个类的十个成员,然后将这个类作为一个参数传递过去,可是不知道如何实现?
QueryEntity para = new QueryEntity();
ObjectDataSource1.SelectParameters["para"].DefaultValue = ?;

说明:QueryEntity是我自定义的一个类型,我如何将这个类型赋给SelectParameter的默认值呢,请高手们指教!!
...全文
383 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cat_hsfz 2006-05-09
  • 打赏
  • 举报
回复
最好还是作为10个Parameters来传递吧。虽然这会导致查询函数(C#)参数过多,但用SQL时我们一样接受很多Parameters的情况。

你就认为DataSource的Parameters不是和业务层的对象打交道而是直接和数据层SQL用的Parameters打交道好了。这时候业务层C#的查询函数就仅仅是把查询用的Parameters全部传递给数据层。
Eddie005 2006-05-09
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Text;

namespace ClassLibraryTest
{
public class TestModel//这个类相当于lz的QueryEntity
{
private int _field1;
private string _field2;
private string _field3;

public int Field1
{
get { return _field1; }
set { _field1 = value; }
}
public string Field2
{
get { return _field2; }
set { _field2 = value; }
}
public string Field3
{
get { return _field3; }
set { _field3 = value; }
}
}

public class Class1 //此类则提供一个查询方法
{
public DataTable QueryData(TestModel myTestModel)
{

DataTable dt = new DataTable();
dt.Columns.Add("field1");
dt.Columns.Add("field2");
dt.Columns.Add("field3");
dt.Columns.Add("field4");
Random rd = new Random();
for (int i = 1; i < 20; i++)
{
dt.Rows.Add(new object[] { i, i * i, rd.Next(10000), true });
}
dt.AcceptChanges();

dt.DefaultView.Sort = "field3";
return dt;
}
}
}

然后当前项目引用上面的类库
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="QueryData"
TypeName="ClassLibraryTest.Class1">
<SelectParameters>
<asp:Parameter Name="myTestModel" Type="Object" />
</SelectParameters>
</asp:ObjectDataSource>
但是,这就不能直接把参数绑定到页面上的控件了,只能手写代码给参数传值

所以lz说的当然是个问题,要避免那就要舍弃最简便的方法
Jamesczh 2006-05-09
  • 打赏
  • 举报
回复
to Eddie005:
我试了用SessionParameter作为参数,可以传对象,达到了我预期效果。
如果不用这种方法,界面上增加或者删除掉一个查询条件,修改的内容就会比较多,而且相当于界面上有多少个查询参数,后台的业务逻辑方法就得定义多少个参数,这样应该不是个好方法。
能不能说说用SessionParameter有哪些不好的地方?
Eddie005 2006-05-09
  • 打赏
  • 举报
回复
唯一可以传入对象的参数源只有Session了,这看起来并不是什么好方法
<SelectParameters>
<asp:SessionParameter Name="newparameter" SessionField="aaa" Type="Object" />
</SelectParameters>

而且也没有太大必要,ObjectDataSource存在的意义之一就是你不用写自己的QueryEntity...
zhongkeruanjian 2006-05-09
  • 打赏
  • 举报
回复
不大可能能做到这一点,比较麻烦,那个ControlID不好做,不过我回去后再想想。
Jamesczh 2006-05-09
  • 打赏
  • 举报
回复
不会吧,期待高手解答。
鼓手 2006-05-09
  • 打赏
  • 举报
回复
应该是不可以吧。
如果要这样的话,你也得自己封装个通用的类。

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧