如何以编程方式更改ObjectDataSource的Select方法?

时间:2011-04-25 00:42:48

标签: c# asp.net objectdatasource

假设我有一个给定的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方法期间接受两个参数的方法?例如

MethodName:GetProjectByUsernameDeptCd()
参数:Username,DepartmentCode

我想按用户角色更改select方法。我试图搜索SO和互联网,但似乎我没有运气。无论如何,我想做的是:

  

if(Role is Admin)
         使用ASPX中声明的默认SelectMethod和Parameters     否则
         将SelectMethod更改为“GetProjectByUsernameDeptCd”
          设置parameter1 = value1
         设置parameter2 = value2

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

谢谢你,最诚挚的问候, 舍温

3 个答案:

答案 0 :(得分:5)

是的,您可以在代码隐藏文件中的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

  3. 希望这会有所帮助..

    快乐编程!

答案 1 :(得分:3)

试试这个

 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);

答案 2 :(得分:0)

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