【问题标题】:How to change the SelectMethod of ObjectDataSource programatically?如何以编程方式更改 ObjectDataSource 的 Select 方法?
【发布时间】:2011-04-25 00:42:48
【问题描述】:

假设我有一个给定的ObjectDataSource,这个objectdatasource“SelectMethod”属性被设置为一个类Project的“GetProjectsByUsername”并接受一个参数。

 <asp:ObjectDataSource ID="GetProjectsDataSource" runat="server" SelectMethod="GetProjectsByUsername"
    TypeName="BusinessLayer.Project">
    <SelectParameters>
        <asp:ControlParameter ControlID="hiddenUsername" Name="username" PropertyName="Value"
            Type="String" />
    </SelectParameters>
</asp:ObjectDataSource>

现在,是否可以将此 ObjectDataSource 的 SelectMethod 属性更改为在 OnInit 方法期间接受两个参数的方法?例如

方法名:GetProjectByUsernameDeptCd()
参数:用户名、部门代码

我想通过用户角色更改选择方法。我试图搜索 SO 和 Internet,但似乎我没有运气。无论如何,我想这样做:

如果(角色是管理员)
使用在 ASPX 中声明的默认 SelectMethod 和 Parameters
其他
将 SelectMethod 更改为“GetProjectByUsernameDeptCd”
设置参数1 = value1
设置参数2 = value2

或者我在想是否有其他更好的方法来做到这一点。

感谢您和最诚挚的问候, 宣威

【问题讨论】:

    标签: c# asp.net objectdatasource


    【解决方案1】:

    是的,您可以在代码隐藏文件中 ObjectDataSource 的 OnSelecting 事件中执行此操作。

    例如

    protected void ObjectDataSource1_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
        {
            ObjectDataSource1.SelectMethod = "<YourSelectMethod>";
            e.InputParameters.Clear(); // this is a different method with new parameters.
            e.InputParameters.Add("Param1", "Value1");
            e.InputParameters.Add("Param2", "Value2");
            e.InputParameters.Add("Param3", "Value3");
        }
    

    更多详情请阅读以下文章: 1.http://weblogs.asp.net/rajbk/pages/426642.aspx

    1. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.objectdatasource.selecting%28v=vs.90%29.aspx

    2. http://www.asp.net/data-access/tutorials/programmatically-setting-the-objectdatasource-s-parameter-values-vb

    希望这会有所帮助..

    编程愉快!

    【讨论】:

    • 您好,谢谢,但我认为在 OnInit 方法中更改 ObjectDataSource 属性要快得多。
    【解决方案2】:

    试试这个

     GetProjectsDataSource.SelectMethod = "GetProjectByUsernameDeptCd";
     Parameter p1 = new Parameter("parameter1 ",TypeCode.String);
     Parameter p2 = new Parameter("parameter2 ",TypeCode.String);
     GetProjectsDataSource.SelectParameters.Add(p1);
     GetProjectsDataSource.SelectParameters.Add(p2);
    

    【讨论】:

    • 嗨,谢谢,我会试试这个。这个也应该在page类的OnInit中完成吧?
    • 嘿,谢谢,真不敢相信这这么容易。 >.
    【解决方案3】:

    您是否尝试过 C# 代码隐藏?不要在 aspx 标记中定义它,而是转到代码隐藏文件,然后在那里进行。

    【讨论】:

    • 好吧,基本上我是在问如何在代码隐藏中做到这一点。 :)
    猜你喜欢
    • 1970-01-01
    • 2020-02-18
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多