ObjectDataSource存储过程参数是从一个方法?

时间:2013-07-03 13:59:19

标签: c# asp.net gridview webforms datasource

我正在尝试在asp.net web-forms应用程序中使用GridView设置ObjectDataSource。我计划用于ObjectDataSource的select命令通过使用存储过程查询数据库来返回DataTable,如下所示:

public DataTable GetProductsById(string ids = null)
        {

            DataTable productDataTable = new DataTable();

            // Stored procedure (sqldb server) is executed here
            SqlCommand cmd = new SqlCommand("GetProductByIdsRML_CLR", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter myParam = new SqlParameter("@ids", SqlDbType.NVarChar);
            myParam.Value = (ids);
            cmd.Parameters.Add(myParam);
            SqlDataAdapter dataAdapter = new SqlDataAdapter();
            dataAdapter.SelectCommand = cmd;

            dataAdapter.Fill(productDataTable);

            return productDataTable;
        }

该方法将字符串作为参数,该字符串是逗号分隔的产品ID列表,此参数将传递给存储过程,然后执行查询。但是,我无法正确设置它,因为此输入ids通过代码中的另一个方法传递给此方法。这就是问题所在,因为在尝试设置ObjectDataSource时,它会询问存储过程的参数应该来自何处,但“另一个方法”不是一个选项。这就是我所说的: Choosing parameters for objectdatasource

这些选项似乎都没有封装“此项目中的另一种方法”。如果有人知道在这种情况下该怎么做,那就太好了。另外,如果从存储过程返回DataTable不是一个好主意,那也很好,我可以很容易地改变它,但问题仍然存在。谢谢!我觉得有一个非常简单的解决方案...

2 个答案:

答案 0 :(得分:1)

感谢msdn:

上的这个教程,我把它整理好了

http://msdn.microsoft.com/en-us/library/aa581787.aspx

在文章的最后,它展示了如何在代码中实现我想要做的事情。您从该下拉列表中选择“无”,并将参数放在ObjectDataSource的Selecting事件后面的代码中,我的看起来像这样:

protected void ObjectDataSource1_Selecting(object sender,
                                           ObjectDataSourceSelectingEventArgs e)
        {
            e.InputParameters["ids"] = SearchResults.idList;
        }

其中idList是我需要传递给存储过程的以逗号分隔的字符串列表。只要每次定义idList字段,GridView + ObjectDataSource几乎都会处理剩下的事情。

答案 1 :(得分:0)

一种选择是使用Session,然后使用OnLoadComplete的{​​{1}}方法并在其中设置Page变量。

Session